Powered By Blogger

Senin, 25 Juli 2011

Meningkatkan Performance dengan Native Compilation

Native Compilation adalah feature yang disediakan oleh Oracle agar objek-objek PL/SQL (procedure, function, package, trigger) pada saat
dieksekusi dilakukan oleh compiler non-Oracle (C Compiler). Tujuan dari Native Compilation adalah untuk meningkatkan performance. Secara default fitur ini tidak diaktifkan.
Untuk menggunakan fitur ini jika Anda menggunakan Oracle 10g, di server harus ada compiler C atau C++ dan dibuat folder untuk shared DLL-nya sedangkan di Oracle 11g tidak perlu lagi.
Parameter yang harus disetting (Oracle 10g)
  • plsql_native_library_dir
  • plsql_native_library_subdir_count
  • plsql_code_type
SQL> alter system set plsql_native_library_dir='d:\plsql_lib';
col name for a35
col value format a30
set linesize 200 

SELECT name, value FROM gv$parameter WHERE name LIKE '%plsql%';
NAME                                VALUE
----------------------------------- --------------------------
plsql_compiler_flags                INTERPRETED, NON_DEBUG
plsql_native_library_dir            d:\plsql_lib
plsql_native_library_subdir_count   0
plsql_code_type                     INTERPRETED
Pada demo ini akan digunakan dua function dimana yang satu dikerjakan dengan INTERPRETED dan satunya
engan NATIVE. Kedua function mengerjakan proses yang sama yaitu
menghitung faktorial.
Function factorial_intrepreted
 
CREATE OR REPLACE FUNCTION factorial_interpreted(p_n NUMBER)
RETURN NUMBER IS
BEGIN    
    IF (p_n = 1) THEN       
      RETURN 1;    
    ELSE       
      RETURN factorial_interpreted(p_n-1) * p_n;    
    END IF;
END factorial_interpreted;
/

Function factorial_native
 
CREATE OR REPLACE FUNCTION factorial_native(p_n NUMBER)
RETURN NUMBER IS
BEGIN
   IF (p_n = 1) THEN
     RETURN 1;
   ELSE
     RETURN factorial_native(p_n-1) * p_n;
   END IF;
END factorial_native;
/

Periksa cara eksekusinya apakah menggunakan intepreted atau native compiler
 
SELECT  o.object_name,
        o.object_type,
        s.param_value comp_mode
FROM user_stored_settings s,
      user_objects o
WHERE o.object_id = s.object_id
AND param_name = 'plsql_compiler_flags'
AND o.object_name LIKE 'FACTOR%';
OBJECT_NAME            OBJECT_TYPE  COMP_MODE
---------------------- ------------ -----------------------
FACTORIAL_INTERPRETED  FUNCTION     INTERPRETED,NON_DEBUG
FACTORIAL_NATIVE       FUNCTION     INTERPRETED,NON_DEBUG

Secara default semua dikerjakan secara INTEPRETED. Untuk mengubah agar function
factorial_native dikerjakan dengan native compiler, lakukan dengab perintah berikut :
ALTER FUNCTION factorial_native COMPILE PLSQL_CODE_TYPE=NATIVE
REUSE SETTINGS;
Kemudian periksa kembali dengan perintah sebelumnya.
Buat PL/SQL Block untuk melakukan pengujian terhadap kedua function tersebut.
 
set serveroutput on;
DECLARE
    l_start NUMBER;
    l_n     NUMBER;
BEGIN
  l_start := dbms_utility.get_time;
  FOR i IN 1 .. 10000
  LOOP
      l_n := factorial_interpreted(50);
  END LOOP;
  dbms_output.put_line('Interpreted: '
       || (dbms_utility.get_time-l_start)
       || ' hsecs...' || l_n);    

  l_start := dbms_utility.get_time;
  FOR i IN 1 .. 10000
  LOOP
      l_n := factorial_native(50);
  END LOOP;
  dbms_output.put_line('Native:      '
       || (dbms_utility.get_time-l_start)
       || ' hsecs...' || l_n); 

END;
/
Interpreted: 31 hsecs…3041409320
Native:      22 hsecs…3041409320

Lihat perbedaan waktu eksekusinya…

                                                                                     Sumber: Bambang Sutejo, klik-oracle.web.id

Tidak ada komentar:

Posting Komentar