Streams Pool过小导致expdp导出变慢

0    49    1

Tags:

👉 本文共约1434个字,系统预计阅读时间或需6分钟。

前言

近期处理了一起expdp导出时间变长的问题,在数据量没有较大增长的情况下,expdp导出时间发生倍数增长,后面分析发现是由于Bug 27634991导致在AMM,ASMM模式下,由于streams pool内存抖动触发了内存收缩,内存收缩的过程中会堵塞Streams Pool内存池里面的操作,导致expdp导出时间变长。

版本:

Oracle版本:11.2.0.4

问题

expdp导出时间变长,3月14号的备份数据为83.57GB ,时间6分钟

图片

图片

3 月15号的备份数据为83.86GB 时间为46分钟

图片

图片

问题原因:

Bug 27634991导致在AMM,ASMM模式下,由于streams pool内存抖动触发了内存收缩,内存收缩的过程中会堵塞Streams Pool内存池里面的操作,导致expdp导出时间变长。

问题分析:

查看数据库的alert日志,没有发现报错

图片

查看expdp导出dm,dw进程的运行状态以及等待时间,期间出现大量的等待Streams AQ: enqueue blocked on low memory,Streams Pool队列操作出现等待

图片

查看Streams Pool 的历史使用情况,在3月15号导出期间,Streams Pool 发生内存收缩,这说明expdp导出期间存在Streams Pool内存抖动的情况

图片

在官方文档Bug 27634991 - Datapump Frequently Waits On 'Streams AQ: enqueue blocked on low memory' (Doc ID 27634991.8),我们查到了在Oracle11.2.0.4,12.1,12.2,18版本下,Bug 27634991会导致在AMM,ASMM模式下,由于streams pool内存抖动触发进行内存收缩,内存收缩的过程中会堵塞Streams Pool内存池里面的操作,导致expdp导出时间变长

图片

图片

可以通过查询查Streams Pool 是否存在收缩状态,来确认是否遇到该问题

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

查询当前的Streams Pool 收缩状态为1,结合当前数据库的版本11.2.0.4以及发生的现象,我们可以确认问题命中了Bug 27634991,在AMM,ASMM模式下,由于streams pool内存抖动触发了内存收缩,内存收缩的过程中会堵塞Streams Pool内存池里面的操作,导致expdp导出时间变长。

图片

问题修复

1 应用补丁27634991,修复bug问题

2 手动强制完成Streams Pool 内存池空间收缩,临时规避该问题

alter system set events 'immediate trace name mman_create_def_request level 6';

3 调整Streams Pool的大小避免出现内存抖动,将内存256M调整为512M

参考

https://mp.weixin.qq.com/s/9Nraa-To6AK2CBFEh8-F8g

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

20 − 11 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部