首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle PL/SQL 原生編譯 (Native Compilation) 效能實測:開啟方式與實際提升分析

     編輯:Oracle 資料庫相關知識

Oracle PL/SQL 預設採用解釋執行 (INTERPRETED),11g+ 支援原生編譯 (NATIVE) 將 PL/SQL 編譯為 C 程式碼再編譯為共享庫,理論上可提升 CPU 密集型運算效能。本文記錄實測流程:建立測試表/程序、對比解釋 vs 原生模式執行時間、Session/系統級開啟方式、相關參數說明。

一、測試環境與基準程序

-- 測試表
CREATE TABLE t1 (rid NUMBER);
CREATE TABLE t_n (rid NUMBER);

-- 測試程序:插入 100 萬筆資料
CREATE OR REPLACE PROCEDURE pro_xcl(p1 VARCHAR2) IS
BEGIN
  DBMS_OUTPUT.PUT_LINE(p1);
  INSERT INTO t1 SELECT ROWNUM FROM DUAL CONNECT BY ROWNUM < 1000000;
  COMMIT;
EXCEPTION WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE(SQLCODE || ' : ' || SUBSTR(SQLERRM, 200));
END;

二、實測對比結果

編譯模式切換指令執行時間提升幅度
INTERPRETED (預設)—4.68 秒基準
NATIVEALTER PROCEDURE pro_xcl COMPILE PLSQL_CODE_TYPE=NATIVE;4.09 秒~12% (0.6 秒)

結論:此測試場景 (大量 INSERT) 提升有限,因瓶頸在 I/O 與 Redo 產生,而非 PL/SQL 引擎解析。原生編譯主要加速純計算邏輯 (迴圈、數學運算、字串處理)。

三、開啟原生編譯的三種層級

-- 1. 單一物件 (立即生效)
ALTER PROCEDURE pro_xcl COMPILE PLSQL_CODE_TYPE=NATIVE;
ALTER FUNCTION func_xcl COMPILE PLSQL_CODE_TYPE=NATIVE;
ALTER PACKAGE pkg_xcl COMPILE PLSQL_CODE_TYPE=NATIVE;
ALTER PACKAGE BODY pkg_xcl COMPILE PLSQL_CODE_TYPE=NATIVE;
ALTER TRIGGER trg_xcl COMPILE PLSQL_CODE_TYPE=NATIVE;
ALTER TYPE type_xcl COMPILE PLSQL_CODE_TYPE=NATIVE;

-- 2. Session 級 (當前連線新建物件預設為 NATIVE)
ALTER SESSION SET PLSQL_CODE_TYPE=NATIVE;

-- 3. 系統級 (全庫新建物件預設為 NATIVE,需重啟或重新編譯既有物件)
ALTER SYSTEM SET PLSQL_CODE_TYPE=NATIVE SCOPE=SPFILE; -- 需重啟
-- 或
ALTER SYSTEM SET PLSQL_CODE_TYPE=NATIVE SCOPE=BOTH;   -- 立即生效 (僅影響後續編譯)

四、驗證當前編譯模式

SELECT plsql_code_type FROM all_plsql_object_settings WHERE name = 'PRO_XCL';
-- 結果: INTERPRETED 或 NATIVE

五、相關核心參數

SHOW PARAMETER plsql
NAME                     TYPE        VALUE
plsql_ccflags            string
plsql_code_type          string      INTERPRETED  -- 關鍵參數
plsql_debug              boolean     FALSE
plsql_optimize_level     integer     2            -- 優化等級 0~3
plsql_v2_compatibility   boolean     FALSE
plsql_warnings           string      DISABLE:ALL
  • PLSQL_OPTIMIZE_LEVEL=2 (預設) 已包含中度優化,原生編譯可視為極致優化
  • PLSQL_DEBUG=TRUE 會強制回退至 INTERPRETED,不相容

六、適用場景與避坑指南

注意:原生編譯產生的共享庫儲於 $ORACLE_HOME/plsql_native_library_dir (11g) 或 $ORACLE_BASE/diag/.../hm,升級/遷移資料庫時需重新編譯。

原生編譯非銀彈,但在 CPU 密集型 PL/SQL 場景下是免費的效能加速器。建議對核心計算套件啟用,配合 PLSQL_OPTIMIZE_LEVEL=3 獲得最大收益。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
適用場景不適用/風險場景
大量數學運算、複雜演算法、字串解析以 SQL/DML 為主的業務邏輯 (瓶頸在引擎外)
批次計算程序、報表產生器頻繁修改的程式碼 (原生編譯需 C 編譯器、時間較長)
CPU 密集型 PL/SQL 邏輯Windows 平台需安裝 Visual Studio / C 編譯器