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…..

Terimakasih

Bambang Sutejo

Tags: ,

This entry was posted on Thursday, June 11th, 2009 at 1:09 pm and is filed under 3. PL/SQL. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

11 Responses to “Meningkatkan Performance dengan Native Compilation”

derekpm July 13th, 2009 at 3:36 am

Rather interesting. Has few times re-read for this purpose to remember. Thanks for interesting article. Waiting for trackback

Earrings August 3rd, 2009 at 5:13 am

Great information. It’s really useful. Thanks

babafisa August 3rd, 2009 at 8:23 pm

I agree, this is a best article.A successful blog needs unique, useful content that interests the readers

ultra surf August 4th, 2009 at 6:28 am

Thank you for this valuable post. It changed my way

John August 6th, 2009 at 11:29 pm

I added your blog to bookmarks. And i’ll read your articles more often!

Floost August 8th, 2009 at 5:34 pm

In truth, immediately i didn’t understand the essence. But after re-reading all at once became clear.

Brown August 10th, 2009 at 11:28 am

I read a few topics. I respect your work and added blog to favorites.

John October 17th, 2009 at 10:25 pm

I really like your blog and i respect your work. I’ll be a frequent visitor.

adobe photoshop cs3 download March 14th, 2010 at 2:25 am

Great article . Will definitely apply it to my blog

ARI SETIAWAN April 24th, 2010 at 11:24 am

Semoga Allah memberikan kemudahan atas Ilmu ini kepada Bapak..
jangan berhenti berbagi ilmu Pak..

Leave a Reply