利用Oracle的共享區(SHARED_ POOL),相同的SQL語句可以共享編譯後的分析樹
遵循的原則:
約定所有語句的標准格式,包括PL/SQL
約定大小寫
使用相同的綁定變量
注:
兩條SQL語句必須是語法、文本完全相同,也即存取權限、路徑、大小寫、空格數、變量名等完全相同,才能視為可共享的SQL
保留大的已分配空間
SHARED_POOL_RESERVED_SIZE
SHARED_POOL_SIZE的10%為較大連續共享池內存請求而保留的空間,以避免由碎片引起的性能下降
防止實體被換出
使用系統包DBMS_SHARED_POOL可在共享內存中保留實體
DBMSPOOL.SQL和PRVTPOOL.PLB過程腳本創建DBMS_SHARED_POOL的包說明和包體
使用V$SQLAREA V$SQLTEXT查詢當前系統中共享區中的所有SQL語句。
何時使用DBMS_SHARED_POOL
在裝入大的PL/SQL實體(如STANDARD 和DIUTIL包)時, DBMS_SHARED_POOL 包中的過程是非常有用的。
對頻繁執行的觸發器,DBMS_SHARED_POOL也是非常有用。這時可以將編譯過的頻繁使用的觸發器保存在共享區中
如何使用DBMS_SHARED_POOL
確定需要調入內存的包或游標;
啟動數據庫;
調用DBMS_SHARED_POOL.KEEP
dbms_shared_pool.keep(object IN VARCHAR2,[type IN CHAR DEFAULT P])
object -- 實體名或游標地址
type -- 實體的類型。
P:Procedure、C:cursor 、R:Trigger、Q:sequence
索引有如下的特性:
由Oracle自動維護
可減少磁盤I/O
僅查詢被索引的列時才用到索引
對索引的搜索是對全表掃描的替換
索引、表獨立
有自己的存儲參數
通常比原來的表小
可存儲在與表分離的表空間中
基於規則的優化
基於成本的優化
設定:
init.ora:
OPTIMIZER_MOD : RULE | CHOOSE | FIRST_ROWS | ALL_ROWS
使用提示:
Select /*+ FIRST_ROWS */ name from emp where salary>2000;
對象統計:
Analyze table emp compute statistics;
Analyze talbe emp compute statistics for all indexed columns;
Analyze table emp estimate statistics sample size 20 percent;
Execute dbms_utility.analyze_schema(‘scott’,’estimate’,estimate_percent=>20);
設置啟動參數
開啟SQL_TRACE
運行程序
確定跟蹤文件
在跟蹤文件上運行tkprof,產生文本
根據結果優化SQL
資源計劃:
執行rdbms/admin/utlxplan.sql生成PLAN_TABLE
AUTOTRACE:
通過@../sqlplus/admin/plustrace.sql來設置
SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]