Oracle資料庫CPU使用率過高問題處理

2021-08-07 17:34:18 字數 2665 閱讀 8204

或批量殺程序

[sql]

view plain

copy

select 'alter system kill session '''||sid||','||serial#||''';' from v$session where sql_id in(sql_id);  

一、問題描述

執行在windows上的oracle開發庫的oracle程序cpu使用率保持在99%,伺服器和資料庫均反應緩慢。

二、排查思路

可能造成cpu使用率高的情況有:大量排序、大量sql解析、全表掃瞄、oracle bug等。因此希望找到占用cpu較高的程序id(unix或linux)或執行緒id(windows)來找到對應的sql語句,以分析問題的原因。

三、處理步驟

2. 雙擊oracle.exe程序,檢視oracle的執行緒資訊,按照cpu使用率倒序排序,找到占用cpu較高的tid。(如在unix或linux系統中,使用top命令即可獲得占用cpu較高的程序id,使用程序id去資料庫中查詢對應資訊即可)

3. 使用上面找到的tid代入下面的sql查詢對應的sql語句或會話資訊。

[sql]view plain

copy

select

sql_text 

from

v$sqltext a 

where

(a.hash_value, a.address) in(

select

decode(sql_hash_value, 0, prev_hash_value, sql_hash_value),decode(sql_hash_value, 0, prev_sql_addr, sql_address) 

from

v$session b 

where

b.paddr =(

select

addr 

from

v$process c 

where

c.spid = 

'&pid'

)) order

bypiece 

asc;  

[sql]view plain

copy

select

id,serial# ,username,osuser,machine,program,process,to_char(logon_time,

'yyyy-mm-dd hh24:mi:ss'

) logon 

from

v$session 

where

paddr 

in( 

select

addr 

from

v$process 

where

spid in(

'&pid'

));  

4. kill掉查出的會話,記錄查出的sql語句待後續分析。

四、總結:

在進行第三步的時候遇到狀況:使用找出的tid在資料庫中查不到對應的sql和會話資訊。為先恢復資料庫服務,直接kill了占用cpu較高的幾個執行緒,後續通過分析awr和ash報告推測本次故障與資料庫中幾個涉及臨時表建立和操作的儲存過程有關,在儲存過程執行中有大量的全表掃瞄和直接路徑讀並伴隨大量的物理讀操作。

ORACLE 檢視CPU 使用率

cpu 使用率 可以提供有關oracle db cpu 佔用率資訊的檢視至少有以下三種 如果執行的是oracle db 資源管理器,v rsrc consumer group可以基於每個 使用者組顯示cpu 佔用率的統計資訊。此檢視顯示與當前活動的資源使用者組相關 的資料。v sysstat顯示所有...

Oracle資料庫CPU使用率過高處理記錄

一 問題描述 執行在windows上的oracle開發庫的oracle程序cpu使用率保持在99 伺服器和資料庫均反應緩慢。二 排查思路 可能造成cpu使用率高的情況有 大量排序 大量sql解析 全表掃瞄 oracle bug等。因此希望找到占用cpu較高的程序id unix或linux 或執行緒i...

控制CPU使用率

我使用的是ubuntu 14.04版本,用的是自帶的系統監視器來觀察cpu使用率的變化。1.首先來說說怎麼控制cpu使用率,當程式執行乙個死迴圈的時候,使用率就會變成100 而當程式進入idle的時候,使用率就會很低 在別的程式不啟動的情況下 那麼控制cpu使用率就是調整它idle和busy的時間比...