一點整理的statspack內容信息
2024-07-21 02:35:42
供稿:網友
Instance Efficiency Percentages
Data Buffer Hit Ratio#<#90#數據塊在數據緩沖區中的命中率,通常應該在90%以上,否則考慮加大 db_block_buffers(9i 以上可是db_cache_size)
Buffer Nowait Ratio#<#99#在緩沖區中獲取buffer 的未等待比率
Library Hit Ratio#<#98#主要代表著sql在共享區的命中率,通常在98%以上
In Memory Sort Ratio#<#0#假如過低說明有大量的排序在臨時表空間中進行,可嘗試增加sort_area_size
Redo Nowait Ratio#<#98#寫日志的不等待比率,太低可調整log_buffer(增加)和 _log_io_size(減小,默認為1/3*log_buffer/log_block_size,使得 _log_io_size 為合適的值,比如128k/log_block_size)
Soft Parse Ratio#<#90#近似當作sql在共享區的命中率,通常高代表使用了綁定變量,太低需要調整應用使用綁定變量,或者參考 cursor_sharing = force (9i 中增加了 similar )
Latch Hit Ratio#<#99#內部結構維護鎖命中率,高于99%,通常低是因為shared_pool_size過大和沒有使用綁定變量導致硬解析過多,可參考 _spin_count 參數設置
Percent Non-Parse CPU#<#95#查詢實際運行時間/(查詢實際運行時間+sql解析時間),太低表示解析消耗時間過長
Percent Parse CPU to Parse Elapsed#<#90#解析實際所用時間/(解析實際所用時間+解析中等待資源時間),越高越好
Execute to Parse Percent#<#10#該值越高表示一次解析后被重復執行的次數越多,假如過低可以考慮設置 session_cached_cursors > 0
Memory Usage Percent#<#75#共享池的使用率,應該穩定在75%--90%之間,太小浪費內存,太大則顯內存不足
Percent of SQLs with Execution>1#<#40#執行次數大于1的sql的比率(若太小可能是沒有使用綁定變量)
Percent of Memory for SQl with Execution>1#<#0#執行次數大于1的sql消耗內存/(所有sql消耗內存)
Instance Load PRofile
Redo Size/Sec#>#100000#每秒產生的日志大?。▎挝蛔止潱蓸酥緮祿烊蝿盏姆敝嘏c否
Redo Size/Tx#>#0#平均每個事務的日志生成量
Logical Reads/Sec(邏輯讀)#>#0#平均每秒產生的邏輯讀,單位是block
Logical Reads/Tx#>#0#平均每個事務產生的邏輯讀,單位是block
Block Changes/Sec#>#100#每秒block變化數量,數據庫事務帶來改變的塊數量
Block Changes/Tx#>#0#平均每個事務所導致的改變的塊數
Physical Reads/Sec#>#100#平均每秒數據庫從磁盤讀取的block數
Physical Reads/Tx#>#0#平均每個事務從磁盤讀取的block數
Physical Write/Sec#>#50#平均每秒寫磁盤的block數
Physical Write/Tx#>#0#平均每個事務寫磁盤的block數
User Calls/Sec#>#0#每秒用戶call次數
User Calls/Tx#>#0#每事務用戶call次數
Parses/Sec#>#100#每秒解析次數,近似反應了每秒語句的執行次數
Parses/Tx#>#0#每事務產生的解析次數
Hard Parses/Sec#>#10#每秒產生的硬解析次數
Hard Parses/Tx#>#0#每事務產生的硬解析次數
Sorts/Sec#>#20#每秒產生的排序次數
Sorts/Tx#>#5#每事務產生的排序次數
Transactions/Sec#>#0#每秒產生的事務數
Rows/Sort#>#0#每次排序所涉及到的行數
Percent of Block Changed/Read#>#0#發生變化的塊數/讀次數,變化的塊需要從回滾段來數據
Recursive Call Percent#>#0#遞歸操作占所有操作的比率
Rollback/Tx Percent#>#5#事務回滾率(回滾開銷很大)
Executes/Sec#>#0#每秒執行次數
Execute/Tx#>#0#每個事務執行次數
--45: Logons/Sec
--46: Logons/Tx
I/O Statistics(I/O統計數據)
Table Space I/O#>#0#表示各表空間在IO上的分布,若出現嚴重不均衡,則要重新考慮對象的存儲規劃和表空間中數據文件的磁盤規劃
Datafile I/O#>#0#表示各數據文件的IO分布,若不均衡則需要重新考慮對象的存儲規劃
Table I/O(表I/O)#>#0#對這些IO很大的表,要考慮放置在高速磁盤上,并且盡可能的分布在不同的磁盤上
TOP SQL
Top SQL with High Buffer Gets#>#0#這類sql進行了大量的block的讀,要檢查該sql是否用到了索引,或者說表上是否存在合理的索引,對于必須全表掃描的大表可以考慮recycle buffer ,對于頻繁進行全表掃描的小表可以考慮keep buffer,還有一種需要注重的情況就是假如通過索引獲取數據比例占表數據比例過大,比如20%(舉例數據),就能導致buffer gets過大
Top SQL with High Physical Reads#>#0#這類sql導致了大量的從磁盤獲取數據,可能因為數據緩沖區太小,也可能是過多的全表掃描,需要考察索引是否合理,是否用到索引
Top SQL with High Execution Count#>#0#這類sql是需要重點關注的,也許這些sql本身一次執行并沒有消耗大量的時間或者空間,但由于頻繁的執行對系統影響極大,所以只要有優化的可能到要對這些sql進行優化。
還有另外一些情況,就是某些程序中可能大量頻繁地使用dual表來獲取一些信息(比如時間的計算等),盡可能的使這類sql轉化為應用本地能解決的函數,或者還存在一些由于設計上的缺陷導致不必要的查詢,都要在設計的角度避免這些查詢
Top SQL with High Shared Memory#>#0#這類sql使用了大量的內存,不一定執行的頻繁,但是它可能把執行的頻繁的sql涉及的一些數據擠出緩沖區,這同樣將導致很多問題,所以也需要從盡可能的優化
Top SQL with High Version Count#>#20#表示多個用戶的sql在字面上是一樣的,或者sql雖然一樣但是session的一些參數發生了改變(比如sort_area_size發生了變化)
Wait Events(等待事件)
alter system set mts_dispatcher#>#0#當會話決定執行"ALTER SYSTEM SET MTS_DISPATCHERS = <string> "的時候等待DISPATCHERS的啟動
BFILE check if exists#>#0#檢查外部的bfile文件是否存在
BFILE check if open#>#0#檢查外部的bfile文件是否已經open
BFILE closure#>#0#等待關閉外部bfile文件
BFILE get length#>#0#獲得外部bfile文件的大小
BFILE get name object#>#0#得到外部bfile文件的名字
BFILE get path object#>#0#得到外部bfile文件的路徑
BFILE internal seek#>#0#
BFILE open#>#0#等待外部bfile被打開
BFILE read#>#0#等待外部bfile文件讀取完畢
buffer busy due to global cache#>#0#
buffer busy waits#>#0#block正被讀入緩沖區或者緩沖區正被其他session使用,出現此情況通??赡芡ㄟ^幾種方式調整:增大data buffer,增加freelist,減小pctused,增加回滾段數目,增大initrans,考慮使用LMT
buffer deadlock#>#0#由于系統緩慢所產生而非應用產生了死鎖
buffer latch#>#0#會話等待'buffer hash chain latch'
buffer read retry#>#0#OPS下讀buffer的過程中內容發生了變化于是重新讀取
Cache simulator heap#>#0#
checkpoint completed#>#0#等待檢查點的完成,通常出現這個問題的原因是IO問題嚴重,可調整跟檢查點相關參數log_checkpoint_interval,log_checkpoint_timeout,db_block_max_dirty_target,fast_start_io_target 等,可間接的增大日志文件大小和增加日志文件組數
Contacting SCN server or SCN lock master#>#0#
control file parallel write#>#0#等待寫所有控制文件的完成,可將控制文件分散在不同的磁盤上
control file sequential read#>#0#讀控制文件,在備份控制文件、OPS等情況下產生
control file single write#>#0#OPS下同一時刻只答應一個session將共享信息寫入磁盤
conversion file read#>#0#
db file parallel read#>#0#做恢復的并行從數據文件獲取數據
db file parallel write#>#0#當多個IO可以同時發生時(多磁盤),DBWR可并行寫入,DBWR等待最后一個IO的完成
db file scattered read#>#0#一次獲取的block被分散在buffer的不連續空間中,通常表示全表掃描過多,可檢查應用程序是否合理的使用了索引,數據庫是否合理的創建了索引
db file sequential read#>#0#通常暗示著通過索引獲取數據量比較大(比如通過索引進行范圍掃描獲取表數據百分比過大),多表連接的時候連接順序不當,hash join時hash_area_size無法容納hash table
db file single write#>#0#更新數據文件頭出現等待
debugger command#>#0#
DFS db file lock#>#0#OPS下每個實例在數據文件上有一個共享的全局鎖,當要offline數據文件的時候等候其他實例同步文件
DFS lock handle#>#0#會話等待一個全局鎖請求
direct path read#>#0#通常發生在臨時表空間排序、并行查詢中
direct path read (lob) #>#0#
direct path write#>#0#direct方式導入數據(sqlldr,CTAS)、PDML、臨時表空間排序
direct path write (lob)#>#0#
dispatcher listen timer#>#0#
dispatcher shutdown#>#0#
dispatcher timer#>#0#
DLM generic wait event#>#0#
dupl. cluster key#>#0#
enqueue#>#0#對共享資源的獲取要求一種排隊(FIFO)的機制以保護共享資源,ST enqueue表示空間分配或者釋放導致的問題可采用LMT表空間來避免,TX enqueue主要產生于唯一索引重復、bitmap index 的頻繁更新、initrans太小或者pctfree過小
file identify#>#0#
file open#>#0#