學(xué)習(xí)動(dòng)態(tài)性能表(一)--v$sysstat |
[君三思] 2007-5-23 |
按照OracleDocument中的描述, v$sysstat 存儲(chǔ)自數(shù)據(jù)庫(kù)實(shí)例運(yùn)行那刻起就開(kāi)始累計(jì)全實(shí)例(instance-wide)的資源使用 情況 。 類似于v$sesstat,該視圖存儲(chǔ)下列的統(tǒng)計(jì)信息: 1>. 事件發(fā)生次數(shù)的統(tǒng)計(jì)(如:user commits) 2>. 數(shù)據(jù)產(chǎn)生,存取或者操作的total列( 如: redo size) 3>. 如果TIMED_STATISTICS值為true, 則統(tǒng)計(jì) 花費(fèi) 在執(zhí)行操作上的 總時(shí)間( 如: CPU used by this session) v$sysstat 視圖常用列介紹: 該視圖還有一列class-統(tǒng)計(jì)類別但極少會(huì)被使用,各類信息如下: 1 代表事例活動(dòng) 2 代表Redo buffer活動(dòng) 4 代表鎖 8 代表數(shù)據(jù)緩沖活動(dòng) 16 代表OS活動(dòng) 32 代表并行活動(dòng) 64 代表表訪問(wèn) 128 代表調(diào)試信息 注意:Statistic#的值 在不同版本中各不相同 ,使用時(shí)要用Name做為查詢條件而不要以statistic#的值做為條件。 使用v$sysstat中的數(shù)據(jù) 該視圖中數(shù)據(jù)常被用于監(jiān)控系統(tǒng)性能。如buffer cache命中率、軟解析率等都可從該視圖數(shù)據(jù)計(jì)算得出。 該視圖中的數(shù)據(jù) 也 被用于監(jiān)控系統(tǒng)資源使用情況,以及系統(tǒng)資源利用率的變化。正因如此多的性能數(shù)據(jù),檢查某區(qū)間內(nèi)系統(tǒng)資源使用情況可以這樣做,在一個(gè)時(shí)間段開(kāi)始時(shí)創(chuàng)建一個(gè)視圖數(shù)據(jù)快照,結(jié)束時(shí)再創(chuàng)建一個(gè),二者之間各統(tǒng)計(jì)項(xiàng)值的不同 (end value - begin value) 即是這一時(shí)間段內(nèi)的資源消耗情況。這是oracle工具的常用方法,諸如Statspack以及BSTAT/ESTAT都是如此。 為了對(duì)比某個(gè)區(qū)間段的數(shù)據(jù),源數(shù)據(jù)可以被格式化(每次事務(wù),每次執(zhí)行,每秒鐘或每次登陸),格式化后數(shù)據(jù)更容易從兩者中鑒別出差異。這類的對(duì)比在升級(jí)前,升級(jí)后或僅僅想看看一段時(shí)間內(nèi)用戶數(shù)量增長(zhǎng)或數(shù)據(jù)增加如何影響資源使用方面更加實(shí)用。 你也可以使用v$sysstat數(shù)據(jù) 通過(guò) 查詢v$system_event視圖來(lái)檢查資源消耗和資源回 收。 V$SYSSTAT 中的 常用統(tǒng)計(jì) V$SYSSTAT中包含多個(gè)統(tǒng)計(jì)項(xiàng), 這部分 介紹了 一些 關(guān)鍵的 v$sysstat 統(tǒng)計(jì) 項(xiàng) ,在調(diào)優(yōu)方面相當(dāng)有用。下列按字母先后排序: 數(shù)據(jù)庫(kù)使用狀態(tài)的一些關(guān)鍵指標(biāo):
注: SQL 語(yǔ)句的解析有軟解析soft parse與硬解析hard parse之說(shuō),以下是5個(gè)步驟: 1 :語(yǔ)法是否合法(sql寫(xiě)法) 2 :語(yǔ)義是否合法(權(quán)限,對(duì)象是否存在) 3 : 檢查該sql是否在 共 享池中存在 -- 如果存在,直接跳過(guò)4和5,運(yùn)行sql. 此時(shí)算soft parse 4 :選擇執(zhí)行計(jì)劃 5 :產(chǎn)生執(zhí)行計(jì)劃 -- 如果5個(gè)步驟全做,這就叫hard parse. 注意物理I/O oracle 報(bào)告物理讀也許并未導(dǎo)致實(shí)際物理磁盤(pán)I/O操作。這完全有可能因?yàn)槎鄶?shù)操作系統(tǒng)都有緩存文件,可能是那些塊在被讀取。塊也可能 存于磁盤(pán) 或控制級(jí)緩存 以 再次避免實(shí) 際 I/O 。Oracle報(bào)告有物理讀也許僅僅表示被請(qǐng)求的塊并不在緩存中。 由V$SYSSTAT得出實(shí)例效率比(Instance Efficiency Ratios) 下列是些典型的instance efficiency ratios 由v$sysstat數(shù)據(jù)計(jì)算得來(lái),每項(xiàng)比率值應(yīng)該盡可能接近1: *Buffer cache hit ratio :該項(xiàng)顯示buffer cache大小是否合適。 公式:1-((physical reads-physical reads direct-physical reads direct (lob)) / session logical reads) 執(zhí)行: 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¨ ;*Soft parse ratio :這項(xiàng)將顯示系統(tǒng)是否有太多硬解析。該值將會(huì)與原始統(tǒng)計(jì)數(shù)據(jù)對(duì)比以確保精確。例如,軟解析率僅為0.2則表示硬解析率太高。不過(guò),如果總解析 量 (parse count total) 偏低,這項(xiàng)值可以被忽略。 公式:1 - ( parse count (hard) / parse count (total) ) 執(zhí)行: 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)¨ ;*In-memory sort ratio :該項(xiàng)顯示內(nèi)存中完成的排序所占比例。最理想狀態(tài)下,在OLTP系統(tǒng)中,大部分排序不僅小并且能夠完全在內(nèi)存里完成排序。 公式:sorts (memory) / ( sorts (memory) + sorts (disk) ) 執(zhí)行: 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)¨ ;*Parse to execute ratio :在生產(chǎn)環(huán)境,最理想狀態(tài)是一條sql語(yǔ)句一次解析多數(shù)運(yùn)行。 公式:1 - (parse count/execute count) 執(zhí)行: select 1 -(a. value /b. value ) from v$sysstat a,v$sysstat b where a. name = ¨parse count (total)¨ and b. name = ¨execute count¨ ;*Parse CPU to total CPU ratio :該項(xiàng)顯示總的CPU花費(fèi)在執(zhí)行及解析上的比率。如果這項(xiàng)比率較低,說(shuō)明系統(tǒng)執(zhí)行了太多的解析。 公式:1 - (parse time cpu / CPU used by this session) 執(zhí)行: 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 :通常,該項(xiàng)顯示鎖競(jìng)爭(zhēng)比率。這項(xiàng)比率計(jì)算 是否時(shí)間花費(fèi)在解析分配給CPU進(jìn)行周期運(yùn)算(即生產(chǎn)工作)。解析時(shí)間花費(fèi)不在CPU周期運(yùn)算通常表示由于鎖競(jìng)爭(zhēng)導(dǎo)致了時(shí)間花費(fèi) 公式:parse time cpu / parse time elapsed 執(zhí)行: select a. value /b. value from v$sysstat a,v$sysstat b where a. name = ¨parse time cpu¨ and b. name = ¨parse time elapsed¨ ;從V$SYSSTAT 獲取負(fù)載間檔(Load Profile) 數(shù)據(jù) 負(fù)載間檔是監(jiān)控系統(tǒng)吞吐量和負(fù)載變化的重要部分,該部分提供 如下 每秒和每個(gè) 事務(wù) 的統(tǒng)計(jì)信息:logons cumulative, parse count (total), parse count (hard), executes, physical reads, physical writes, block changes, and redo size. 被格式化的數(shù)據(jù)可檢查¨rates¨是否過(guò)高,或用于對(duì)比其它基線數(shù)據(jù)設(shè)置為識(shí)別system profile在期間如何變化。例如,計(jì)算每個(gè)事務(wù)中block changes可用如下公式: *db block changes / ( user commits + user rollbacks ) 執(zhí)行: select a. value /(b. value +c. value ) from v$sysstat a,v$sysstat b,v$sysstat c where a. name = ¨db block changes¨ and b. name = ¨user commits¨ and c. name = ¨user rollbacks¨ ;其它計(jì)算統(tǒng)計(jì)以衡量負(fù)載 方式 ,如下: *Blocks changed for each read : 這項(xiàng)顯示出block changes在block reads中的比例。它將指出是否系統(tǒng)主要用于只讀訪問(wèn)或是主要進(jìn)行諸多數(shù)據(jù)操作( 如: inserts/updates/deletes) 公式:db block changes / session logical reads 執(zhí)行: select a. value /b. value from v$sysstat a,v$sysstat b where a. name = ¨db block changes¨ and b. name = ¨session logical reads¨ ;*Rows for each sort : 公式:sorts (rows) / ( sorts (memory) + sorts (disk) ) 執(zhí)行: select a. value /(b. value +c. value ) from v$sysstat a,v$sysstat b,v$sysstat c where a. name = ¨sorts (rows)¨ and b. name = ¨sorts (memory)¨ and c. name = ¨sorts (disk)¨ ; |