oracle資料庫CPU特別高的解決方法
system
表空間100%,導致資料庫無法訪問
系統表空間正常情況下只存放了資料字典之類的東西,所以佔用的空間一般在500M以下。如果你的系統表空間佔用比較多的空間,可能有以下幾方面的原因:1)沒有為使用者明確指定預設表空間,導致system
系統表空間作為使用者預設表空間2)開啟了審計,請檢查此表的大小AUD$
你可以執行以下查詢來檢查一下系統表空間哪些表比較大:
SQL> select * from (select SEGMENT_NAME,sum(bytes)/1024/1024 sx
from dba_segments
where tablespace_name='SYSTEM' group by segment_name)
where sx>100 order by sx desc;
檢視該表紀錄數
select count(*) sum from AUD$;
解決方法大概可分為以下幾種:一、為system
表空間另外新增一個資料檔案。
alter tablespace system add datafile 'D:\oracleXE\oradata\XE\system_01.dbf' resize 1024M;
二、更改system
表空間的資料檔案SYSTEM.dbf
分配空間。
alter database datafile 'D:\oracleXE\oradata\XE\system_01.dbf' autoextend on;
alter database datafile 'D:\oracleXE\oradata\XE\system_01.dbf' resize 1024M;
三、truncate
掉AUD$
表並關閉審計功能(我是使用的這種,效果立竿見影,不過如果不關閉此功能, 需要定期清理此表):
SQL> alter system set audit_trail=none scope=spfile;
SQL>showdown immediate;
SQL>startup;
四、將AUD$
預設表空間由system
移出。
如何用sql 語句查詢出oracle的cpu使用率
select * from (select sql_text,sql_id,cpu_time from v$sql order by cpu_time desc) where rownum<=10 order by rownum asc ;
select * from (select sql_text,sql_id,cpu_time from v$sqlarea order by cpu_time desc) where rownum<=10 order by rownum asc ;
這2個語句效果基本一樣,一個從v$sql
檢視查詢一個從v$sqlarea
檢視查詢。
列出使用頻率最高的5個查詢:
select sql_text,executionsfrom (select sql_text,executions, rank()
over (order by executions desc) exec_rank from v$sql)where exec_rank <=5;
消耗磁碟讀取最多的sql top5:
select disk_reads,sql_textfrom (select sql_text,disk_reads, dense_rank()
over (order by disk_reads desc) disk_reads_rank from v$sql)
where disk_reads_rank <=5;
找出需要大量緩衝讀取(邏輯讀)操作的查詢:
select buffer_gets,sql_textfrom (select sql_text,buffer_gets, dense_rank()
over (order by buffer_gets desc) buffer_gets_rank from v$sql)
where buffer_gets_rank<=5;
1,使用Linux系統top命令查出佔用cpu最高的程式
2,在sqlplus中執行如下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 =(SELECT addr FROM v$process c WHERE c.spid = '&pid'))ORDER BY piece ASC
其中&pid
是使用top 檢視系統中程式佔用CPU極高的PID找到SQL語句進行相應的調整優化
3,分析找到的sql語句,如檢視sql執行計劃。
######查詢結果集輸出到一個檔案裡面
set trimspool on
set linesize 120
set pagesize 2000
set newpage 1
set heading off
set term off
spool d:\slow_info.txt
select sql_text,executionsfrom (select sql_text,executions, rank() over (order by executions desc) exec_rank
from v$sql)where exec_rank <=5;
spool off
查出問題的sql會話sid,並進行封殺操作
select sid, serial#, sql_text, executions
from v$sql join v$session
on v$sql.sql_id = v$session.sql_id
where cpu_time > 20000;
##########查出問題的SQL執行殺程式操作:執行以下語句殺死
alter system kill session 'sid,serial#';
相關文章
- 資料庫別名已存在的解決方法資料庫
- 資料庫高併發解決方法總結資料庫
- oracle資料庫cpu佔用居高不下的解決辦法Oracle資料庫
- Oracle 資料庫連線錯誤解決方法Oracle資料庫
- ORACLE資料庫降低高水位線方法Oracle資料庫
- Oracle資料庫配置錯誤資訊解決方法(轉)Oracle資料庫
- MSDB資料庫置疑的解決方法資料庫
- 解決資料庫慢的方法論資料庫
- 資料庫cpu高處理一則資料庫
- Oracle 資料庫隔離級別,特性,問題和解決方法Oracle資料庫
- 【NUMBER】Oracle的NUMBER資料型別特點Oracle資料型別
- oracle 程式滿了,登陸不上資料庫的解決方法Oracle資料庫
- 解決Oracle資料庫死鎖Oracle資料庫
- Oracle資料表死鎖的解決方法Oracle
- win10解決antimalware service executable cpu佔用率高的方法Win10
- MySQL資料庫SYS CPU高的可能性分析MySql資料庫
- 執行ORACLE資料庫的AIX Kernel CPU使用率高達40%的排查Oracle資料庫AI
- Kettle8.2連線Oracle資料庫失敗解決方法Oracle資料庫
- SQL Server置疑資料庫解決方法SQLServer資料庫
- 總結導致oracle資料庫主機CPU sys%高的一些原因Oracle資料庫
- rundll32.exe程式佔用率CPU高的原因及解決方法
- clone oracle資料庫的方法Oracle資料庫
- 幾道特別難搞的資料庫面試題資料庫面試題
- Oracle 11g 資料庫伺服器CPU、IO負載高的故障排除流程Oracle資料庫伺服器負載
- MSSQL資料庫超時的原因與解決方法SQL資料庫
- 用javascript連線資料庫的解決方法 (轉)JavaScript資料庫
- Oracle核心資料庫由於大量的latch free導致CPU資源耗盡的現場解決過程Oracle資料庫
- CPU資源佔用100%怎麼辦?cpu佔用率高的解決辦法
- CPU挖礦病毒解決方法
- Oracle 估算資料庫大小的方法Oracle資料庫
- 建立資料庫時“Insufficient privileges”的解決方法DK資料庫
- hibernate資料庫預設值更好的解決方法資料庫
- SQL Server裡附加資料庫出錯的解決方法SQLServer資料庫
- 資料庫連線失敗的原因及解決方法資料庫
- 資料庫連線錯誤的原因及解決方法資料庫
- oracle 資料庫解決問題思路總結Oracle資料庫
- oracle資料庫:耗cpu sql語句優化Oracle資料庫SQL優化
- sqlplus連線Linux本機的Oracle資料庫亂碼的解決方法SQLLinuxOracle資料庫