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

深度解析 Oracle 8i/9i 計劃穩定性與 Stored Outlines 技術

     編輯:Oracle 資料庫相關知識

前言

自 Oracle 8.1 起引入的 Stored Outlines(儲存大綱),又稱 Plan Stability(計劃穩定性),為 SQL 效能調優帶來三大核心優勢:

  1. 優化高耗資源 SQL 的執行路徑;
  2. 減少優化階段耗時與資源爭用;
  3. 配合 cursor_sharing 參數使用時,避免因共享游標導致非最佳執行計劃。

核心概念:如何善用儲存大綱

若無法修改原始程式碼,可透過以下流程實現 SQL 調優:

  1. 追蹤目標 SQL 語句,擷取當前執行計劃;
  2. 分析計劃缺失,設計 Hint 提升效能;
  3. 建立 Stored Outline,強制後續執行採用優化後的計劃。

實戰演練:從建立測試環境到套用 Outline

1. 準備工作

建立具備 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;

2. 建立並加密預存程序

編寫 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 視圖中,模擬無法修改原始碼的場景。

3. 建立 Stored Outline 流程

假設資料庫建立時已自動安裝 Outline 相關物件。後續步驟包括:

  • 啟用 CREATE_STORED_OUTLINES 會話參數;
  • 執行目標 SQL 或程序,自動捕獲執行計劃;
  • 檢視 USER_OUTLINES 確認大綱建立;
  • 如需修改,可使用 DBMS_OUTLN_EDIT 套件編輯大綱 Hint;
  • 設定 USE_STORED_OUTLINES = TRUE 使大綱生效。

結語

Plan Stability 為無法修改應用程式碼的環境提供強大的 SQL 調優手段。結合 cursor_sharing 使用時,更能平衡共享游標與執行效能。掌握 Outline 的建立、編輯與管理流程,是資深 DBA 的必備技能。

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 下一頁
  • 尾頁
  • 共3頁
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved