一、数据库环境
OS: Linux 2.6.32-754.12.1.el6.x86_64 #1 SMP Tue Apr 9 14:52:26 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux DB: 11.2.0.4.0
二、逻辑备份脚本
$ cat /home/oracle/expdp/expbak.sh . ~/.bash_profile cd /oracle/expdp v_date=`date '+%Y%m%d'` mkdir $v_date echo "**************"$v_date" Backup begin **************" >>expbak.log v_begin_date=`date '+%T'` expdp \"\/ as sysdba\" directory=dump dumpfile=devdb_$v_date.dmp logfile=devdb_$v_date.log schemas=USER1,USER2,TESTUSER,USERLOCAL,USER4,USERQAS,USER5,USER6,USERDEV,APPUSER compression=all mv devdb_$v_date* $v_date/ find /oracle/expdp/ -type f -mtime +14 -exec rm -fr {} \; echo "**************"$v_date" Backup end **************" >>expbak.log
三、逻辑备份速度的异常缓慢
由于此开发数据库库一直由开发人员自己维护,从日志中抓取,每天的逻辑备份也成功完成并未出错,所以,一直并没有人关注它的耗时。从备份日志以及实际的dump文件大小来看,备份耗时约 85分钟,但实际的dump大小仅 2 GB。
附:备份日志的部分内容
$ tail -100 expdat.log
……
**************20221119 Backup begin **************
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Sat Nov 19 07:39:43 2022 elapsed 0 01:25:36
**************20221119 Backup end **************
**************20221120 Backup begin **************
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Sun Nov 20 07:40:27 2022 elapsed 0 01:26:21
**************20221120 Backup end **************
**************20221121 Backup begin **************
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Mon Nov 21 07:38:23 2022 elapsed 0 01:24:17
**************20221121 Backup end **************
**************20221122 Backup begin **************
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Tue Nov 22 07:39:36 2022 elapsed 0 01:25:30
**************20221122 Backup end **************
**************20221123 Backup begin **************
Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Wed Nov 23 07:39:30 2022 elapsed 0 01:25:23
**************20221123 Backup end **************
四、分析排查
根据等待事件分析,在逻辑备份期间频繁出现”Streams AQ: Enqueue Blocked On Low Memory" 。通过 官方support检查,发现Doc ID 2469587.1 文档中介绍的场景与此案例比较吻合。 描述如下: 由于频繁等待 ”Streams AQ: Enqueue Blocked On Low Memory" 而导致Datapump Expdp或Impdp变慢 (Doc ID 2469587.1)”对该等待事件有描述: 因 Datapump导出和导入(expdp和impdp)可能会遇到突然严重的性能问题,因为DW和DM进程经常等待 “StreamsAQ: enqueue blocked on low memory”。
五、解决方案
根据 Doc ID 2469587.1 中介绍的办法,依照以下步骤处置: 1、查询是否出现“回缩”现象 SQL> select shrink_phase_knlasg from X$KNLASG; SHRINK_PHASE_KNLASG ------------------- 1 2、使用事件修复“回缩”标志失败的BUG SQL> alter system set events 'immediate trace name mman_create_def_request level 6'; System altered. 3、再次查询 SQL> select shrink_phase_knlasg from X$KNLASG; SHRINK_PHASE_KNLASG ------------------- 0
六、再次运行逻辑备份脚本
日志如下(摘录): **************20221124 Backup begin ************** Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Nov 24 15:37:56 2022 elapsed 0 00:06:29 **************20221124 Backup end ************** 脚本耗时由 85分钟 减少到 6分29秒,速度改进约 14倍 。
