1、oracle等待接口
OWI (ORACLE WAIT INTERFACE),從Oracle 7開始支持OWI,目的是讓開發人員和維護人員可以了
解在Oracle的每一個模塊和OS中消耗了多少時間,經過Oracle提供的視圖獲取這些信息,是AWR,STATSPACK
等時間模型性能報告的基礎,方便找到性能問題的根源,診斷系統故障。
一、核心視圖
v$system_event
記錄自實例啓動以來各個等待事件的歸納信息。經常使用於獲取系統等待信息的歷史影象。而經過兩個
snapshot獲取等待項增量,肯定這段時間內系統的等待項。
v$session_event
記錄session自啓動以來全部的等待事件。
v$session_wait
會話等待事件明細信息,每三秒鐘刷新一次等待時間
V$SESSION_WAIT_HISTORY
是對V$SESSION_WAIT的簡單加強,記錄活動SESSION的最近10次等待。
主要字段解釋:
event:事件名稱
total_waits: 自從實例啓動以來的等待次數
total_timeouts: 事件被喚醒的總次數
time_waited: 按照cs統計的總的等待時間
average_wait: 平均每次等待的等待時間,單位是cs
SID: SESSION ID
seq#: 等待次數統計
p[1-3]: 等待的詳細參數
p[1-3]raw: 參數的raw模式
p[1-3]text: 參數的名字
查詢當前會話的SID
select * from v$mystat where rownum<2; #須要訪問權限
select userenv('sid') from dual; #沒有權限要求
v$system_wait_class
系統等待事件分類統計信息
v$session_wait_class;
會話等待事件分類統計信息
v$sys_time_model
系統時間統計模型
V$SESS_TIME_MODEL
會話對應的時間統計模型
v$osstat
操做系通通計信息
v$waitstat
保存自實例啓動全部的等待事件統計信息。
v$filestat
記錄文件的IO信息
v$latch
記錄閂鎖信息
二、等待事件分類
IDLE #空閒
APPLICATION #行鎖、表鎖、DDL鎖等
Configuration #因爲配置致使的
Administrative #特權用戶的某些維護操做致使的
Concurrency #因爲併發量大引發的
commit #log file sync
Network
User I/O waits #前臺進程,SMON,MMON
System I/O Waits #除了SMON,MMON外的後臺進程
Scheduler #資源管理引發的
CLUSTER #RAC
Other
三、OWI診斷方法及過程
經過查詢等待接口核心視圖或者生產statpack/AWR報告,找到較大等待時間和次數的等待事件,針對具體
的等待時間,細緻跟蹤分析。
診斷過程:OS性能狀態及開銷->alert log->查詢OWI視圖或生成報告->命中率->參數調優->TOP SQL->查找
具體SQL進行SQL調優->事件跟蹤...sql
四、OWI相關的SQL語句
4.1. 監控事例的等待
select event,sum(decode(wait_Time,0,0,1)) "Last wait",sum(decode(wait_Time,0,1,0)) "Current waiting",
count(*) "Tot" from v$session_Wait group by event order by 4;
4.2. 回滾段的爭用狀況
select name, waits, gets, waits/gets "Ratio"
from v$rollstat a, v$rollname b where a.usn = b.usn;
4.3. 監控表空間的 I/O 讀寫狀況
select df.tablespace_name name,df.file_name "file",f.phyrds,f.phyblkrd,f.phywrts, f.phyblkwrt
from v$filestat f, dba_data_files df where f.file# = df.file_id
order by df.tablespace_name;
4.4. 監控數據文件的 I/O 狀況
select substr(a.file#,1,2) "#", substr(a.name,1,30) "Name", a.status, a.bytes, b.phyrds,
b.phywrts,b.phyblkrd,b.phyblkwrt,b.readtim,b.writetim
from v$datafile a, v$filestat b where a.file# = b.file#;
4.5. 查找找全部的索引
select b.table_name, b.index_name, uniqueness, column_name
from user_ind_columns a, user_indexes b
where a.index_name = b.index_name and a.table_name = b.table_name
order by b.table_type, b.table_name, b.index_name, column_position;
4.6. 監控 SGA 中字典緩衝區的命中率
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache where gets+getmisses <>0 group by parameter, gets, getmisses;
4.7. 監控 SGA 中共享緩存區的命中率,應該小於1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(pinhits-reloads)/sum(pins) "hit radio", sum(reloads)/sum(pins) *100 "reload percent"
from v$librarycache;
4.8. 顯示全部數據庫對象的類別和大小
select type, count(name) object_nums, sum(source_size) source_size,
sum(parsed_size) parsed_size, sum(code_size) code_size, sum(error_size) error_size,
sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required
from dba_object_size group by type order by 1;
4.9. 監控內存和硬盤的排序比率,
SELECT name, value FROM v$sysstat
WHERE name IN ('sorts (memory)', 'sorts (disk)');
4.10. 監控當前數據庫誰在運行什麼SQL語句
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;
4.11. 碎片程度
select tablespace_name,count(tablespace_name)
from dba_free_space group by tablespace_name having count(tablespace_name)>10;
alter tablespace name coalesce; #當pctincrease=0 時候合併相鄰的空閒extent
alter table name deallocate unused; #釋放高HWM以上的空塊
4.十二、查看碎片程度高的表
SELECT segment_name table_name , COUNT(*) extents FROM dba_segments
WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM dba_segments
GROUP BY segment_name); 數據庫