EM : Process XXX appears to be hung in Auto SQL Tuning task

問題現象

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

初步分析:

  1. 第一個時間 DBMS_STATS: GATHER_STATS_JOB --> 這是系統內部收集統計信息的任務
  2. 第二個時間 Auto SQL Tuning task --> 還是關於收集統計信息的任務。這裏是SQL調優任務

初步判斷

報錯與 收集統計信息的任務 有關。

進一步確認

查看系統自動維護任務

Oracle 9i之後,數據庫存在有三個預定義自動維護任務,分別是:

  1. Automatic Optimizer Statistics Collection(自動優化器統計信息收集);
  2. AutomaticSegment Advisor(自動段指導);
  3. 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。好了。我們之前的猜測被證實了。的確就是這麼個問題。那麼如何解決呢?

  1. 既然有時間限制,那麼我們給他重複的時間唄。
  2. 乾脆點兒的,既然你跑的那麼慢,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優化顧問。建議關閉這個性能。

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