ORACLE資料庫導致cpu使用率高的原因

2022-03-21 20:04:07 字數 5071 閱讀 3415

1樓:匿名使用者

自己的機子做伺服器要把oracle設定成手動的啟動,否則你開機就執行很多的資源所以你的cpu會很高。在執行裡面輸入services.msc進行設定oracle的服務執行狀態。

2樓:匿名使用者

select count(*) from jam_status_detect_5 t

where

t.alarm_rank != -1

and t.alarm_confirm_status = 0

and t.status_time >=(select max(s.status_time) from jam_status_detect_5 s )- /24

and t.status_time <=(select max(s.status_time) from jam_status_detect_5 s

一條語句遍歷三次 要是jam_status_detect_5這張表資料量大的話 那簡直就是災難。。你完全可以只使用一次遍歷實現

另外 檢查job 估計是有定時任務在執行 而這任務很耗時

3樓:

oracle使用過程中的cpu高說明有資源消耗,你看看建立資料庫後,是否建立的有短時間內重新整理的物化檢視?而物化檢視的sql效能又比較低,也會造成cpu不穩定。再就是是否存在週期性的i/o問題?

i/o擁塞也會導致cpu高。

另外,關於你的sql的優化,首先考慮在where中不要使用子查詢,其次,看看執行計劃,只貼語句是很難進行調優的。

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

4樓:

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;

5樓:匿名使用者

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

oraclecpu佔用率高怎麼處理

6樓:匿名使用者

問題分析:

一般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資料庫伺服器cpu一直100%怎麼辦

7樓:

topas/top 看下是不是oracle程序佔用的cpu。

然後檢視下oracle資料庫中都在跑哪些語句。

多數都是效率較差的sql語句導致cpu使用率過高的,一般通過優化sql即可解決。

可用如下語句檢視哪些執行時間較長的sql:

select b.username,

b.sid,

a.sql_id,

a.sql_text,

a.sql_fulltext,

b.event,

a.executions,

-- trunc(((decode(a.executions,0,0,a.cpu_time / a.

executions)) / 10000)) c_time, ---單位零點秒

trunc(((decode(a.executions,0,0,a.elapsed_time / a.executions)) / 10000)) e_time,

--trunc(cpu_time/10000) cpu_time,

trunc(a.elapsed_time/10000) elapsed_time ,

a.disk_reads,

a.buffer_gets,

b.machine,

b.program

from v$sqlarea a, v$session b

where executions > =0

and b.status = 'active'

and a.sql_id = b.sql_id

-- and b.username='db_wtdz'

-- and trunc(((a.cpu_time / a.executions) / 1000000))>5

order by e_time desc

oracle佔用cpu過高 怎麼處理

8樓:匿名使用者

cpu過高,一般都是oracle語句爭用比較高,先生產awr報告,在awr報告中看哪些sql語句耗費的cpu或者記憶體最大,對於該sql語句進行分析原因,一般這種佔用cpu過高的sql語句都需要去優化下。

9樓:匿名使用者

這個沒辦法處理優化,只能是提高電腦配置,或者是換其他版本的oracle,建議使用10g。

解釋:oracle執行程式本身就比較佔記憶體,並且要啟動三個例項才可以執行,所以建議可以更換個大的記憶體條(最少4g),安裝64位系統。

備註:建議不用oracle的情況下可以把oracle的程序都停掉,減少記憶體佔用。

oracle佔用cpu高的問題 10

10樓:匿名使用者

問題描述:

今天上午10點多,公司網路斷了一會,過了大約十來分鐘,網工處理好了,可資料庫這下子可撐不住了,開啟linux top檢視了一下cpu百分百了,這可能是因為緩衝在客戶端的資料一下子全傳上來了導致資料庫壓力過大,可以前沒有出現過這種問題,於是進行了分析和處理,以下為處理過程:

問題分析:

一般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資料庫真是博大精深,好多問題還有待研究。

另外複合索引一定要匹配查詢的where條件,不然oracle不會走引索。

附:一般cpu佔用效高都是排序、sql解析和全表掃描。

sql資料庫和oracle資料庫string型別欄位用orderby排序分別是根據什麼排序的啊

首先說明下oracle中沒有string型別,而是varchar型別。order by 的順序是assic 讀作 阿斯科馬 碼錶中 字元 列進行排序的。解釋 一般會根據字串的首字母 大些字母 小寫字母 特殊字元 數字。如果首位相同繼續排列第二位,直到不同的位。sql資料和oracle資料庫都沒有st...

oracle資料庫問題,關於oracle資料庫匯出問題,錯誤如下

1 select ename,decode sign sal 1000 1,0,decode sign sal 2000 1,sal 0.1,decode sign sal 3000 1,sal 0.15,sal 0.2 sal from emp 2 select ename,case when s...

Oracle資料庫如何匯出

資料匯出具體如下 將資料庫test完全匯出,使用者名稱system 密碼manager 匯出到d daochu.dmp中。將資料庫中system使用者與sys使用者的表匯出。將資料庫中的表table1 table2匯出。將資料庫中的表table1中的欄位filed1以 00 打頭的資料匯出。將d d...