ORACLE性能診斷―學習statspack筆記(二)[概述]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
作者:劉穎博
時間:2004-3-3
mail:[email protected],請指正
轉載請註明出處及作者
ORACLE性能診斷涉及對象
A. 服務器、網絡以及磁盤(外部的環境)
B. 實例(SGA,後臺進程)
C. 對象(表,索引,段……)
D. SQL
E. 設計(指的是應用的設計,這部分一般說來是很難改變了)
ORACLE性能診斷要遵循上面的順序,先察看服務器是否存在問題,主要從CPU,RAM,DISK配置是否存在問題,檢查操作系統的核心參數的設置等等;如果是跨地域的進行共享的多個ORACLE,網絡通信性能也是非常的關鍵的,ORACLE利用的是TNS(Transparent Network Substrate 透明網絡層)提供數據庫之間的分佈傳輸;另外影響ORACLE相應時間的最大的單獨組成部分是磁盤I/O,能夠減少磁盤I/O的任何事情都會對ORACLE的性能產生正面的影響,比如改變ORACLE初始化參數,調整相應的SQL等;對於ORACLE的實例調整應該注意的問題是,過載的ORACLE的SGA會導致嚴重的性能問題,對於ORACLE實例的調整主要包括:初始化參數、數據緩衝存儲(DEFAULT、KEEP、RECYCLE)和SGA中共享池和庫緩存等;還有就是ORACLE對象的調整,包括存儲參數等等;最後是SQL語句的調整。
STATSPACK概述
STATSPACK來源在ORACLE最早版本就存在的UTLBSTAT和UTLESTAT工具。開始的BSTAT-ESTAT工具就可以直接從ORACLE的內存結構中獲取信息。
STATSPACK通過獲取數據庫當前狀態的快照來進行工作。大部分的情況,我們會規劃一個以小時爲單位來收集數據的JOB,並在需要的時候請求附加快照。
當我們獲取快照時,STATSPACK會從SGA內部的RAM內存結構中採樣,並記錄到相應的STATSPACK表中,注意的是,大多數情況下,SGA中的V$視圖與相應的的STATSPACK表之間存在直接的對應關係,比如:
V$SYSSTAT --------->STATS$SYSSTAT
SQL> DESC V$SYSSTAT
Name Null? Type
----------------------------------------- -------- ----------------------------
STATISTIC# NUMBER
NAME VARCHAR2(64)
CLASS NUMBER
VALUE NUMBER
SQL> DESC STATS$SYSSTAT
Name Null? Type
----------------------------------------- -------- ----------------------------
SNAP_ID NOT NULL NUMBER(6)
DBID NOT NULL NUMBER
INSTANCE_NUMBER NOT NULL NUMBER
STATISTIC# NOT NULL NUMBER
NAME NOT NULL VARCHAR2(64)
VALUE NUMBER
在理解STATSPACK工具的時候,很關鍵的是要明白通過STATSPACK快照收集的信息是累計值,從V$視圖中收集到起始時間的數據庫信息,然後進行持續累加,知道實例中止,我想,這也許就應該是STATSPACK不能產生兩張跨越SHUTDOWN的快照的報告的原因吧。
對應STATSPACK存在一系列的STATSPACK表,不同的ORACLE版本會有一定的差異。這些表大體上分爲控制表、參數表、事件表、事務處理表、並行服務器表、概要表、系統表等等
下面是我列出的ORACLE9I的STATSPACKE表:
SQL> select table_name from dba_tables where table_name like 'STATS$%';
TABLE_NAME
------------------------------
STATS$DATABASE_INSTANCE
STATS$LEVEL_DESCRIPTION
STATS$SNAPSHOT
STATS$DB_CACHE_ADVICE
STATS$FILESTATXS
STATS$TEMPSTATXS
STATS$LATCH
STATS$LATCH_CHILDREN
STATS$LATCH_PARENT
STATS$LATCH_MISSES_SUMMARY
STATS$LIBRARYCACHE
TABLE_NAME
------------------------------
STATS$BUFFER_POOL_STATISTICS
STATS$ROLLSTAT
STATS$ROWCACHE_SUMMARY
STATS$SGA
STATS$SGASTAT
STATS$SYSSTAT
STATS$SESSTAT
STATS$SYSTEM_EVENT
STATS$SESSION_EVENT
STATS$BG_EVENT_SUMMARY
STATS$WAITSTAT
TABLE_NAME
------------------------------
STATS$ENQUEUE_STAT
STATS$SQL_SUMMARY
STATS$SQLTEXT
STATS$SQL_STATISTICS
STATS$RESOURCE_LIMIT
STATS$DLM_MISC
STATS$UNDOSTAT
STATS$SQL_PLAN_USAGE
STATS$SQL_PLAN
STATS$SEG_STAT
STATS$SEG_STAT_OBJ
TABLE_NAME
------------------------------
STATS$PGASTAT
STATS$IDLE_EVENT
STATS$PARAMETER
STATS$INSTANCE_RECOVERY
STATS$STATSPACK_PARAMETER
STATS$SHARED_POOL_ADVICE
STATS$SQL_WORKAREA_HISTOGRAM
STATS$PGA_TARGET_ADVICE
41 rows selected.
其中STATSPACK表的主要錨定點是STATS$DATABASE_INSTANCE,具體的表的介紹我打算放到後面的文章進行討論。
可以說,以前我們的ORACLE性能調整主要是一種REACTIVE TUNNING(反應式調整),通過STATSPACK工具,我們可以進行長期趨勢分析、性能問題事後分析、資源規劃以及預測建模等,我們完全可以採用一種PROACTIVE TUNNING(前瞻式調整)。並且從ORACLE9I開始,ORACLE可以動態的改變ORACLE實例的內存配置,ORACLE也正朝着動態數據庫配置邁進。
(待續)
……………………………………………………………………………………
參考
Donald K.Burleson《ORACLE HIGH-PERFORMANCE TUNING WITH STATSPACK》