問題現象
1. EM報錯
通過em13c監控,系統發出以下報錯:
2. 檢查相關告警日誌
通過em的告警“題目”,已經給出了去查看那個告警日誌了 (注意最後的目錄不要進alert,而且trace目錄,查看告警日誌)
,再根據時間進行定位,還是很準的。
Sun Jun 07 06:00:27 2020
DBMS_STATS: GATHER_STATS_JOB encountered errors. Check the trace file.
Errors in file /u01/oracle/diag/rdbms/fwsdb/fwsdb2/trace/fwsdb2_j000_18498.trc:
ORA-20011: Approximate NDV failed: ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
error opening file /home/oracle/var/ftp/oracle_external/CS_BATCH_OFFER_TEMP14506_18498.log
Sun Jun 07 07:10:33 2020
Process 0x0x541217aa8 appears to be hung in Auto SQL Tuning task
Current time = 1591485033, process death time = 1591485007
Attempting to kill process 0x0x541217aa8 with OS pid = 18502
OSD kill succeeded for process 0x541217aa8
初步分析:
- 第一個時間
DBMS_STATS: GATHER_STATS_JOB
--> 這是系統內部收集統計信息的任務 - 第二個時間
Auto SQL Tuning task
--> 還是關於收集統計信息的任務。這裏是SQL調優任務
初步判斷
報錯與 收集統計信息的任務 有關。
進一步確認
查看系統自動維護任務
Oracle 9i之後,數據庫存在有三個預定義自動維護任務,分別是:
- Automatic Optimizer Statistics Collection(自動優化器統計信息收集);
- AutomaticSegment Advisor(自動段指導);
- Automatic SQL Tuning Advisor(自動 SQL 優化指導)。
SELECT client_name,
task_name,
task_target_type,
last_try_result,
operation_name,
status,
current_job_name,
job_scheduler_status,
retry_count,
last_good_date,
last_good_duration,
last_try_date,
last_try_duration
FROM dba_autotask_task;
可以看到sql tuning advisor 任務最後的狀態是 STOP
。與我們之前看到的報錯相吻合。
那麼它爲什麼“被STOP”了呢? 主要說下Oracle自動收集統計信息的任務了。我在後邊在贅述吧。簡單的來說就是,他的時間太長了,Oracle覺得還是不要影響系統的正常使用,你就別跑了,停下來吧。
查看時間限制
SELECT task_name, parameter_name, parameter_value, description
FROM dba_advisor_parameters
WHERE parameter_name LIKE '%TIME_LIMIT'
AND task_name = 'SYS_AUTO_SQL_TUNING_TASK';
解決辦法
OK。好了。我們之前的猜測被證實了。的確就是這麼個問題。那麼如何解決呢?
- 既然有時間限制,那麼我們給他重複的時間唄。
- 乾脆點兒的,既然你跑的那麼慢,emmm 那就別辛苦跑了。
關閉任務
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'sql tuning advisor',
operation => NULL,
window_name => NULL);
END;
/----------------------------以下爲附加信息,建議關閉自動sql調優,而不是修改時間----------------
開啓任務
BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'sql tuning advisor',
operation => NULL,
window_name => NULL);
END;
/
調整時間語句:
dbms_sqltune.set_tuning_task_parameter('SYS_AUTO_SQL_TUNING_TASK','TIME_LIMIT',7200);
贅述部分
自動sql優化,根據AWR的統計信息,針對產生較大性能影響的SQl運行SQl優化顧問(SQL Tuning Advisor)。AWR的統計信息用來生成一個SQL語句列表並根據它們過去一週對系統性能的影響進行排序,這個SQL列表會自動排除所有被斷定爲不太容易優化的SQL語句,比如並行查詢、DML、DDL和任何由併發問題引起的性能問題。SQL優化顧問生成優化SQL的建議,建議中可能生成SQL配置文件(profile)。當建議使用SQL配置文件的時候,這些配置文件會進行性能測試,如果測試結果顯示至少有三倍的改進,並且SQL優化任務參數ACCEPT_SQL_PROFILES設置爲true,這個建議就會被接受;如果ACCEPT_SQL_PROFILES被設置爲false,這個建議會被報告。
默認的ACCEPT_SQL_PROFILES設置爲false,而且可以根據任何查詢,單獨執行SQl優化顧問。建議關閉這個性能。