Oracle

Oracle 10g 打更新檔後查詢很慢,CPU 使用率很高

  • November 12, 2014

因此,由於穩定性問題(在某些系統下,實例會在高負載下隨機凍結的已知問題),我最近按照 Oracle 支持的建議將 Oracle 數據庫 10g 從 10.2.0.3.0 更新到 10.2.0.4.0。

應用更新檔後,穩定性問題消失了,但查詢速度慢了很多,因為表上有持續的 FULL SCANS,即使我重新計算了所有模式中所有表的統計資訊並且索引顯然沒問題。我還將優化器版本值設置為前一個(Oracle 支持也建議這樣做),但到目前為止還沒有改進。

對此有什麼想法嗎?

最後,看起來問題是由優化不佳的 SQL 引起的。此外,似乎該實例僅在這些成本低於索引掃描成本時才進行全面掃描,所以一切顯然都很好。

我執行以下 sql 來安排一個作業,每 2 小時在陳舊的表上執行一次統計資訊。這可以防止很多 sql 查詢在 10g 和 11g 中出錯。如果表沒有超過 10% 的行被修改,那麼統計資訊的執行將被跳過,直到 10% 或更多的行被修改。

-- YOu must commit when you are finished to add the line to sys.job$/dba_jobs
-- You must run this as sys to get the jobs to run as sys to get the correct path to run the job
variable jobno number;
variable instno number;
begin
 select max(job)+1 into :jobno from dba_jobs;
 select instance_number into :instno from v$instance;
 dbms_job.submit(:jobno,
'dbms_stats.gather_database_stats(options=>''gather stale'',estimate_percent=>100,degree=>4,cascade=>true);',
trunc(sysdate)+15/24, 'sysdate+2/24',
TRUE, :instno);
end;
/
commit;

引用自:https://serverfault.com/questions/383557