Oracle数据泵expdp遭遇Streams AQ: Enqueue Blocked On Low Memory等待事件
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Oracle数据泵expdp遭遇Streams AQ: Enqueue Blocked On Low Memory等待事件,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3409字,纯文字阅读大概需要5分钟。
内容图文
Oracle数据泵expdp遭遇Streams AQ: Enqueue Blocked On Low Memory等待事件
版本:11.2.0.4.0
PSU+OJVM:11.2.0.4.201020
对数据库使用expdp做全库导出时,发现异常的慢。
每张小表的导出都要隔个几秒才会继续导出下一张表。
查看数据泵会话的等待事件信息如下:
10:00:51 SYS@test(586)>/ SID SERIAL# EVENT SADDR PROGRAM USERNAME STATUS SQL_ID SQL_FULLTEXT ---------- ---------- ------------------------------------------ ---------------- --------------------- ---------- --------- ---------------- -------------------------------------------------------52656831 Streams AQ: enqueue blocked on low memory 00000000F6804560 oracle@testdb (DM00) SYS ACTIVE 87nt40c5wj7y5 BEGIN sys.kupc$que_int.put_status(:1, :2, :3); END; 58319087 Streams AQ: enqueue blocked on low memory 00000000F6756380 oracle@testdb (DW00) SYS ACTIVE 8rgw5q94paqsg BEGIN sys.kupc$que_int.send(:1, :2, :3); END; Elapsed: 00:00:00.00
查看当前steam pool的值,发现并不小。
14:50:09 SYS@test(1091)>select COMPONENT,CURRENT_SIZE/1024/1024 CURRENT_SIZE_MB from V$SGA_DYNAMIC_COMPONENTS where COMPONENT=‘streams pool‘; COMPONENT CURRENT_SIZE_MB -------------------------------------------------- --------------- streams pool 128 Elapsed: 00:00:00.01
搜索mos,根据由于频繁等待 ”Streams AQ: Enqueue Blocked On Low Memory" 而导致Datapump Expdp或Impdp变慢 (文档 ID 2469587.1),
症状
Datapump导出和导入(expdp和impdp)可能会遇到突然严重的性能问题,因为DW和DM进程经常等待 "StreamsAQ: enqueue blocked on low memory"。
以下是expdp logtime = all命令的示例症状。 (logtime 参数在 12.1 及以上版本可用)
导出空分区表需要0-3秒才能导出每个分区,而正常时通常需要不到一秒的时间。
11-APR-18 18:02:26.726: Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
11-APR-18 18:02:37.672: . . exported "<SCHEMA_NAME>"."<TABLE_NAME>":"<PART_NAME1>" 0 KB 0 rows
11-APR-18 18:02:40.677: . . exported "<SCHEMA_NAME>"."<TABLE_NAME>":"<PART_NAME2>" 0 KB 0 rows
11-APR-18 18:02:42.686: . . exported "<SCHEMA_NAME>"."<TABLE_NAME>":"<PART_NAME3>" 0 KB 0 rows
11-APR-18 18:02:45.699: . . exported "<SCHEMA_NAME>"."<TABLE_NAME>":"<PART_NAME4>" 0 KB 0 rows
11-APR-18 18:02:48.702: . . exported "<SCHEMA_NAME>"."<TABLE_NAME>":"<PART_NAME5>" 0 KB 0 rows
11-APR-18 18:02:50.712: . . exported "<SCHEMA_NAME>"."<TABLE_NAME>":"<PART_NAME6>" 0 KB 0 rows
11-APR-18 18:02:53.724: . . exported "<SCHEMA_NAME>"."<TABLE_NAME>":"<PART_NAME7>" 0 KB 0 rows
更改
在Auto SGA环境(设置了sga_target或memory_target)下,当 buffer cache 负载较高并且 streams pool 中的内存正被移动到 buffer cache 时,可能会发生此问题。
如果遇到类似的性能问题时,请检查以下查询是否一直返回“1”。该值表示 streams pool 处于收缩阶段。当 streams pool 完成收缩时,该值应返回“0”,但如果它一直返回“1”,则您可能遇到此问题。
SQL> select shrink_phase_knlasg from X$KNLASG;
SHRINK_PHASE_KNLASG
-------------------
1
原因
即使 streams pool 已经结束收缩,该标志也没有被修改,这导致各种 stream pool 操作(例如数据泵的内部操作)等待 "StreamsAQ: enqueue blocked on low memory"。
该问题是由于Bug 27634991引起的,在版本19.1及更高版本中修复了该问题。
解决方案
如果由于“StreamsAQ: enqueue blocked on low memory”等待事件导致expdp / impdp命令出现严重性能问题,并且X$KNLASG.SHRINK_PHASE_KNLASG 列保持返回1并持续几分钟,则从sqlplus运行以下命令强制streams pool缩小完成。
connect / as sysdba
alter system set events ‘immediate trace name mman_create_def_request level 6‘;
可以应用Patch 27634991以防止发生此问题。
根据mos,查看我自己的环境:
14:52:16 SYS@test(1091)>select shrink_phase_knlasg from X$KNLASG; SHRINK_PHASE_KNLASG -------------------1 Elapsed: 00:00:00.01
根据建议执行"alter system set events ‘immediate trace name mman_create_def_request level 6‘;"后,expdp的日志刷刷比原来快了不少。
原文:https://www.cnblogs.com/PiscesCanon/p/14954473.html
内容总结
以上是互联网集市为您收集整理的Oracle数据泵expdp遭遇Streams AQ: Enqueue Blocked On Low Memory等待事件全部内容,希望文章能够帮你解决Oracle数据泵expdp遭遇Streams AQ: Enqueue Blocked On Low Memory等待事件所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。