oracle 學習筆記---效能優化(6)

zhengbao_jun發表於2010-08-04
ORACLE學習筆記--效能優化(六)

21.什麼是STATSPACK,我怎麼使用它?

Statspack是Oracle 8i以上提供的一個非常好的效能監控與診斷工具,基本上全部包含了BSTAT/ESTAT的功能,更多的資訊,可以參考附帶文件$ORACLE_HOME/rdbms/admin/spdoc.txt。

安裝Statspack:

cd $ORACLE_HOME/rdbms/admin

sqlplus "/ as sysdba" @spdrop.sql -- 解除安裝,第一次可以不需要

sqlplus "/ as sysdba" @spcreate.sql -- 需要根據提示輸入表空間名

使用Statspack:

sqlplus perfstat/perfstat

exec statspack.snap; -- 進行資訊收集統計,每次執行都將產生一個快照號

-- 獲得快照牛?匭胍?辛礁鮃隕系目煺眨?拍萇?殺ū?/p>

select SNAP_ID, SNAP_TIME from STATS$SNAPSHOT;

@spreport.sql -- 輸入需要檢視的開始快照號與結束快照號

其他相關指令碼s:

spauto.sql - 利用dbms_job提交一個作業,自動的進行STATPACK的資訊收集統計

sppurge.sql - 清除一段範圍內的統計資訊,需要提供開始快照與結束快照號

sptrunc.sql - 清除(truncate)所有統計資訊

22. SQL語句的優化方法

<1> /*+ALL_ROWS*/

表明對語句塊選擇基於開銷的優化方法,並獲得最佳吞吐量,使資源消耗最小化.

例如:

SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

<2>. /*+FIRST_ROWS*/

表明對語句塊選擇基於開銷的優化方法,並獲得最佳響應時間,使資源消耗最小化.

例如:

SELECT /*+FIRST_ROWS*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE    EMP_NO='CCBZZP';

<3>. /*+CHOOSE*/

表明如果資料字典中有訪問表的統計資訊,將基於開銷的優化方法,並獲得最佳的吞吐量;

表明如果資料字典中沒有夢時淼耐臣菩畔?將基於規則開銷的優化方法;

例如:

SELECT /*+CHOOSE*/ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';

<4>. /*+RULE*/

表明對語句塊選擇基於規則的優化方法.

例如:

SELECT /*+ RULE */ EMP_NO,EMP_NAM,DAT_IN FROM BSEMPMS WHERE EMP_NO='CCBZZP';  

<5>. /*+FULL(TABLE)*/

表明對錶選擇全域性掃描的方法.

例如:

SELECT /*+FULL(A)*/ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='CCBZZP';

<6>. /*+ROWID(TABLE)*/

提示明確表明對指定表根據ROWID進行訪問.

例如:

SELECT /*+ROWID(BSEMPMS)*/ * FROM BSEMPMS WHERE ROWID>='AAAAAAAAAAAAAA'

   AND EMP_NO='CCBZZP';

<7>. /*+CLUSTER(TABLE)*/

提示明確表明對指定表選擇簇掃描的訪問方法,它只對簇物件有效.

例如:

SELECT  /*+CLUSTER */ BSEMPMS.EMP_NO,DPT_NO FROM BSEMPMS,BSDPTMS

WHERE DPT_NO='TEC304' AND BSEMPMS.DPT_NO=BSDPTMS.DPT_NO;

<8>. /*+INDEX(TABLE INDEX_NAME)*/

表明對錶選擇索引的掃描方法.

例如:

SELECT /*+INDEX(BSEMPMS SEX_INDEX) USE SEX_INDEX BECAUSE THERE ARE FEWMALE    BSEMPMS */  FROM BSEMPMS WHERE SEX='M';

<9>. /*+INDEX_ASC(TABLE INDEX_NAME)*/

表明對錶選擇索引升序的掃描方法.

例如:

SELECT /*+INDEX_ASC(BSEMPMS PK_BSEMPMS) */  FROM BSEMPMS WHERE DPT_NO='CCBZZP';

<10>. /*+INDEX_COMBINE*/

為指定表選擇點陣圖訪問路經,如果INDEX_COMBINE中沒有提供作為引數的索引,將選擇出點陣圖索引的

布林組合方式.

例如:

SELECT /*+INDEX_COMBINE(BSEMPMS SAL_BMI HIREDATE_BMI)*/ * FROM BSEMPMS

WHERE SAL<5000000 AND HIREDATE

<11>. /*+INDEX_JOIN(TABLE INDEX_NAME)*/

提示明確命令優化器使用索引作為訪問路徑.

例如:

SELECT /*+INDEX_JOIN(BSEMPMS SAL_HMI HIREDATE_BMI)*/ SAL,HIREDATE

FROM BSEMPMS WHERE SAL<60000;

<12>. /*+INDEX_DESC(TABLE INDEX_NAME)*/

表明對錶選擇索引降序的掃描方法.

例如:

SELECT /*+INDEX_DESC(BSEMPMS PK_BSEMPMS) */  FROM BSEMPMS WHERE    DPT_NO='CCBZZP';

<13>. /*+INDEX_FFS(TABLE INDEX_NAME)*/

對指定的表執行快速全索引掃描,而不是全表掃描的辦法.

例如:

SELECT /*+INDEX_FFS(BSEMPMS IN_EMPNAM)*/ * FROM BSEMPMS WHERE DPT_NO='TE廣告';

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/235507/viewspace-670215/,如需轉載,請註明出處,否則將追究法律責任。

相關文章