接km公司技術人員反饋,使用者新安裝的一台windows200864位his伺服器,資料庫版本是10.2.0.4,將業務遷移到新伺服器後正常運**況下cpu資源占用異常的高,經常達到100%,導致業務經常卡頓,使用者檢視資源管理器未發現異常程序,cpu資源大部分被oracle程序占用。
步驟一:首先分析會話占用cpu
遇到這種情況,一般就想到先看到底是oracle的那個程序(會話)過多消耗cpu,如果是linux系統,我們可以通過ps命令輕鬆的查詢到程序號,但是本案例中的環境是windows,該環境下如果在資源管理器中只能看到乙個oracle.exe程序,而會話的『程序』是通過執行緒的形式,這裡我們就必須借助第三方軟體,這裡推薦process explorer,執行介面如下:
點中oracle.exe程序,雙擊進去,選中執行緒,如下:
這裡的tid就對應資料庫v$process檢視裡面的spid,通過對cpu消耗的排序,我們找到tid後,再通過下面的sql去看該執行緒在進行什麼操作,如下:
selects.sid, s.status, q.sql_text
fromv$session s, v$sqltext q
wheres.sql_hash_value = q.hash_valueands.sql_address= q.addressand
s.sidin(selects.sid
fromv$sessions, v$process p
wheres.paddr= p.addrandp.spid =&tid)
order byq.piece;
我們發現消耗cpu消耗最高的執行緒經常再變更,頻率很高,隨機找了一條當時消耗最高的執行緒,通過查詢看到是執行的一條普通查詢sql,由於該sql沒有問題,執行計畫都正常,這裡就不再磊述。
步驟二:資料庫整體看cpu消耗
接下來我們再分析下資料庫整體的cpu消耗,我們通過取awr報告分析,結果如下:
整體cpu的消耗並不高,這就奇怪了,為什麼cpu會占用這麼高呢?再分析awr報告的作業系統資訊,發現了問題:
我們這裡看到資料庫統計的cpu資訊中,num_cpus為2,num_cpu_cores為1,這就意味著該伺服器只有2顆cpu,每個cpu只有1核,作為一台承擔醫院his業務主伺服器,這樣的cpu配置肯定是不夠的,怎麼會這樣呢?為了確認cpu的情況,我通過cpu-z這個軟體,進行了檢視,確認確實當前伺服器只使用了1核,如下:
但是他在安裝完成後,並沒有按照文件說的改回來,因此導致cpu一直被限制只能用2個處理器。
步驟:調整msconfig中的cpu限制
既然已經找到原因,就把取消掉該限制,在命令列中輸入msconfig, 去掉之前的勾,然後重啟下伺服器,如下
通過修改,可以看到下面的處理器也可以選擇,而且核數和執行緒都變成6和12,cpu的資源利用率也不再是100%,降到了合理的範圍。
2.根據spid查詢會話的執行語句:
selects.sid, s.status, q.sql_text
fromv$session s, v$sqltext q
wheres.sql_hash_value = q.hash_valueands.sql_address= q.addressand
s.sidin(selects.sid
fromv$sessions, v$process p
wheres.paddr= p.addrandp.spid =&tid)
order byq.piece;
3.msconfig禁用cpu:利用msconfig禁用cpu,在安裝完資料庫後記得改回去。
禁用CPU導致的HBA卡不可用
目錄 環境症狀 問題原因 解決方環境 系統平台 linux x86 red hat enterprise linux 4,linux x86 red hat enterprise linux 5,linux x86 red hat enterprise linux 6,linux x86 64 re...
邏輯禁用CPU
剛剛定了短期的研究方向 多核環境下軟體效能的提高,首先先做實驗,用實驗資料來證明普通的web應用在核不斷擴充套件的情況下,效能提公升並非線性而成下降趨勢,理論上是因為核之間的通訊,快取遷移代價增大。現在遇到的乙個問題是在windows下,應用可以選擇指定的核來執行,可是linux下的web應用雖然使...
Windows下獲取CPU頻率
一直想在windows下取得cpu的時鐘速度,找了好久終於找到了函式callntpowerinformation,要想使用它,首先必須包含powrprof.h標頭檔案和鏈結庫powerprof.lib.但是還有幾個問題 首先powrprof.h和許多其它在platform sdk中的標頭檔案一樣依然...