- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=3901381&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.
PL/SQL Native Compilation 9i, 10g 데모#1
PL/SQL Real Native Compilation 11g 데모#2
데모
데모#1 - PL/SQL Native Compilation (9i) 사전작업
vi $ORACLE_HOME/plsql/spnc_makefile.mk ■ BEFORE OPTIMIZE=-xO1 -Xa -xstrconst -dalign -xF -mr -xildoff -errtags=yes -v -xarch=v9 -xchip=ultra3 -W2,-AKNR_S -Wd,-xsafe=unboundsym -Wc,-Qiselect-funcalign=32 -xcode=abs44 -Wc,-Qgsched-trace_late=1 -Wc,-Qgsched-T5 -xalias_level=weak -D_REENTRANT -DBIT64 -DMACHINE64 PIC=-Kpic ■ AFTER OPTIMIZE=-O1 -m64 PIC=-fpic SQL> show parameter plsql; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ plsql_compiler_flags string INTERPRETED plsql_native_c_compiler string plsql_native_library_dir string plsql_native_library_subdir_count integer 0 plsql_native_linker string plsql_native_make_file_name string plsql_native_make_utility string plsql_v2_compatibility boolean FALSE SQL> alter system set plsql_compiler_flags = 'NATIVE'; 시스템이 변경되었습니다. SQL> alter system set plsql_native_make_utility = '/usr/local/bin/make'; 시스템이 변경되었습니다. SQL> alter system set plsql_native_c_compiler = '/usr/local/bin/gcc'; 시스템이 변경되었습니다. SQL> alter system set plsql_native_make_file_name = '/data01/oracle9/9.2.0.1/plsql/spnc_makefile.mk'; 시스템이 변경되었습니다. SQL> !mkdir /data01/oracle9/work/plsql SQL> alter system set plsql_native_library_dir = '/data01/oracle9/work/plsql'; 시스템이 변경되었습니다. SQL> show parameter plsql; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ plsql_compiler_flags string NATIVE plsql_native_c_compiler string /usr/local/bin/gcc plsql_native_library_dir string /data01/oracle9/work/plsql plsql_native_library_subdir_count integer 0 plsql_native_linker string plsql_native_make_file_name string /data01/oracle9/9.2.0.1/plsql/ spnc_makefile.mk plsql_native_make_utility string /usr/local/bin/make plsql_v2_compatibility boolean FALSE
데모#1 - PL/SQL Native Compilation (9i)
SQL> alter session set plsql_compiler_flags = 'INTERPRETED', 'NON_DEBUG'; SQL> create or replace procedure oracleclub as 2 v_number number; 3 begin 4 for i in 1 .. 5000000 loop 5 v_number := i * 10000 ; 6 end loop; 7 end; 8 / 프로시저가 생성되었습니다. 경 과: 00:00:00.07 SQL> select object_name, param_value from user_stored_settings where object_name = 'ORACLECLUB'; OBJECT_NAME PARAM_VALUE -------------------- ------------------------------ ORACLECLUB INTERPRETED,NON_DEBUG ORACLECLUB BYTE 경 과: 00:00:00.01 SQL> exec oracleclub; PL/SQL 처리가 정상적으로 완료되었습니다. 경 과: 00:00:15.11 SQL> alter session set plsql_compiler_flags = 'NATIVE', 'NON_DEBUG'; 세션이 변경되었습니다. 경 과: 00:00:00.01 SQL> !ls /data01/oracle9/work/plsql SQL> alter procedure oracleclub compile; 프로시저가 변경되었습니다. 경 과: 00:00:00.73 SQL> !ls /data01/oracle9/work/plsql ORACLECLUB__DEVDBA__0.so ORACLECLUB__DEVDBA__0.so.17929 SQL> select object_name, param_value from user_stored_settings where object_name = 'ORACLECLUB'; OBJECT_NAME PARAM_VALUE -------------------- ------------------------------ ORACLECLUB NATIVE,NON_DEBUG ORACLECLUB BYTE 경 과: 00:00:00.00 SQL> exec oracleclub; PL/SQL 처리가 정상적으로 완료되었습니다. 경 과: 00:00:11.71
데모#1 - PL/SQL Native Compilation (10g) 사전작업
SQL> show parameter plsql; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ plsql_ccflags string plsql_code_type string INTERPRETED plsql_compiler_flags string INTERPRETED, NON_DEBUG plsql_debug boolean FALSE plsql_native_library_dir string plsql_native_library_subdir_count integer 0 plsql_optimize_level integer 2 plsql_v2_compatibility boolean FALSE plsql_warnings string DISABLE:ALL SQL> alter system set plsql_native_library_dir = '/home/oracle/plsql'; 시스템이 변경되었습니다. SQL> show parameter plsql; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ plsql_ccflags string plsql_code_type string INTERPRETED plsql_compiler_flags string INTERPRETED, NON_DEBUG plsql_debug boolean FALSE plsql_native_library_dir string /home/oracle/plsql plsql_native_library_subdir_count integer 0 plsql_optimize_level integer 2 plsql_v2_compatibility boolean FALSE plsql_warnings string DISABLE:ALL
데모#1 - PL/SQL Native Compilation (10g)
SQL> alter session set plsql_compiler_flags = 'INTERPRETED', 'NON_DEBUG'; 세션이 변경되었습니다. 경 과: 00:00:00.00 SQL> create or replace procedure oracleclub as v_number number; begin for i in 1 .. 5000000 loop v_number := i / 10000 ; end loop; end; / 2 3 4 5 6 7 8 프로시저가 생성되었습니다. 경 과: 00:00:00.03 SQL> column object_name format a20 column param_value format a30 select object_name, param_value from user_stored_settings where object_name = 'ORACLECLUB';SQL> SQL> OBJECT_NAME PARAM_VALUE -------------------- ------------------------------ ORACLECLUB 2 ORACLECLUB INTERPRETED ORACLECLUB FALSE ORACLECLUB BYTE ORACLECLUB DISABLE:ALL ORACLECLUB ORACLECLUB INTERPRETED,NON_DEBUG 7 개의 행이 선택되었습니다. 경 과: 00:00:00.00 SQL> exec oracleclub; PL/SQL 처리가 정상적으로 완료되었습니다. 경 과: 00:00:01.40 SQL> alter session set plsql_compiler_flags = 'NATIVE', 'NON_DEBUG'; 세션이 변경되었습니다. 경 과: 00:00:00.00 SQL> alter procedure oracleclub compile; 프로시저가 변경되었습니다. 경 과: 00:00:00.08 SQL> select object_name, param_value from user_stored_settings where object_name = 'ORACLECLUB'; OBJECT_NAME PARAM_VALUE -------------------- ------------------------------ ORACLECLUB 2 ORACLECLUB NATIVE ORACLECLUB FALSE ORACLECLUB BYTE ORACLECLUB DISABLE:ALL ORACLECLUB ORACLECLUB NATIVE,NON_DEBUG 7 개의 행이 선택되었습니다. 경 과: 00:00:00.01 SQL> exec oracleclub; BEGIN oracleclub; END; * 1행에 오류: ORA-06549: PL/SQL: 공유 객체(DLL) /home/oracle/plsql/ORACLECLUB__OCSTUDY__P__71593.so: undefined symbol: __stack_chk_fail_local을(를) 동적으로 여는 데 실패 경 과: 00:00:00.00
데모#2 - PL/SQL Real Native Compilation (11g)
alter session set plsql_code_type = native;
문서정보
- 이 문서는 구루비에서 작성하였습니다.
- 이 문서를 다른 블로그나 홈페이지에 게재하실 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 출처 : http://wiki.gurubee.net/pages/viewpage.action?pageId=3901381&
- 구루비 지식창고의 모든 문서는 크리에이티브 커먼즈의 저작자표시-비영리-동일조건변경허락(BY-NC-SA) 라이선스에 따라 자유롭게 사용할 수 있습니다.