如何定位佔用oracle資料庫cpu過高的sql

2022-02-10 23:15:07 字數 1665 閱讀 3079

1樓:

oracle查詢當前執行效率低的sql

--cpu高的sql

select sql_text from v$sql order by cpu_time desc

--邏輯讀多的sql:

select * from (select buffer_gets, sql_text

from v$sqlarea

where buffer_gets > 500000

order by buffer_gets desc) where rownum<=30;

--執行次數多的sql :

select sql_text,executions from

(select sql_text,executions from v$sqlarea order by executions desc)

where rownum<81;

--讀硬碟多的sql :

select sql_text,disk_reads from

(select sql_text,disk_reads from v$sqlarea order by disk_reads desc)

where rownum<21;

2樓:匿名使用者

一般通過awr報告,可以找到一段時間內佔用cpu前十的sql

oraclecpu佔用率高怎麼處理

3樓:匿名使用者

問題分析:

一般cpu佔用效高都是排序、sql解析和全表掃瞄,這裡首先需要找出佔用cpu最高的sql,然後檢視他的執行計畫,比如:看執行計畫是走索引還是全表掃瞄(剛開始檢視top發現佔用同樣多的cpu的程序很多,還以為是oracle 的bug, 後來發現不是)。

處理過程:

1, 根據作業系統程序查詢oracle資料庫中佔用最多cpu的sql

使用linux系統 "top命令->p "查出佔用cpu最高的程序pid

操作如下:在sqlplus中執行如下sql:

sql>

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 =

order by piece asc

其中&pid 是使用top 檢視系統中程序佔用cpu極高的pid

找到sql語句進行相應的調整優化

2,分析找到的sql語句,如檢視sql執行計畫。

總結:這裡的問題是查詢的where 條件字段沒有在索引裡面,導致查詢慢。經過重建並增加相關欄位到索引解決,但有點疑惑的是原來庫上查詢語句裡where條件欄位也沒有在索引裡面(新庫是使用expdp匯出再匯入到新庫的),查詢還正常,cpu也不高,oracle資料庫真是博大精深,好多問題還有待研究。

怎麼從oracle資料庫備份資料庫

1 首先先確認oracle伺服器上oracle中標紅的相關的服務是否已經正常啟動。2 然後要把plsql關閉,讓連線先退出一下,確保斷開資料庫的所有連線,如果資料庫中有正在連線客戶端,備份的時候可能會出現異常。3 接著開啟cmd命令提示符視窗,輸入備份資料庫的命令,xp命令的後面跟使用者名稱和密碼,...

oracle資料庫面試題,ORACLE資料庫面試題

1 b沒有訪問表employee的許可權,或者有許可權但是在做desc時沒有加使用者名稱在表前面。2 在建表時設定了max extent引數導致了表extent數滿了之後不能再進行擴充套件。3 tablespace full表示該錶空間沒有可擴充套件的塊了,這是設定了datafile為autoext...

oracle資料庫表中,插入資料的時候如何產生母 數字編號

先建立乙個sequence 然後給插入資料的表寫個trigger before insert 的時候 設定這個欄位的值為 sd sequence.nextval create sequence 表名 seq increment by 1 start with 100000001 nocache in...