申請免費(fèi)試用、咨詢電話:400-8352-114
文章來源:泛普軟件
我們在日常的管理中, 經(jīng)常會碰到客戶或開發(fā)人員反應(yīng)速度變慢了. 這一類問題常使初級DBA摸不著頭腦, 還不如數(shù)據(jù)庫直接報出某個錯誤, 更直接了當(dāng). 下面簡單描述一下, 解決這類問題時的一般思路。
如果有人反應(yīng)速度變慢了, 最有可能影響速度的, 無外乎CPU, 內(nèi)存和I/O. 在操作系統(tǒng)下,我們可以先使用top命令, 查看一下CPU的占用情況. 在top的輸出結(jié)果中, 特別要注意第一行中的load average, CPU的負(fù)載情況. 如果這里顯示的數(shù)字大于CPU數(shù), 說明CPU的負(fù)載有點(diǎn)高了. 再結(jié)合第三行一起看, 如果第三行中, CPU的空閑比例為0, 就說明CPU存在爭用. 正常情況下, CPU應(yīng)該有一定的空閑才好. 如果這里顯示空閑為0, 爭用CPU的不一定都是Oracle的進(jìn)程. top的下面顯示的進(jìn)程的列表, 只需看一下占用CPU高的進(jìn)程是否是Oracle相關(guān)的進(jìn)程, 即可確認(rèn)此點(diǎn). 如果運(yùn)氣好, 或許可以直接發(fā)現(xiàn)某個進(jìn)程占用了過多的CPU. 如果將問題定位到了某個進(jìn)程, 對進(jìn)一步解決問題, 有很大的幫助. 但, 大多數(shù)時候, CPU的爭用已經(jīng)很高了, 但是在進(jìn)程列表中, 發(fā)現(xiàn)不了某些進(jìn)程占用過高的CPU. 這時要定位問題, 可能要復(fù)雜一些. 我們可以進(jìn)入Oracle, 查看v$sqlarea或等待事件.
在v$sqlarea視圖中, Elapsed_time和CPU_time對了解每條SQL聲明的CPU占用情況最有幫助. 其中CPU_TIME是執(zhí)行SQL聲明所耗用的CPU時間. Elapsed_time除實(shí)際耗用的CPU時間外, 還要加上等待時間. 如果觀察V$SQLAREA沒有發(fā)現(xiàn)特別耗用CPU的SQL聲明. 可以在Statspace報告中對比一下正常時期的數(shù)據(jù), 觀察一下看有沒有某條語句的CPU時間, 執(zhí)行次數(shù)出現(xiàn)異常的變化. 有時, 或許有些SQL的CPU占用不高, 但執(zhí)行次數(shù)卻非常的高, 這也可能會成為造成CPU爭用的原兇. 解決問題時, 將問題定位的某個確定的地方, 是解決問題的第一步. 這里, 如果可以將問題定位到某條確定的SQL, 距真正的解決問題, 就向前邁了一大步. 關(guān)于SQL聲明的調(diào)優(yōu), 可是個大問題, 這篇短短的文章很難表述清楚, 我們到以后的系列實(shí)驗(yàn)中再討論.
o+W*i"u#{;m6P^Kw0 在V$sqlarea視圖中,除了上面說過的Elapsed_time力CPU_time兩列外, 在了解某條SQL聲明的情況時,下面的這些列也很有用:
"U7H x&?-Q4G#^:wAc0 disk_reads:物理讀
f4e|"Q7@6E*^6