描述:数据库xtts迁移后,通过该命令EXEC DBMS_STATS.gather_database_stats(degree => 16);收集全库的统计信息,执行上之后就没再看,但是到了第二天
发现数据库的相关收集作业还在执行,比较奇怪。
然后,查询了数据库的相关阻塞和阻塞进程的相关event发现了一个比较奇怪的阻塞。streams aq: waiting for messages in the queue
后续手动测试发现只收集一个表的统计信息也是很慢,然后我杀掉了阻塞的会话,不开并行收集,能很快收集完毕。
怀疑碰到了bug
检查mos上的相关bug和文档发现如下资料:
Bug 33764919 - stats collection stuck on 'streams aq: waiting for messages in the queue' (Doc ID 33764919.8)
Concurrent DBMS_STATS Is Hanged By 'Streams AQ: waiting for messages in the queue' (Doc ID 2727024.1)
Bug 32114729 : CONCURRENT DBMS_STATS IS HANGGED BY 'STREAMS AQ: WAITING FOR MESSAGES IN THE QUEUE'
解决办法:
exec dbms_stats.set_global_prefs('CONCURRENT','FALSE');
#######################################################################################################################
Version 19.3.0.0.0 and later
DBMS_STATS is hanged if current_user is changed before executing DBMS_STATS.
ex)
connect /as sysdba
alter session set current_schema=;
BEGIN DBMS_STATS.GATHER_TABLE_STATS(
ownname => '',
tabname => '
',
estimate_percent => '10',
granularity => 'AUTO',
cascade => TRUE,
force => TRUE );
END;
A preference CONCURRENT is ALL and the concurrent stats is enabled.
SQL> select DBMS_STATS.GET_PREFS('CONCURRENT') from dual;
DBMS_STATS.GET_PREFS('CONCURRENT')
--------------------------------------------------------------------------------
ALL
When the issue is occurring, a session is waiting for 'Streams AQ: waiting for messages in the queue'.
WAIT #140497090265352: nam='Streams AQ: waiting for messages in the queue'
Workaround
Disable concurrent stats gathering.
exec dbms_stats.set_global_prefs('CONCURRENT','FALSE')
相关推荐
执行普通SQL语句 应用程序通过执行SQL语句来操作数据库的数据(不用传递参数的语句),需要按以下步骤执行: 调用Connection的createStatement方法创建语句对象。 Connection conn = DriverManager.getConnection("url","user","password"); Statement stmt = conn.createStateme
在MySQL中计算时间差需要用到DATEDIFF函数,它可以将两个日期之间的天数计算出来。 SELECT DATEDIFF(date1, date2) as diff_days FROM mytable; 其中,date1和date2是要计算的日期,diff_days是两个日期之间的天数差。 如果要计算当前时间与指定日期之间的天数差,则可以使用NOW()函数代替其中一个日期: SELECT DAT
Mybatis与Oracle是常用的开发工具和数据库之一。日期在开发中经常用到,然而在Mybatis操作Oracle的日期数据类型时,需要注意一些问题。 Oracle中日期数据类型有两种:DATE和TIMESTAMP。其中,DATE存储精度为秒,TIMESTAMP存储精度为纳秒。在Java中,对应的日期类型为java.util.Date和java.sql.Timestamp。 在Mybatis操作
查询方法:1、使用“SELECT * FROM all_tables WHERE OWNER = 用户名”语句,可查询指定用户的所有表名;2、使用“SELECT * FROM user_tables”语句,可查询当前用户的所有表名。 本教程操作环境: 查询方法:1、使用“SELECT * FROM all_tables WHERE OWNER = '用户名'”语句,可查询指定用户的所有表名;2、使
前情回顾 MySQL 8.4.0 LTS 变更解析:源码编译(类库变更)和密码插件 MySQL 8.4.0 LTS 变更解析:MySQL 的复制与组复制 MySQL 8.4.0 LTS 变更解析:I_S 表、权限、关键字和客户端 MySQL 8.4.0 LTS 已经发布 ,作为发版模型变更后的第一个长期支持版本,注定要承担未来生产环境的重任,那么这个版本都有哪些新特性、变更,接下来少安将带大家一起
回到顶部