oracle進程CPU佔用太高

最近經常出現連接到oracle服務器非常的慢,就算是用sqlplus / as sysdba這產的登錄方式都很慢。

解決問題的過程:

1)查看服務器CPU使用情況

輸入top

會發現排在前面的都是oracle的進程,而且CPU佔用率都是50以上。

$ top
top - 16:28:41 up 4 days, 22:35,  1 user,  load average: 21.49, 22.14, 22.05
Tasks: 299 total,  31 running, 268 sleeping,   0 stopped,   0 zombie
Cpu(s): 79.2%us,  1.5%sy,  0.0%ni, 18.4%id,  0.8%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   7793040k total,  7659492k used,   133548k free,   165424k buffers
Swap: 10223608k total,   763068k used,  9460540k free,  4435980k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
29533 oracle    17   0 3291m  36m  26m R        98.9  0.5  98:36.33 oracle
 7825 oracle    17   0 3285m  30m  25m R         97.0  0.4 267:59.25 oracle
13527 oracle    17   0 3291m  36m  26m R        97.0  0.5 362:08.86 oracle
32000 oracle    17   0 3291m  36m  26m R        95.1  0.5 198:58.18 oracle

查出進程的作用

 ps -ef|grep 712
oracle     712     1  4 Sep02 ?        01:38:25 oracleuidorcl (LOCAL=NO)
root      2223  2171  0 16:36 pts/3    00:00:00 grep 712
oracle   17712     1  9 Aug31 ?        07:14:20 oracleuidorcl (LOCAL=NO)
oracle   27120     1  0 15:47 ?        00:00:01 oracleuidorcl (LOCAL=NO)
# ps -ef|grep 32000
root      2259  2171  0 16:37 pts/3    00:00:00 grep 32000
oracle   32000     1  5 Sep01 ?        03:19:37 oracleuidorcl (LOCAL=NO)
# ps -ef|grep 16447
root      2283  2171  0 16:37 pts/3    00:00:00 grep 16447
oracle   16447     1  9 Aug31 ?        07:15:57 oracleuidorcl (LOCAL=NO)
是用來做oracle連接的。
2)查出導致慢的原因

查進程執行的是什麼語句

sqlplus / as sysdba

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

輸入上面的進程ID:29533

SELECT TO_CHAR(current_timestamp AT TIME ZONE 'GMT', 'YYYY-MM-DD
 HH24:MI:SS TZD') AS curr_timestamp, COUNT(db_user) AS failed_co
unt FROM sys.dba_common_audit_trail WHERE action BETWEEN 100 AND
 102 AND returncode != 0 AND TO_CHAR(extended_timestamp, 'YYYY-M
M-DD HH24:MI:SS') >= TO_CHAR(current_timestamp - TO_DSINTERVAL('
0 0:30:00'), 'YYYY-MM-DD HH24:MI:SS')

發現,每個進程ID都是執行這條語句

 

後面羣上面問了一下,說是建議把審計功能關閉

3)關閉oracle審計,解決問題

查看audit模式

show parameter audit;

shutdown abort;

startup nomount;

alter ystem set audit_trail=none scope=spfile;

shutdown abort;

startup;

 

 刪除籤權數據,oracle用戶登錄到數據庫服務器:
truncate table SYS.AUD$;

附在羣上討論內容

陳建偉(66472309) 17:06:55 
大家好
我oracle開久了之後,oracle進程佔用率高,而且每秒都有新的進程執行下面的語句。
SELECT TO_CHAR(current_timestamp AT TIME ZONE 'GMT', 'YYYY-MM-DD
 HH24:MI:SS TZD') AS curr_timestamp, COUNT(db_user) AS failed_co
unt FROM sys.dba_common_audit_trail WHERE action BETWEEN 100 AND
 102 AND returncode != 0 AND TO_CHAR(extended_timestamp, 'YYYY-M
M-DD HH24:MI:SS') >= TO_CHAR(current_timestamp - TO_DSINTERVAL('
0 0:30:00'), 'YYYY-MM-DD HH24:MI:SS')

陳建偉(66472309) 17:07:01 
不知道是什麼原因?
 蕭雨(76232399) 17:09:27 
這個好像是審計的,可以關掉的吧
陳建偉(66472309) 17:09:40 
是嗎?
 蕭雨(76232399) 17:09:50 
不清楚
蟈蟈(52093188) 17:12:25 
你是oracle11g的版本吧
陳建偉(66472309) 17:12:34 

陳建偉(66472309) 17:12:39 
你很聰明,猜對了。
蟈蟈(52093188) 17:12:55 
還用猜啊,搞笑
陳建偉(66472309) 17:13:06 
呵呵
陳建偉(66472309) 17:13:09 
那要怎麼解決?
▓冷雲軒★ゞ(53847854) 17:13:41 
關掉
蟈蟈(52093188) 17:14:57 
嘿嘿,還專門調過參數啊
陳建偉(66472309) 17:15:17 
是啊
蟈蟈(52093188) 17:15:21 
爲啥啊
 蕭雨(76232399) 17:15:33 
是呀,爲啥呀
YINBL(290731945) 17:17:21 
scope=spfile
陳建偉(66472309) 17:17:51 
哦。
陳建偉(66472309) 17:17:52 
好的
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章