最近經常出現連接配接到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
7825oracle 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 好的