INTERPRETED
PL/SQL library units will be compiled to PL/SQL bytecode format.
Such modules are executed by the PL/SQL interpreter engine.
NATIVE
PL/SQL library units (with the possible exception of top-level anonymous PL/SQL blocks)
will be compiled to native (machine) code.
Such modules will be executed natively without incurring any interpreter overhead.
• When the value of this parameter is changed, it has no effect on PL/SQL library units that have already been compiled. The value of this parameter is stored persistently with each library unit.
• If a PL/SQL library unit is compiled native, all subsequent automatic recompilations of that library unit will use native compilation.
NATIVE 타입이 INTERPRETED 타입보다 빠른 실행시간을 보인다.
- 준비 - sys 로그인해서 select 권한을 hr 사용자에게 할당
-- login as sysdba
alter session set container=orclpdb
/
Grant select on v_$parameter to hr;
-- login as hr
col name for a20
col value for a20
-- 현재 파라미터 값 확인
SELECT name, value
FROM v$parameter
WHERE name ='plsql_code_type';
----------------------------------------
NAME VALUE
-------------------- --------------------
plsql_code_type INTERPRETED
- 프로시져 생성
drop procedure p1;
/
create or replace procedure p1
is
begin
dbms_output.put_line('P1');
end;
- 상태 확인 - user_plsql_object_settings
select name, type, PLSQL_OPTIMIZE_LEVEL as OPT_level, PLSQL_CODE_TYPE,PLSQL_WARNINGS
from user_plsql_object_settings
where name ='P1';
----------------------------------------------------------------------
NAME TYPE OPT_LEVEL PLSQL_CODE_TYPE PLSQL_WARNINGS
---------- ---------- ---------- --------------- --------------------
P1 PROCEDURE 2 INTERPRETED DISABLE:ALL
- 파리미터의 코드 타입 변경 및 확인하는 방법
--you can do alter system, but this for DBA
--코드 상태를 native 로 변경
ALTER SESSION SET plsql_code_type=native;
-- P1 프로시져 정보는 아직도 INTERPRETED 인데,
-- 파라미터를 변경했지만 이전에 컴파일한 프로시져의 정보는 유지되기 때문이다
select name, type, PLSQL_OPTIMIZE_LEVEL as OPT_level, PLSQL_CODE_TYPE,PLSQL_WARNINGS
from user_plsql_object_settings
where name ='P1';
----------------------------------------------------------------------
NAME TYPE OPT_LEVEL PLSQL_CODE_TYPE PLSQL_WARNINGS
---------- ---------- ---------- --------------- --------------------
P1 PROCEDURE 2 INTERPRETED DISABLE:ALL
--이런 경우는 컴파일을 다시하면 코드타입이 변경된 것을 확인가능함.
create or replace procedure p1
is
begin
dbms_output.put_line('P1');
end;
-- 코드 타입이 네이티브로 변경된 것을 확인함.
select name, type, PLSQL_OPTIMIZE_LEVEL as OPT_level, PLSQL_CODE_TYPE,PLSQL_WARNINGS
from user_plsql_object_settings
where name ='P1'
---------------------------------------------------------------
NAME TYPE OPT_LEVEL PLSQL_CODE_TYPE PLSQL_WARNINGS
---------- ---------- ---------- --------------- --------------------
P1 PROCEDURE 2 NATIVE DISABLE:ALL
- 파리미터의 코드 타입 변경 및 확인하는 방법
--테스트를 위해서 코드타입을 원래상태로 다시 전환한다
ALTER SESSION SET plsql_code_type=INTERPRETED;
/*
NAME TYPE OPT_LEVEL PLSQL_CODE_TYPE PLSQL_WARNINGS
---------- ---------- ---------- --------------- --------------------
P1 PROCEDURE 2 INTERPRETED DISABLE:ALL
*/
-- 프로시져를 테스트용으로 변경
create or replace procedure p1
is
n number:=0;
begin
for i in 1..500000000
loop
n:=n+1;
end loop;
end;
--"plsql_code_type=INTERPRETED" 조건에서 프로시져 실행시간은 9.7초
exec p1
--"plsql_code_type=native" 조건에서 프로시져 상태 변경
--파라미터에서 변경하면 컴파일을 다시해야 하지만 프로시져 객체 정보를 직접 변경하면 컴파일하지 않아도 됨
alter procedure p1 compile plsql_code_type=native;
/*
NAME TYPE OPT_LEVEL PLSQL_CODE_TYPE PLSQL_WARNINGS
---------- ---------- ---------- --------------- --------------------
P1 PROCEDURE 2 NATIVE DISABLE:ALL
*/
--컴파일을 하지 않았지만 코드타입이 NATIVE 로 변경되어 있고, 실행시간도 단축된것을 확인 가능함
--"plsql_code_type=native" 조건에서 프로시져 실행시간은 7.5초
exec p1
--PLSQL_CODE_TYPE 상태를 INTERPRETED에서 NATIVE로 변경하니 9.7초에서 7.5초로 실행시간이 단축됨
'Database > PLSQL' 카테고리의 다른 글
099 - [Oracle PL/SQL] Compiler - Warnings (0) | 2024.05.12 |
---|---|
098 - [Oracle PL/SQL] Compiler - plsql_optimize_level (0) | 2024.05.12 |
096 - [Oracle PL/SQL] Compiler - Introduction (0) | 2024.05.09 |
095 - [Oracle PL/SQL] Triggers - 프로시져 호출 방법 및 주의 사항 (0) | 2024.05.08 |
094 - [Oracle PL/SQL] Triggers - system event trigger (0) | 2024.05.08 |