【问题标题】:Monitor system resource consumption during imdp in oracle RAC在 oracle RAC 中监控 imdp 期间的系统资源消耗
【发布时间】:2020-11-28 06:52:11
【问题描述】:

我需要使用 impdp 导入我的 RAC 数据库(Oracle18c、3 个物理节点和 RHEL7),并且我想监控 3 个节点的资源消耗(cpu、ram 和磁盘),留下类似报告的内容导入过程中的文件。你能推荐任何方法来做到这一点吗?谢谢

【问题讨论】:

  • 你说的是 RAC 上的 import datapump 吗??
  • 是的,是 RAC 18c

标签: oracle performance resources monitoring impdp


【解决方案1】:

我会开始使用一个简单的查询来监控流程

select x.inst_id , x.job_name,b.state,b.job_mode,b.degree
, x.owner_name,z.sql_text, p.message
, p.totalwork, p.sofar
, round((p.sofar/p.totalwork)*100,2) done
, p.time_remaining
from dba_datapump_jobs b
left join dba_datapump_sessions x on (x.job_name = b.job_name )
left join gv$session y on (y.saddr = x.saddr and y.inst_id = x.inst_id )
left join gv$sql z on (y.sql_id = z.sql_id and y.inst_id = z.inst_id )
left join gv$session_longops p ON (p.sql_id = y.sql_id and p.inst_id = y.inst_id )
WHERE y.module='Data Pump Worker'
AND p.time_remaining > 0;

关于你测量 CPU、内存或磁盘的点,我不知道你想在这里测量什么。我不知道你的环境,但可能它在某种程度上被虚拟化了,所以当你有一层又一层的虚拟化时,当你处理物理服务器时,那些措施是有意义的,它们现在变得不那么有意义了,当然很重要,但没有以前那么多了。

无论如何,如果您仍想测量 (CPU),您可以在之前使用gv$sesstatgv$statname 加入查询。

select x.inst_id , x.job_name,b.state,b.job_mode,b.degree
, x.owner_name,z.sql_text, p.message
, p.totalwork, p.sofar
, round((p.sofar/p.totalwork)*100,2) done
, p.time_remaining
from dba_datapump_jobs b
left join dba_datapump_sessions x on (x.job_name = b.job_name )
left join gv$session y on (y.saddr = x.saddr and y.inst_id = x.inst_id )
inner join gv$sesstat t on ( t.sid = y.sid and t.inst_id = y.inst_id )
inner join gv$statname n on ( t.statistic# = n.statistic# and t.inst_id = n.inst_id )
left join gv$sql z on (y.sql_id = z.sql_id and y.inst_id = z.inst_id )
left join gv$session_longops p ON (p.sql_id = y.sql_id and p.inst_id = y.inst_id )
WHERE y.module='Data Pump Worker' and n.name like '%CPU used by this session%'
AND p.time_remaining > 0;

如果您在导入 datapuump 操作时性能下降,有一些技巧可以加快导入速度,而且您始终可以在导入操作期间启用参数 TRACE 以检查后面发生的情况轮子。

提高性能的选项

您可以更改导入行的方式。例如,您可能想尝试使用:access_method=direct_path

在使用直接路径加载时要考虑到这一点。表的结构允许直接路径加载,即:

  • 在单分区加载期间,多分区表上不存在全局索引。这包括已分区的对象表。
  • LOB 列不存在域索引。
  • 表不在集群中。
  • 该表没有 BFILE 列或不透明类型的列。
  • 该表没有嵌入不透明类型的 VARRAY 列。
  • 该表没有加密列。
  • 未启用补充日志记录或启用补充日志记录并且表没有 LOB 列。
  • 要导入数据的表是预先存在的表,并且没有活动触发器,并且该表未分区,未启用 INSERT 模式的细粒度访问控制,并且约束不是不存在表检查,也不存在唯一索引。
  • 参数 QUERY、REMAP_DATA 参数未用于导入数据泵作业中的指定表。

允许数据泵操作在transform=disable_archive_logging:y( 12c 起) 的无日志记录中运行

如果导出数据泵是在PARALLEL中完成的,并且创建了几个dmp文件,那么在导入操作中应该使用相同的度数。

跟踪 ORACLE 数据泵

可以通过在 Export DataPump (expdp) 或 Import DataPump (impdp) 的 TRACE 参数中指定 7 位十六进制掩码来启用跟踪。前三位启用对特定数据泵组件的跟踪,而后四位通常是:0300。 任何前导零都可以省略,并且为 TRACE 参数指定的值不区分大小写。

您应该从 480300 开始,在这种情况下,将跟踪主控制进程 (MCP) 和工作进程。创建数据泵跟踪文件时,不要使用不同的值,除非 Oracle 支持要求不同的跟踪级别。如何启用跟踪的示例:

expdp <LOGIN>/<PASSWORD> DIRECTORY=<DIRECTORY_NAME> DUMPFILE=<DUMP_NAME>.dmp \
LOGFILE=<LOG_NAME>.log TABLES=<SCHEMA_NAME>.<TABLE_NAME> TRACE=480300

请记住,用户/密码必须是具有足够权限的用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 2017-10-06
    相关资源
    最近更新 更多