sql Tuning Advisor启用导致业务性能问题

数据库每天晚上10点后业务性能很卡,大量的insert被堵塞,查询等待事件发现有大量的“library cache lock”和“cursor: pin S wait on X”。

22:00数据库的统计信息开始收集, Sql Tuning Advisor堵塞了统计信息的收集,等待事件是“library cache lock”,Sql Tuning Advisor的等待事件是ON CUP。后续导致insert大量堵塞。

查询ash记录:

select sample_time,
       instance_number,
       session_id,
       session_serial#,
       sql_id,
       top_level_sql_id,
       sql_opname,
       sql_exec_id,
       sql_exec_start,
       event,
       session_state,
       seq#,
       blocking_session,
       blocking_session_serial#,
       blocking_inst_id,
       p1text,
       p1,
       p2text,
       p2,
       p3text,
       p3,
       top_level_call_name,
       program,
       in_hard_parse
  from dba_hist_active_sess_history
 where sample_time >
       to_date('2024-03-20 22:00:00', 'yyyy-MM-dd HH24:mi:ss')
   and sample_time <
       to_date('2024-03-20 22:20:00', 'yyyy-MM-dd HH24:mi:ss')
   and event = 'library cache lock'
 order by sample_time;

检查等待事件:

sql_id:b6usrg82hwsa3,正在执行统计信息收集,dbms_stats.gather_database_stats_job_proc ( )

查看业务卡顿时的blocking_session,主要发生在dbms_sqltune.execute_tuning_task('SYS_AUTO_SQL_TUNING_TASK')

11g之后 的三个自动job

除了收集统计信息有必要保留之外,另外两个其实用处不大,SQL tuning advisor虽然可以帮助我们诊断、分析和优化SQL语句的性能问题,但也只是收集。

所以可以禁用:

exec DBMS_AUTO_TASK_ADMIN.disable(client_name=>'sql tuning advisor',operation=>NULL,window_name=>NULL);

exec DBMS_AUTO_TASK_ADMIN.disable(client_name=>'auto space advisor',operation=>NULL,window_name=>NULL);

官方文档里也有提到这可能是个bug:

ORA 7445 [qcuatc] from SQL Tuning Advisor job. (Doc ID 2506947.1)


请使用浏览器的分享功能分享到微信等