Native Execution을 위한 PL/SQL 단위 컴파일

오라클 Native Execution을 활용한 PL/SQL 성능 최적화

Native Execution을 활용한 PL/SQL 성능 최적화

PL/SQL은 오라클 데이터베이스에서 강력한 프로그래밍 기능을 제공하지만, 기본적으로 인터프리터 방식으로 실행되어 성능상의 제약이 있을 수 있습니다. Native Execution은 PL/SQL 코드를 데이터베이스 서버의 운영체제에 최적화된 네이티브 코드로 컴파일하여 실행함으로써 성능을 획기적으로 향상시키는 기술입니다.

Native Execution의 작동 원리

Native Execution은 PL/SQL 코드를 중간 코드로 변환한 후, 이 중간 코드를 다시 해당 플랫폼의 네이티브 코드로 컴파일합니다. 이렇게 생성된 네이티브 코드는 SYSTEM 테이블스페이스에 저장되며, PL/SQL 엔진은 이 코드를 직접 실행합니다. 따라서 인터프리터 과정을 거치지 않아 실행 속도가 빨라집니다.

Native Execution 활성화 방법

  1. COMPATIBLE 초기화 파라미터 확인:

    Native Execution을 사용하려면 COMPATIBLE 초기화 파라미터가 10.2.0 이상으로 설정되어 있어야 합니다.

    SHOW PARAMETER compatible; 
  2. PLSQL_CODE_TYPE 초기화 파라미터 설정:

    PLSQL_CODE_TYPE 초기화 파라미터를 NATIVE로 설정합니다. 이 파라미터는 데이터베이스 인스턴스 레벨 또는 세션 레벨에서 설정할 수 있습니다.

    -- 인스턴스 레벨 설정 ALTER SYSTEM SET PLSQL_CODE_TYPE=NATIVE SCOPE=SPFILE; -- 세션 레벨 설정 ALTER SESSION SET PLSQL_CODE_TYPE=NATIVE; 

    인스턴스 레벨에서 설정하면 데이터베이스 재시작 후 적용되며, 세션 레벨에서 설정하면 해당 세션에만 적용됩니다.

  3. PL/SQL 단위 컴파일:

    Native Execution을 적용할 PL/SQL 단위(프로시저, 함수, 패키지 등)를 컴파일합니다. 컴파일 시 PLSQL_OPTIMIZE_LEVEL 파라미터를 조정하여 최적화 수준을 설정할 수 있습니다.

    ALTER PROCEDURE my_procedure COMPILE PLSQL_CODE_TYPE=NATIVE; ALTER PACKAGE my_package COMPILE PLSQL_CODE_TYPE=NATIVE; 

Native Execution 성능 측정 방법

Native Execution을 적용한 PL/SQL 단위의 성능을 측정하기 위해 DBMS_PROFILER 패키지나 SQL Developer의 프로파일러 기능을 사용할 수 있습니다. 이 도구를 통해 PL/SQL 코드 실행 시간을 측정하고, Native Execution 적용 전후의 성능 차이를 비교할 수 있습니다.

예시: DBMS_PROFILER 패키지 사용

-- 프로파일러 시작 EXEC DBMS_PROFILER.START_PROFILER(profile_table => 'plsql_profiler_data'); -- PL/SQL 코드 실행 BEGIN my_procedure; END; / -- 프로파일러 종료 EXEC DBMS_PROFILER.STOP_PROFILER; -- 프로파일링 결과 쿼리 SELECT unit_name, line_number, total_time FROM plsql_profiler_data ORDER BY total_time DESC; 

Native Execution 사용 시 고려 사항

  1. 디버깅의 어려움:

    Native Execution으로 컴파일된 코드는 디버깅이 더 어려울 수 있습니다. 따라서 개발 단계에서는 인터프리터 모드(PLSQL_CODE_TYPE=INTERPRETED)로 작업하고, 배포 전에 Native Execution으로 컴파일하는 것이 좋습니다.

  2. 플랫폼 종속성:

    Native Execution으로 컴파일된 코드는 특정 운영체제와 하드웨어에 종속적입니다. 따라서 데이터베이스 서버의 플랫폼이 변경되면 코드를 다시 컴파일해야 합니다.

  3. 저장 공간:

    Native Execution은 SYSTEM 테이블스페이스에 네이티브 코드를 저장하므로, 해당 테이블스페이스의 공간이 충분히 확보되어 있는지 확인해야 합니다.

  4. PL/SQL 최적화 수준:

    Native Execution과 함께 PLSQL_OPTIMIZE_LEVEL 파라미터를 사용하여 컴파일 시 최적화 수준을 조정할 수 있습니다. 높은 최적화 수준은 실행 속도를 향상시킬 수 있지만, 컴파일 시간이 길어질 수 있습니다.

Native Execution 적용 예시

다음은 간단한 PL/SQL 프로시저에 Native Execution을 적용하는 예시입니다.

-- 프로시저 생성 CREATE OR REPLACE PROCEDURE my_procedure AS v_num NUMBER := 0; BEGIN FOR i IN 1..1000000 LOOP v_num := v_num + i; END LOOP; DBMS_OUTPUT.PUT_LINE('Result: ' || v_num); END; / -- Native Execution으로 컴파일 ALTER PROCEDURE my_procedure COMPILE PLSQL_CODE_TYPE=NATIVE; -- 프로시저 실행 EXEC my_procedure; 

Native Execution을 사용한 실질적인 성능 향상 사례

Native Execution은 대량의 데이터 처리나 복잡한 연산을 수행하는 PL/SQL 코드에서 특히 효과적입니다. 예를 들어, 대규모 배치 작업이나 데이터 분석 작업 등에서 Native Execution을 적용하면 전체 실행 시간을 단축할 수 있습니다.

결론

Native Execution은 오라클 데이터베이스에서 PL/SQL 코드의 성능을 최적화하는 강력한 방법입니다. 하지만 디버깅의 어려움, 플랫폼 종속성 등의 고려 사항이 있으므로, 신중하게 적용해야 합니다. 올바른 방법으로 Native Execution을 활용하면 PL/SQL 기반 애플리케이션의 성능을 획기적으로 개선할 수 있습니다.

위로 스크롤