原文地址:http://ivan4126.blog.163.com/blog/static/2094910922012720115846705/
拓展地址:http://www.linuxdiyf.com/viewarticle.php?id=9743
Oracle 與CPU資源/Linux 查詢CPU情況
2012-08-20 16:19:08| 分類:
Oracle | 標籤:
|字型大小大中小
訂閱
--CPU空間及繁忙情況
select
* from v$osstat;
user:user level(應用)的CPU佔用情況
nice:加入nice優先順序的user level的CPU佔用情況
sys:system level(核心)的CPU佔用情況
idle:閒置CPU資源情況
--查看每個Session的CPU利用情況:
select ss.sid,se.command,ss.value CPU ,se.username,se.program
from v$sesstat ss, v$session se
where ss.statistic#
in
(select statistic#
from v$statname
where name
= 'CPU used by this session')
and se.sid=ss.sid
and ss.sid>6
order
by CPU desc;
這裡麵包含了很多東西,可以使用select * 來看看。
--比較一下哪個session的CPU使用時間最多,然後查看該Session的具體情況:
select s.sid, s.event, s.MACHINE,s.OSUSER,s.wait_time, w.seq#, q.sql_text
from v$session_wait w, v$session s, v$process p, v$sqlarea q
where s.paddr=p.addr
and
s.sid=&p
and
s.sql_address=q.address;
根據上一個sql判斷出來的SID,進行查詢。
得出來的結果:
Oracle與CPU資源
Oracle資料庫與運行在同一台伺服器上的其他所有軟體共用CPU資源。如果CPU處理能力不足,減少Oracle或者非Oracle程式的CPU消耗可以改善伺服器上所有進程的效能。
如果機器上所有CPU都繁忙,這些進程將排隊等待使用CPU。由於進程需要等待CPU資源,因而這些進程所形成的隊列又被稱作運行隊列。CPU越忙,進程在運行隊列中等待的時間就越長。處在隊列中的進程並不做任何工作,運行隊列變長,回應時間就會下降。
可以使用作業系統標準監控工具來檢查主機上CPU的使用方式。
對CPU的利用率進行調優實質上就是對每個單獨的任務進行調優:它將減少完成任務所需要的命令數量,並/或者減少要執行的認為數量。通過負載平衡,SQL調優,以及改進應用程式的設計等方式來具體完成CPU調優工作。從事這樣的調優工作需要你深入理解這些任務的目的以及它們被執行的方式。
在前面已提到,關於Oracle資料庫所有調優問題的深入討論不是本書的主題。但是,有一些常見的任務經常會導致CPU被過度使用。如果在資料庫中遇到CPU資源缺乏的情況,可能需要考慮一下因素:
糟糕的SQL語句
糟糕的SQL語句是導致效能問題的頭號因素。Oracle資料庫總是嘗試最佳化客戶提交的SQL語句。如果在客戶應用程式中的SQL語句編寫得很糟糕,這個時候即便是Oracle採取了最佳的最佳化方案,也無濟於事,Oracle將會消耗比實際需要還多的資源來執行該SQL語句。由於調整SL需要深入理解Oracle的工作原理以及應用程式的需求,因而整個過程困難而又費時。早期的檢查工作能夠發現底層資料庫的設計問題,從而會導致修改表結構和索引等。在Oracle資料庫10g之前,改變SQL語句需要重新對之進行測試,以及重新部署應用程式。
Oracle資料庫10g引入了SQL調優顧問工具,該工具不僅可以識別編碼槽糕的SQL語句,還可以建立最佳化器規劃來解決這類問題,並採用改進後的規劃來代替標準的最佳化方案。有了這樣的工具,可以在不修改任何代碼的情況下改善那些糟糕的SQL語句的效能。Oracle資料庫11g中的SQL顧問工具包含了SQL調優顧問,SQL訪問顧問,以及分區顧問這三個組件的功能。
Oracle資料庫11g能夠自動偵測工作負載最大的SQL查詢操作,並能夠在適當的情況下建立SQL輪廓資訊來提高它們的效能。另外,這個特性還能夠為新索引的建立提供建議,進而提高這些語句的效能。
Oracle資料庫11g還具有跟蹤SQL語句執行計畫變更的功能;第4章曾經對此進行過描述。它的最佳化器能夠維護執行計畫的曆史資訊,當新的計劃被檢測到,最佳化器會在使用舊計劃的同時評估新計劃的效能。一旦最佳化器發現新計劃能夠提供同樣的效能,它就會用新計劃替換舊計劃。這個特性與糟糕的SQL語句並沒有直接的關係,但是它關係到計劃變更的各種後果,這會導致難以預料的效能衰退。
過多的解析
正如"SQL語句的記憶體"一節中討論的那樣,Oracle在執行SQL語句之前必須對之進行解析。解析工作是CPU密集型的,其中包括對照資料字典來檢查引用的表和列是否有效。通過複雜的演算法和計算來估算語句所有執行計畫的開銷,從而得到最佳的執行計畫。如果語句中沒有綁定變數(在第8章中討論),資料庫必須解析它受到的每一條語句。這種額外的沒有必要的解析是導致效能下降的主要原因之一。另一個常見的原因就是共用記憶體池太小,這個在"共用記憶體池" 一節中已經討論過。記住,通過使用儲存概要可以避免建立執行計畫;第4章曾經介紹過儲存概要。而且,對應Oracle
9i,你還可以通過編輯提示來構建一個儲存概要。前面也提到過,Oracle資料庫11g具有緩衝完整結果集的功能,它可以將相同查詢重複執行的影響降到最低。
資料庫的工作負載
當應用程式設計良好並且資料庫運行在最佳狀態的時候,你可能遇到的問題就是由於請求的工作量過大而沒有足夠多的CPU資源來處理。這種CPU資源缺乏可能是由於某一個資料庫工作負載過大而導致(如果該資料庫所在的機器為專用伺服器),也可能是由於運行在一台伺服器上的多個資料庫總的工作負載過大而導致。在容量設計的時候低估CPU資源的使用方式,這是一個長期存在的問題。不幸的是,對某一級操作的CPU資源的準確估計,需要詳細深入的分析每個事務所耗費的CPU資源總量,以及每分鐘或每秒鐘系統需要處理的事務數量,而其要根據高峰負荷和平均負荷進行估計。大多數的組織機構並沒有花足夠多的時間和資源通過分析系統和製作原型來回答這些問題。這個時候我們就會明白為什麼CPU資源短缺問題如此常見,為什麼解決這種問題最常見的方案就是簡單的添加更多的
CPU一直到這種問題消失為止。即時應用程式叢集以及Oracle網格正在做各種努力試圖讓管理員能夠更加容易的提高CPU的馬力。
非資料庫工作負載
並不是所有的組織機構都有能力為每個Oracle資料庫都配置一台專用的主機來保證它們能夠佔有足夠的CPU資源。可以藉助作業系統工具來尋找主機上最大的CPU資源消耗者。你可能會發現非Oracle進程消耗了大部分的CPU資源,並且嚴重的影響資料庫效能。