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

文章目录

  • 问题现象
    • 1. EM报错
    • 2. 检查相关告警日志
    • 初步判断
  • 进一步确认
    • 查看系统自动维护任务
    • 查看时间限制
  • 解决办法
  • 赘述部分

问题现象

1. EM报错

通过em13c监控,系统发出以下报错:
EM : Process XXX appears to be hung in Auto SQL Tuning task_第1张图片

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优化顾问。建议关闭这个性能。

你可能感兴趣的:(Oracle,oracle)