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 INTERPRETEDPada 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