Oracle 透過 Shared Pool 快取已剖析的 SQL 游標。只有 文字完全相同(大小寫、空白、綁定變數名稱、權限、路徑)的 SQL 才能共享執行計畫。
CURSOR_SHARING = FORCE/SIMILAR(需評估副作用)。SHARED_POOL_RESERVED_SIZE:保留 10% SHARED_POOL_SIZE 供大型連續記憶體請求,減少碎片。DBMS_SHARED_POOL.KEEP:將熱門 PL/SQL 套件、觸發器、游標鎖定在共用池,防止被淘汰。
EXEC DBMS_SHARED_POOL.KEEP('SCHEMA.PACKAGE_NAME', 'P'); -- P=Procedure, C=Cursor, R=Trigger, Q=Sequence
PCTFREE、TABLESPACE 等儲存參數。| 模式 | 適用情境 |
|---|---|
| RULE | 舊版相容,依固定規則 |
| CHOOSE | 有統計資訊用 CBO,否則 RBO |
| FIRST_ROWS | 優化首筆回應速度(OLTP) |
| ALL_ROWS | 優化整體吞吐量(資料倉儲) |
收集統計資訊:
ANALYZE TABLE emp COMPUTE STATISTICS;
ANALYZE TABLE emp ESTIMATE STATISTICS SAMPLE 20 PERCENT;
EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT', 'ESTIMATE', 20);
SQL_TRACE = TRUE 或 ALTER SESSION SET SQL_TRACE = TRUE。USER_DUMP_DEST 找到追蹤檔(.trc)。tkprof trace.trc output.txt EXPLAIN=user/pass SYS=NO 產生可讀報表。CPU、ELAPSED、ROWS、MISSES 等指標優化 SQL。PLAN_TABLE:@?/rdbms/admin/utlxplan.sql。EXPLAIN PLAN FOR ... 或 SET AUTOTRACE ON EXPLAIN STATISTICS 即時查看計畫與統計。