【效能調整】系統檢視(一)
V$SESSION, V$SESSTAT, V$SESSION_EVENT, V$SESSION_LONGOPS,
V$SESSION_WAIT, V$SESS_IO, V$SESSION_CONNECT_INFO
select --會話資訊
a.SADDR, --session's address
a.SID, --session id
a.SERIAL#, --when sesseion reuse,the serial + 1
a.TYPE, --the type of session
a.PADDR, --process address
a.PROCESS, --process id of client
a.SQL_ADDRESS, --the address of the session's sql
a.SQL_HASH_VALUE, --the hash_value of the session's sql
a.SQL_ID, --the id of the session's sql
a.EVENT#, --the event number
a.EVENT, --the describe of the event number
a.WAIT_CLASS#, --wait class number
a.WAIT_CLASS, --wait class describe
a.WAIT_TIME, --wait time
a.USER#, --the use id
a.USERNAME, --use name
a.OSUSER --the operation system user name
from v$session a where rownum = 1 ;
可以發現這些session相關的表中最核心的就是session表,這些表都有sid可以互相關聯,分別存放著session的相關屬性或者統計資訊。例如:
SELECT a.PADDR,
a.SQL_ADDRESS,
a.SQL_HASH_VALUE,
a.SQL_ID,
b.BLOCK_GETS,
b.CONSISTENT_GETS,
b.PHYSICAL_READS,
c.AUTHENTICATION_TYPE,
c.OSUSER,
d.EVENT_ID,
d.EVENT,
d.TOTAL_WAITS,
d.TIME_WAITED,
d.WAIT_CLASS#,
d.WAIT_CLASS
from v$session a,
v$sess_io b,
v$session_connect_info c,
v$session_event d
where a.SID = (select sid from v$mystat where rownum = 1)
and a.SID = b.SID
and a.SID = c.sid
and d.SID = a.SID
;
系統狀態相關檢視:
v$statname和v$mystat, v$sysstat
select a.STATISTIC#,a.NAME,a.CLASS,a.STAT_ID from V$STATNAME a ;
其中的class代表意義:
1 代表事例活動
2 代表Redo buffer活動
4 代表鎖
8 代表資料緩衝活動
16 代表OS活動
32 代表並行活動
64 代表表訪問
128 代表除錯資訊
下面的語句可以查詢當前session的狀態
select * from
(select b.name,a.SID,a.VALUE from v$mystat a ,v$sysstat b
where a.STATISTIC# = b.STATISTIC# order by value desc )
where rownum < 30;
或者各session的各項值:
select * from
(select b.name,a.SID,a.VALUE from v$sesstat a ,v$sysstat b
where a.STATISTIC# = b.STATISTIC# order by value desc ) ;
列出常見的name值和解釋:
CPU used by this session:
所有session的cpu佔用量,不包括後臺程式。這項統計的單位是百分之x秒.完全呼叫一次不超過10ms
db block changes:
那部分造成SGA中資料塊變化的insert,update或delete運算元 這項統計可以大概看出整體資料庫狀態。
在各項事務級別,這項統計指出髒快取比率。
execute count:
執行的sql語句數量(包括遞迴sql)
logons current:
當前連線到例項的Sessions。如果當前有兩個快照則取平均值。
logons cumulative:
自例項啟動後的總登陸次數。
parse count (hard):
在shared pool中解析呼叫的未命中次數。
當sql語句執行並且該語句不在shared pool或雖然在shared pool但因為兩者存在部分差異而不能被使用時產生硬解析。
如果一條sql語句原文與當前存在的相同,但查詢表不同則認為它們是兩條不同語句,則硬解析即會發生。
硬解析會帶來cpu和資源使用的高昂開銷,因為它需要oracle在shared pool中重新分配記憶體,然後再確定執行計劃,最終語句才會被執行。
parse count (total):
解析呼叫總數,包括軟解析和硬解析。當session執行了一條sql語句,該語句已經存在於shared pool並且可以被使用則產生軟解析。
當語句被使用(即共享) 所有資料相關的現有sql語句(如最優化的執行計劃)必須同樣適用於當前的宣告。這兩項統計可被用於計算軟解析命中率。
parse time cpu:
總cpu解析時間(單位:10ms)。包括硬解析和軟解析。
parse time elapsed:
完成解析呼叫的總時間花費。
physical reads:
OS blocks read數。包括插入到SGA快取區的物理讀以及PGA中的直讀這項統計並非i/o請求數。
physical writes:
從SGA快取區被DBWR寫到磁碟的資料塊以及PGA程式直寫的資料塊數量。
redo log space requests:
在redo logs中服務程式的等待空間,表示需要更長時間的log switch。
redo size:redo
發生的總次數(以及因此寫入log buffer),以byte為單位。這項統計顯示出update活躍性。
session logical reads:
邏輯讀請求數。
sorts (memory) and sorts (disk):sorts(memory)
是適於在SORT_AREA_SIZE(因此不需要在磁碟進行排序)的排序操作的數量。sorts(disk)則是由於排序所需空間太大,SORT_AREA_SIZE不能滿足而不得不在磁碟進行排序操作的數量。這兩項統計通常用於計算in-memory sort ratio。
sorts (rows):
列排序總數。這項統計可被'sorts (total)'統計項除盡以確定每次排序的列。該項可指出資料卷和應用特徵。
table fetch by rowid:
使用ROWID返回的總列數(由於索引訪問或sql語句中使用了'where rowid=&rowid'而產生)
table scans (rows gotten):
全表掃描中讀取的總列數
table scans (blocks gotten):
全表掃描中讀取的總塊數,不包括那些split的列。
可以檢視v$sysmetric中的awr資訊,獲得一些比率的計算方法:
SQL> select a.metric_name,a.METRIC_UNIT
2 from v$sysmetric a where a.METRIC_UNIT like '%!%%' escape '!';
METRIC_NAME METRIC_UNIT
---------------------------------------------------------------- ----------------------------------------------------------------
Buffer Cache Hit Ratio % (LogRead - PhyRead)/LogRead
Memory Sorts Ratio % MemSort/(MemSort + DiskSort)
Redo Allocation Hit Ratio % (#Redo - RedoSpaceReq)/#Redo
User Commits Percentage % (UserCommit/TotalUserTxn)
User Rollbacks Percentage % (UserRollback/TotalUserTxn)
Cursor Cache Hit Ratio % CursorCacheHit/SoftParse
Execute Without Parse Ratio % (ExecWOParse/TotalExec)
Soft Parse Ratio % SoftParses/TotalParses
User Calls Ratio % UserCalls/AllCalls
Host CPU Utilization (%) % Busy/(Idle+Busy)
User Limit % % Sessions/License_Limit
Database Wait Time Ratio % Wait/DB_Time
Database CPU Time Ratio % Cpu/DB_Time
Row Cache Hit Ratio % Hits/Gets
Row Cache Miss Ratio % Misses/Gets
Library Cache Hit Ratio % Hits/Pins
Library Cache Miss Ratio % Misses/Gets
Shared Pool Free % % Free/Total
PGA Cache Hit % % Bytes/TotalBytes
Process Limit % % Processes/Limit
Session Limit % % Sessions/Limit
Streams Pool Usage Percentage % Memory allocated / Size of Streams pool
Buffer Cache Hit Ratio % (LogRead - PhyRead)/LogRead
Memory Sorts Ratio % MemSort/(MemSort + DiskSort)
Execute Without Parse Ratio % (ExecWOParse/TotalExec)
Soft Parse Ratio % SoftParses/TotalParses
Host CPU Utilization (%) % Busy/(Idle+Busy)
Database CPU Time Ratio % Cpu/DB_Time
Library Cache Hit Ratio % Hits/Pins
Shared Pool Free % % Free/Total
30 rows selected.
SQL>
有了這些公式,就可以按照自己的定義來檢視一些比率來幫助診斷效能問題(下列計算方法均為推測或參考網路上的一些方法)
Buffer Cache Hit Ratio % (LogRead - PhyRead)/LogRead
Buffer cache命中率=(所有的邏輯讀-所有物理讀)/所有的邏輯讀
select 1 - ((a.value - b.value - c.value) / d.value)
from v$sysstat a, v$sysstat b, v$sysstat c, v$sysstat d
where a.name = 'physical reads'
and b.name = 'physical reads direct'
and c.name = 'physical reads direct (lob)'
and d.name = 'session logical reads';
Memory Sorts Ratio % MemSort/(MemSort + DiskSort)
記憶體中完成的排序所佔比例。最理想狀態下,在OLTP系統中,大部分排序不僅小並且能夠完全在記憶體裡完成排序。
select a.value/(b.value+c.value)
from v$sysstat a,v$sysstat b,v$sysstat c
where a.name='sorts (memory)' and
b.name='sorts (memory)' and c.name='sorts (disk)';
Redo Allocation Hit Ratio % (#Redo - RedoSpaceReq)/#Redo
select (b.VALUE - a.VALUE) / b.VALUE
from v$sysstat a, v$sysstat b
where a.name = 'redo log space requests'
and b.NAME = 'redo size';
User Commits Percentage % (UserCommit/TotalUserTxn)
User Rollbacks Percentage % (UserRollback/TotalUserTxn)
TotalUserTxn為系統事務起用次數。當需要計算其它統計中每項事務比率時該項可以被做為除數。例如,計算事務中邏輯讀,可以使用下列公式:session logical reads / (user commits + user rollbacks)。
select e.VALUE/(b.VALUE + a.VALUE + c.value + d.value)
from v$sysstat a, v$sysstat b,v$sysstat c,v$sysstat d,v$sysstat e
where a.name = 'user commits'
and b.NAME = 'user rollbacks'
and c.name = 'user calls'
and d.name = 'user I/O wait time'
and e.name = 'session logical reads'
;
或者當前session的事務邏輯讀數:
select e.VALUE/(b.VALUE + a.VALUE + c.value + d.value)
from v$mystat a, v$mystat b,v$mystat c,v$mystat d,v$mystat e,
v$statname aa,v$statname bb,v$statname cc,v$statname dd,v$statname ee
where aa.name = 'user commits'
and bb.NAME = 'user rollbacks'
and cc.name = 'user calls'
and dd.name = 'user I/O wait time'
and ee.name = 'session logical reads'
and a.STATISTIC# = aa.STATISTIC#
and b.STATISTIC# = bb.STATISTIC#
and c.STATISTIC# = cc.STATISTIC#
and d.STATISTIC# = dd.STATISTIC#
and e.STATISTIC# = ee.STATISTIC#
;
而User commits和rollbacks的百分比可以由下面的sql顯示
select a.VALUE/(b.VALUE + a.VALUE + c.value + d.value)
from v$sysstat a, v$sysstat b,v$sysstat c,v$sysstat d
where a.name = 'user commits'
and b.NAME = 'user rollbacks'
and c.name = 'user calls'
and d.name = 'user I/O wait time';
select b.VALUE/(b.VALUE + a.VALUE + c.value + d.value)
from v$sysstat a, v$sysstat b,v$sysstat c,v$sysstat d
where a.name = 'user commits'
and b.NAME = 'user rollbacks'
and c.name = 'user calls'
and d.name = 'user I/O wait time';
Cursor Cache Hit Ratio % CursorCacheHit/SoftParse
當前session下的cursor cache hit ratio計算
select cc.value / (aa.value - bb.value)
from (select b.STATISTIC#, a.SID, b.NAME, a.VALUE
from v$mystat a, v$statname b
where a.STATISTIC# = b.STATISTIC#
and b.NAME = 'parse count (total)') aa,
(select b.STATISTIC#, a.SID, b.NAME, a.VALUE
from v$mystat a, v$statname b
where a.STATISTIC# = b.STATISTIC#
and b.NAME = 'parse count (hard)') bb,
(select b.STATISTIC#, a.SID, b.NAME, a.VALUE
from v$mystat a, v$statname b
where a.STATISTIC# = b.STATISTIC#
and b.NAME like 'session cursor cache hits') cc;
當這個比率非常低的時候,可能意味著當前的session_cached_cursors設定的過低,需要稍稍調大這個值。
當sql解析的時候,如果當前session已經有快取了的cursor,則可以直接使用對應的cursor,這個過程也叫做softer soft parse,顯然適當的softer soft parse,使得session下的遊標能夠複用是可以提高一定的效能的。
SQL> show parameter session_cached_cursors
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors integer 20
SQL>
Execute Without Parse Ratio % (ExecWOParse/TotalExec)
未解析的執行的比率
select 1-b.VALUE / a.VALUE
from v$sysstat a, v$sysstat b
where a.name = 'execute count'
and b.name = 'parse count (total)';
Soft Parse Ratio % SoftParses/TotalParses
這項將顯示系統是否有太多硬解析。該值將會與原始統計資料對比以確保精確。例如,軟解析率僅為0.2則表示硬解析率太高。不過,如果總解析量(parse count total)偏低,這項值可以被忽略。
公式:1 - ( parse count (hard) / parse count (total) )
執行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
Where a.name='parse count (hard)' and b.name='parse count (total)';
User Calls Ratio % UserCalls/AllCalls
select a.value / (a.value + b.value)
from v$sysstat a, v$sysstat b
where a.name = 'user calls'
and b.name = 'recursive calls';
Host CPU Utilization (%) % Busy/(Idle+Busy)
select b.VALUE / (a.value + b.value)
from V$OSSTAT a, V$OSSTAT b
where a.STAT_NAME = 'IDLE_TIME'
and b.STAT_NAME = 'BUSY_TIME';
Row Cache Hit Ratio % Hits/Gets
SELECT (SUM(GETS - GETMISSES - FIXED)) / SUM(GETS) "ROW CACHE HIT RATIO"
FROM V$ROWCACHE;
User Limit % % Sessions/License_Limit
Database Wait Time Ratio % Wait/DB_Time
DB time即為
Select * from from v$sysstat a where a.NAME = 'DB time';
(注:Wait待解析 oracle wait interface後再來看。)
Database CPU Time Ratio % Cpu/DB_Time
Library Cache Hit Ratio % Hits/Pins
Pins - The number of times a pin was requested for objects of this namespace.
Reloads - Any pin of an object that is not the first pin performed since the object handle was created, and which requires loading the object from disk.
A pin hits發生在當要執行SQL或者PL/SQL的時候,他已經在library cache中,並且可以被執行。
Library cache的命中率,往往意味著share pool的大小是否合適,或者sql解析是否存在問題(結合soft parse ratio來看,如果2者都較低,很可能就是sql解析有問題)。
select sum(PINS) Pins,
sum(RELOADS) Reloads,
round((sum(PINS) - sum(RELOADS)) / sum(PINS) * 100,2) Hit_Ratio
from v$librarycache;
Shared Pool Free % % Free/Total
select f.POOL,
name,
sgasize / 1024 / 1024 allocated,
bytes / 1024 free,
round(bytes / sgasize * 100, 2) free_rate
from (select sum(bytes) sgasize from sys.v_$sgastat) s,
sys.v_$sgastat f
where f.name = 'free memory'
and f.name = 'shared pool'
;
Parse CPU to total CPU ratio:
該項顯示總的CPU花費在執行及解析上的比率。如果這項比率較低,說明系統執行了太多的解析。
公式:1 - (parse time cpu / CPU used by this session)
執行:
select 1-(a.value/b.value)
from v$sysstat a,v$sysstat b
where a.name='parse time cpu' and
b.name='CPU used by this session';
Parse time CPU to parse time elapsed:
通常,該項顯示鎖競爭比率。這項比率計算是否時間花費在解析分配給CPU進行週期運算(即生產工作)。解析時間花費不在CPU週期運算通常表示由於鎖競爭導致了時間花費
公式:parse time cpu / parse time elapsed
執行:
select a.value/b.value
from v$sysstat a,v$sysstat b
where a.name='parse time cpu' and b.name='parse time elapsed';
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16179598/viewspace-674355/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- vmstat檢視分析Linux系統負載效能Linux負載
- win10怎麼檢視電腦效能_win10系統檢視效能的方法Win10
- Linux 基礎教程 36-檢視系統效能Linux
- Linux系統調整swap大小Linux
- orcle效能調整(轉)
- 萬里GreatDB資料庫的學習之路--GreatDB引數調整與系統檢視(3)資料庫
- 批量調整視訊尺寸大小的方法,一鍵自動批量調整視訊
- SAP系統中成本中心調整
- Windows10系統檢視GPU效能資料的方法WindowsGPU
- Linux系統效能調優技巧Linux
- iMazing檔案系統檢視一覽表
- Linux 系統檢視命令Linux
- Postgresql系統表/檢視SQL
- Solon 統一的返回結果調整
- SQL Server 2005效能調整二(zt)SQLServer
- postgresql10.3 檢查點調整SQL
- postgresql 檢查點調整 checkpoint 轉SQL
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)Oracle
- PGA自動管理原理深入分析及效能調整(一)
- Linux - 檢視系統的版本Linux
- 檢視 Linux 系統資訊Linux
- 檢視系統的日誌
- 如何把SQL Server中一個表,一個儲存過程,一個檢視等改為系統表,系統儲存過程,系統檢視等...SQLServer儲存過程
- 系統狀態統計和檢視
- 雙埠SRAM如何提高系統的整體效能
- buffer cache深度分析及效能調整(五)
- buffer cache深度分析及效能調整(四)
- buffer cache深度分析及效能調整(六)
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)2Oracle
- 檢視Linux系統版本資訊Linux
- 檢視系統型別的命令型別
- Linux 如何檢視系統負載Linux負載
- 檢視系統的SHELL型別型別
- Kylin系統檢視firewalld狀態
- Linux檢視系統版本命令Linux
- Linux 檢視系統檔案命令Linux
- CentOS8檢視系統版本CentOS
- win10系統調整音訊平衡的方法Win10音訊
- linux系統lvm中lv使用空間的調整LinuxLVM