自 Oracle 8.1 起引入的 Stored Outlines(儲存大綱),又稱 Plan Stability(計劃穩定性),為 SQL 效能調優帶來三大核心優勢:
cursor_sharing 參數使用時,避免因共享游標導致非最佳執行計劃。若無法修改原始程式碼,可透過以下流程實現 SQL 調優:
建立具備 create session, create table, create procedure, create any outline, alter session 權限的使用者,並執行以下腳本:
CREATE TABLE so_demo (
n1 NUMBER,
n2 NUMBER,
v1 VARCHAR2(10)
);
INSERT INTO so_demo VALUES (1,1,'One');
CREATE INDEX sd_i1 ON so_demo(n1);
CREATE INDEX sd_i2 ON so_demo(n2);
ANALYZE TABLE so_demo COMPUTE STATISTICS;
編寫 c_proc.sql:
CREATE OR REPLACE PROCEDURE get_value (
i_n1 IN NUMBER,
i_n2 IN NUMBER,
io_v1 OUT VARCHAR2
) AS
BEGIN
SELECT v1
INTO io_v1
FROM so_demo
WHERE n1 = i_n1
AND n2 = i_n2;
END;
/
使用 wrap 工具加密:
wrap iname=c_proc.sql
產生 c_proc.plb,執行該檔案建立程序,原始碼將不再出現在 user_source 視圖中,模擬無法修改原始碼的場景。
假設資料庫建立時已自動安裝 Outline 相關物件。後續步驟包括:
CREATE_STORED_OUTLINES 會話參數;USER_OUTLINES 確認大綱建立;DBMS_OUTLN_EDIT 套件編輯大綱 Hint;USE_STORED_OUTLINES = TRUE 使大綱生效。Plan Stability 為無法修改應用程式碼的環境提供強大的 SQL 調優手段。結合 cursor_sharing 使用時,更能平衡共享游標與執行效能。掌握 Outline 的建立、編輯與管理流程,是資深 DBA 的必備技能。