Oracle效能問題診斷一例

來源:互聯網
上載者:User

今天一開啟資料庫,我還什麼事情都沒做,就發現硬碟燈狂轉。這是為啥?初步判定是Oracle的計劃任務在運行,但是哪個在運行,還不知道。

所以,第一步先判斷後台在跑什麼東西:
select * from v$session_longops where sofar <> totalwork

從這個可以瞭解到大部分資訊,包括:
1、session資訊:sid,serial#
2、執行內容:target_desc
3、執行進度:sofar/totalwork
4、開始時間:start_time
5、執行使用者:username
6、sql資訊:sql_id,sql_address,sql_hash_value

根據以上內容,其實我就已經可以強制停止這個的sql了,但是還得找出這個源頭,也就是“責任人”--誰執行了這個sql。

於是,第二個步驟就是根據上面的第五點:執行使用者,去找該使用者下對應的計劃任務或job:

1、job:
select * from user_jobs
2、計劃任務:
select * from user_scheduler_jobs;

從這裡我知道了發起人及具體發起的那個執行點。
接下來的事情就簡單了,先確認下這個定時處理的是什麼內容,如果沒有用或對當前環境無關緊要,則關閉job或計劃任務:
exec dbms_job.broken(21,true);

exec dbms_scheduler.disable('AUTO_SPACE_ADVISOR_JOB');--這是例子

當然,有時候不是直接關閉就行了,還得看下為何會產生這麼大的磁碟掃描。這個時候就要去看sql的執行計畫,搞清原因,然後對其最佳化。這次我本地產生這個問題的原因其實很簡單,因為匯入dmp的時候沒有指定索引,索引幕後處理的時候都是走的全表掃描,導致出現這個情況。

最後,關閉之後,還有做一件事情,就是把正在執行的過程停止掉:
alter system kill session 'sid,serial#'

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.