ORACLE性能診斷―學習statspack筆記(二)[概述]
2024-08-29 13:30:51
供稿:網友
注冊會員,創建你的web開發資料庫,
oracle性能診斷―學習statspack筆記(二)[概述]
作者:劉穎博
時間: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》