本文主要是介绍expdp突然变非常慢,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
检查日志expdp日志,发现已经表都已经基本上导出完成,都是0 KB 0 rows,就没是导出完成的标识。检查dba_datapump_jobs发现expdp任务还在执行中。
检查v$session,发现存在等待事件“Streams AQ: Enqueue Blocked On Low Memory”
检查mos关于该等待事件:
Bug 17365043 - Session hangs on "Streams AQ: enqueue blocked on low memory" (Doc ID 17365043.8)
该文中说当发生该事件时,尝试去收缩STREAMS_POOL_SIZE就会hang住,也就是STREAMS_POOL_SIZE初始化一个较大的值,避免该池做收缩操作导致该堵塞,这是一个bug造成。
另外,由于频繁等待 ”Streams AQ: Enqueue Blocked On Low Memory" 而导致Datapump Expdp或Impdp变慢 (Doc ID 2469587.1)
提供了该事件堵塞发生的处理方式:
在Auto SGA环境(设置了sga_target或memory_target)下,当 buffer cache 负载较高并且 streams pool 中的内存正被移动到 buffer cache 时,可能会发生此问题。
如果遇到类似的性能问题时,请检查以下查询是否一直返回“1”。该值表示 streams pool 处于收缩阶段。当 streams pool 完成收缩时,该值应返回“0”,但如果它一直返回“1”,则您可能遇到此问题。也就是当遇到Bug 27634991在streams pool 完成收缩时,有可能还是“1”
select shrink_phase_knlasg from 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以防止发生此问题。
这篇关于expdp突然变非常慢的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!