SQL 調優是資料庫效能提升投資報酬率最高的環節。同樣功能,不同寫法效能可能相差數量級。核心工具:EXPLAIN PLAN、V$SQLAREA、V$SYSTEM_EVENT。
-- 找出邏輯讀最多的 SQL
SELECT buffer_gets, executions, sql_text FROM V$SQLAREA ORDER BY buffer_gets DESC;
-- 檢查 Latch 爭用
SELECT * FROM V$SYSTEM_EVENT WHERE event = 'latch free';
若 latch free 明顯,可嘗試降低 SPIN_COUNT 緩解 CPU 壓力。
NOT IN 子查詢常導致全掃;改用 NOT EXISTS 可利用索引。SELECT dname FROM dept WHERE NOT EXISTS (SELECT 1 FROM emp WHERE emp.deptno = dept.deptno); 優於 WHERE deptno NOT IN (SELECT deptno FROM emp)。
EXISTS / NOT EXISTS。SHARED_POOL_RESERVED_SIZE 保留連續記憶體給大型 PL/SQL 套件。DBMS_SHARED_POOL.KEEP('package_name') 防止被 LRU 淘汰,降低解析開銷。資料庫調優是系統工程:規劃 → 設計 → 監控 → 調優 循環迭代。DBA 需綜合運用上述規則,針對運行期出現的具體瓶頸(CPU、I/O、鎖、解析)精準施策,而非盲目調參數。