首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Oracle PL/SQL 應用程式效能調優 (第十二章) — 核心技術圖解摘要

     編輯:關於SqlServer

本文為《Oracle PL/SQL 應用程式效能調優》第十二章核心內容的結構化摘要,配合原書圖表說明,涵蓋 PL/SQL 執行架構、SQL 引擎互動、大量資料處理模式、快取機制、剖析工具與實戰優化模式,適合快速複習與查閱。

章節知識地圖

主題核心觀念關鍵技術/工具
PL/SQL 執行架構PL/SQL 引擎處理程序邏輯,SQL 陳述式移交 SQL 引擎,上下文切換有開銷上下文切換、BULK COLLECT/FORALL 減少切換
SQL 陳述式優化執行計畫分析、索引存取路徑、聯接方法 (NL/HASH/MERGE)、統計資訊EXPLAIN PLAN, DBMS_XPLAN, SQL Tuning Advisor
大量資料處理游標 FOR LOOP vs BULK COLLECT/FORALL、LIMIT 子句控制記憶體BULK COLLECT INTO, FORALL SAVE EXCEPTIONS
快取與記憶體共用池、Library Cache、Data Dictionary Cache、PGA 工作區V$SGASTAT, V$LIBRARYCACHE, PGA_AGGREGATE_TARGET
剖析與診斷SQL Trace (10046)、TKPROF、DBMS_PROFILER、DBMS_HPROF (階層式)事件 10046, TRCSESS, tkprof, plprof
鎖與併發行鎖 (TX)、表鎖 (TM)、死偵測、ITL 等待、應用層鎖 (DBMS_LOCK)V$LOCK, V$SESSION_WAIT, DBA_BLOCKERS
實戰優化模式將行級邏輯集合化、減少硬解析、綁定變數、避免隱性轉換BULK BIND, CURSOR_SHARING=FORCE, 程式碼重構

高頻優化模式速查卡

-- ❌ 慢:逐列處理,頻繁上下文切換
FOR rec IN (SELECT * FROM big_table) LOOP
    UPDATE other_table SET col = rec.val WHERE id = rec.id;
END LOOP;

-- ✅ 快:批次收集 + 批次更新,單次上下文切換
DECLARE
    TYPE id_arr IS TABLE OF NUMBER;
    TYPE val_arr IS TABLE OF VARCHAR2(100);
    l_ids id_arr; l_vals val_arr;
BEGIN
    SELECT id, val BULK COLLECT INTO l_ids, l_vals FROM big_table;
    FORALL i IN 1..l_ids.COUNT SAVE EXCEPTIONS
        UPDATE other_table SET col = l_vals(i) WHERE id = l_ids(i);
END;

-- ✅ 避免隱性轉換導致索引失效
WHERE date_col = TO_DATE(:bind_var, 'YYYY-MM-DD')  -- 明確轉換
WHERE num_col = TO_NUMBER(:bind_var)               -- 明確轉換

關鍵剖析工具指令

工具啟用方式輸出分析
SQL Trace (10046)`ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';`.trc 檔 → tkprof sys_ora_123.trc out.txt explain=user/pass sort=exeela,fchela
DBMS_PROFILER`DBMS_PROFILER.START_PROFILER('Run1');` ... `STOP_PROFILER;`查詢 `PLSQL_PROFILER_RUNS/DATA/UNITS` 表獲取逐行耗時
DBMS_HPROF (11g+)`DBMS_HPROF.START_PROFILING('DIR', 'run1.trc');` ... `STOP_PROFILING;``plprof` 工具生成 HTML 階層報表,含呼叫樹、耗時分佈
SQL Monitoring (11g+)自動監控長跑 SQL (>5秒),查詢 `V$SQL_MONITOR`Enterprise Manager / `DBMS_SQLTUNE.REPORT_SQL_MONITOR`

記憶體調優關鍵參數

  • SHARED_POOL_SIZE / SGA_TARGET:Library Cache、Dictionary Cache 容量
  • PGA_AGGREGATE_TARGET:排序、雜湊、位圖建立工作區
  • CURSOR_SHARING = FORCE | EXACT:強制/精確綁定變數化 (謹慎用 FORCE)
  • SESSION_CACHED_CURSORS:會話級游標快取數量

圖表索引 (對應原書插圖)

  1. PL/SQL 執行架構雙引擎互動圖
  2. BULK COLLECT/FORALL vs 迴圈效能對比柱狀圖
  3. 共用池記憶體結構圖 (Library Cache, Dictionary Cache, Result Cache)
  4. SQL Trace/TKPROF 處理流程圖
  5. 鎖等待鏈與死鎖檢測示意圖
  6. 優化前後執行計畫對比 (FULL SCAN → INDEX RANGE SCAN)

建議配合原書完整程式碼範例與圖表研讀,並至實際資料庫環境實驗各剖析工具,將理論內化為診斷直覺。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved