GBASE 8A v953报错集锦38--orato8a 指定 parallel 参数全表导出时前几分钟无数 据写入

问题现象

使用 orato8a 工具进行抽取时发现,当使用 parallel 参数全表并行导出时,orato8a 工

具输出的导出时间要比实际运行时间小很多。

具体来看,orato8a 运行后前几分钟是没有数据写入的,通过 pstack 查看发现一直在

执行 do_prepare_data_info 这个函数。

# time ./orato8a --user='hx_user/cx123@150.12.201.28/gdltcxff' --

table_name='FP_YJJCYQK_MX' --owner='HX_FP'

--file=/opt/export/idf/data/all/FFK/HXZG/GDDS/FP_YJJCYQK_MX_TEST13.txt

--field='_#c#_' --format=3 --line_separator='_#r#_' --parallel=8

export columns: 23

export rows: 29126180

export time: 6 min 6 sec

process ok!

real 12m16.100s

user 6m50.656s

sys 0m25.602s

通过每隔一分钟的 pstack 信息可以看到,前几分钟 orato8a 进程一直在进行

do_prepare_data_info,而后才开始 run_do_save 抽取数据并计时,所以 orato8a 抽取

结束后显示的 export time 要比实际时间小。

原因分析

orato8a 运行后前几分钟执行 do_prepare_data_info 的时候,是在连接 oracle 获取系

统表数据。由于 oracle 返回慢,导致程序卡住了 6 分钟无响应。

现场将查询 oracle 系统表的 sql 在客户 oracle 库上执行,耗时 6 分钟以上。咨询了

oracle 运维人员,了解到库中数据量超过 10T,我们所查询的系统表数据量很大,

这个查询速度是正常的。

查询系统表 sql 如下:

select dbms_rowid.rowid_create(1,

o.DATA_OBJECT_ID,

relative_fno,

e.BLOCK_ID,

0),

dbms_rowid.rowid_create(1,

o.data_object_id,

e.relative_fno,

e.BLOCK_ID + e.BLOCKS - 1,

10000)

from dba_extents e, dba_objects o

where e.owner = upper('ora001')

and e.owner = o.OWNER

and e.segment_name = upper('tt1')

and o.object_name = upper('tt1');

select dbms_rowid.rowid_create(1,

o.DATA_OBJECT_ID,

relative_fno,

e.BLOCK_ID,

0),

dbms_rowid.rowid_create(1,

o.data_object_id,

e.relative_fno,

e.BLOCK_ID + e.BLOCKS - 1,

10000)

from dba_extents e, dba_objects o

where e.owner = upper('ora001')

and e.owner = o.OWNER

and e.segment_name = upper('tt1')

and e.partition_name = upper('')

and o.object_name = upper('tt1')

and o.SUBOBJECT_NAME = upper('');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值