描述:数据库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')
相关推荐
创建数据库是使用MySQL的基本操作之一。 本文将详细介绍如何在MySQL中创建数据库,并对一些需要注意的事项进行解释。 创建数据库的命令 在MySQL中,我们使用CREATE DATABASE语句来创建数据库。基本的语法如下: CREATE DATABASE 数据库名称; 例如,如果我们想要创建一个名为”my_database”的数据库,我们可以执行以下命令: CREATE DATABASE m
背景 五一期间,我用前端三件套写一个自用的浏览器插件,后端程序用 nodejs,它会连接 MySQL8.0.33 数据库,3306 端口。这个数据库是跑在我的 vmware 虚拟机里的,它同时是我的实验环境,上面还利用多实例部署方式,跑了另外一个 MySQL5.7.39 的实例,运行在 3307 端口。 近期我家中经历了一次断电事件,导致我正在运行的 VMware 虚拟机随着主机一同断电。尽管我的
C Oracle Datasource是一种用于连接C程序与数据库Oracle的接口。这个接口能够让C程序与Oracle数据库进行交互,实现数据的读取和写入。 举个例子,一个电商网站的后台管理系统需要从Oracle数据库中读取商品信息,需要使用C Oracle Datasource来与数据库进行连接。通过该接口,网站管理员可以通过C程序对商品信息进行操作,实现商品信息的读取与写入。这样管理员就可以
一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件。 通过下面的命令结果可知,已经安装了innodb插件。 mysql show plugins; +------------+------- 一般情况下,mysql会默认提供多种存储引擎,可以通过下面的查看: 1)查看mysql是否安装了innodb插件。 通过下面的命令结果可知,已经安
MySQL是一种常用的关系型数据库管理系统,具有广泛的应用范围,其中一个重要的特性就是能够进行数值计算,并将计算结果作为条件使用。下面将介绍如何在MySQL中实现这一功能。 -- 假设有一个名为grades的表格,其中存储了学生们的成绩信息,包括学科名称和分数 -- 要求筛选出所有平均分数高于80分的科目名称 SELECT subject_name FROM grades GROUP BY sub
回到顶部