plsql_code_type 파라미터는 PL/SQL의 성능 향상을 위해 설정 할 수 있는 파라미터이다.
해당 파라미터를 변경하더라도 새롭게 생성되는 Stored PL/SQL 오브젝트만 적용되므로,
모든 PL/SQL Stored Object에 대한 정상 적용을 위해서는 아래의 절차가 필요하다.
※ 상세 내용은 PL/SQL Optimization and Tuning (oracle.com) 을 참고할 것.
주의 사항
- 작업 시, PL/SQL Stored Object의 수가 많을수록 recompile 단계에서 많은 시간이 소요된다.
※ 엔터프라이즈급 서버에서 5만개 가량의 오브젝트 recompile에 2시간 이상 소요.
- Multitenant 환경의 경우, dbmsupgnv.sql, utlrp.sql 적용작업은 각 PDB에서 별도 수행해야 한다.
[현상태 확인]
set lin 250 col plsql_code_type for a20 select type, plsql_code_type, count(*) from dba_plsql_object_settings group by type, plsql_code_type ; |
[설정 변경]
alter system set plsql_code_type=NATIVE scope=spfile ; |
[upgrade mode로 재기동]
shutdown immediate ; startup upgrade ; alter pluggable database all open upgrade ; |
[upgrade 수행]
변수 입력을 받을 때 FALSE로 입력 (DEFAULT는 TRUE 이며, Package가 포함되지 않는다.)
TRUE로 수행해도 상관 없다.
※ Package는 Package Body의 컴파일 Type이 중요할 뿐, INTERPRETED로 유지되더라도 속도 차이는 사실상 없다.
@?/rdbms/admin/dbmsupgnv.sql SQL> begin dbmsncdb.setup_for_native_compile(&1); end; / Enter value for 1: FALSE |
[확인 작업]
Library와 Type을 제외한 오브젝트들이 NATIVE로 변경된 것을 알 수 있다.
(Library와 Type의 경우 도큐에 기재된 Expected behavior)
alter session set container=CDB$ROOT ; set lin 250 col plsql_code_type for a20 select con_id, type, plsql_code_type, count(*) from cdb_plsql_object_settings where plsql_code_type='INTERPRETED' group by con_id, type, plsql_code_type order by con_id ; CON_ID TYPE PLSQL_CODE_TYPE COUNT(*) ---------- ------------ -------------------- ---------- 1 LIBRARY INTERPRETED 237 1 TYPE INTERPRETED 2571 3 LIBRARY INTERPRETED 237 3 TYPE INTERPRETED 2581 4 LIBRARY INTERPRETED 237 4 TYPE INTERPRETED 2581 |
[재기동]
alter session set container=CDB$ROOT ; shutdown immediate ; startup ; alter pluggable database all open ; |
※ Multitenant 환경이 아닌 경우에는 PDB OPEN 단계는 불필요하다.
[RECOMPILE]
alter system enable restricted session ; @?/rdbms/admin/utlrp.sql alter system disable restricted session ; |