暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

expdp导出卡住不动案例分析

原创 Root__Liu 2022-06-24
5975

数据泵在导入导出的时候,可能会遇到卡主、半天没反应、不返回输出结果等情况,这个时候要考虑的点如下:

  • 归档是否满了
  • redo是否不够用
  • 异常等待事件
  • 表空间、磁盘空间、文件系统是否满了
  • 统计信息

如下两则遇到的问题处理案例。

一、异常等待事件导致卡住

发现等待事件,通过堵塞链分析,最终堵塞原是以下等待事件

Streams AQ: Enqueue Blocked On Low Memory
复制

原因:

当数据库内存使用ASMM或者AMM内存管理时,如果此时的buffer cache负载较高,并且streams poll中的内存正被转移到buffer cache时,可能会发生此问题。
可以通过以下命令检查:

SQL> select shrink_phase_knlasg from X$KNLASG;
SHRINK_PHASE_KNLASG
-------------------
1
复制

shrink_phase_knlasg自动表名streams pool在收缩,当streams pool收缩完成后,该字段返回0,如果一直返回1,那么可能就会导致上述等待事件的发生。

处理:

将返回值持续为1的时候,强制缩小streams pool:

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

注:
即使streams pool已经收缩结束,该标志也可能被修改,所以该等待事件一直存在,这是一个官方bug,需要补丁27634991来修复。19C已修复。

参考:Datapump Expdp Or Impdp Slowdown Due To Frequent Waits On ”Streams AQ: Enqueue Blocked On Low Memory" (Doc ID 2386566.1)

二、僵尸dump进程导致卡住

在执行expdp时,若出现如下信息,一直卡住,不报错也不中断,告警日志也未见异常,也没有异常等待事件,持续长时间,可能是由于dump的进程导致的。

检查数据泵任务:

select * from dba_datapump_jobs;

OWNER_NAME	  JOB_NAME 		      	OPERATION 	 	 JOB_MODE 		STATE	 	   DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS
------------  ------------------- 	------------ 	--------- -------------- -------------- --------------------------------------
SYS		  SYS_EXPORT_SCHEMA_01	   EXPORT	    SCHEMA	 	EXECUTING	 	8		  1		    2
AML94		  SYS_IMPORT_TABLE_01	   IMPORT	    TABLE	 	NOT RUNNING	 	0		  0		    0
AML94		  SYS_IMPORT_TABLE_05	   IMPORT	    TABLE	 	NOT RUNNING	 	0		  0		    0
AML94		  SYS_IMPORT_TABLE_02	   IMPORT	    TABLE	 	NOT RUNNING		0		  0		    0
复制

可以看到有一些并未运行的job,但是资源未释放。可以通过attach尝试释放,但是会显示任务并不存在。所以可以直接在数据库里面释放。
删除掉任务表:

SYS@xxxxdb> set lines 300
SYS@xxxxdb> col owner for a10
col object_name for a35
SYS@xxxxdb> col object_type for a15
SYS@xxxxdb> select owner,object_name,object_type,status,LAST_DDL_TIME from dba_objects where object_name=upper('&name');
Enter value for name: SYS_IMPORT_TABLE_01
old   1: select owner,object_name,object_type,status,LAST_DDL_TIME from dba_objects where object_name=upper('&name')
new   1: select owner,object_name,object_type,status,LAST_DDL_TIME from dba_objects where object_name=upper('SYS_IMPORT_TABLE_01')

OWNER	   OBJECT_NAME			       OBJECT_TYPE     STATUS  LAST_DDL_TIME
---------- ----------------------------------- --------------- ------- -------------------
xxxx	   SYS_IMPORT_TABLE_01		       TABLE	       VALID   2022-04-06 11:40:31

SYS@xxxxdb> drop table xxxx.SYS_IMPORT_TABLE_01 purge;
Table dropped.

SYS@xxxxdb> drop table xxxx.SYS_IMPORT_TABLE_02 purge;
Table dropped.

SYS@xxxxdb> drop table xxxx.SYS_IMPORT_TABLE_05 purge;
Table dropped.  
复制

如果导出窗口并未关闭的话,可以看到刚删除后,导出窗口立即继续执行。

最后修改时间:2022-06-24 16:02:15
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论