求数据下发,好的处理方法(存储过程实现!)

[复制链接]
查看11 | 回复9 | 2017-1-20 11:00:36 | 显示全部楼层 |阅读模式
简单背景:
下发涉及到两个公司对接
A公司提供人口数据视图(建立在可读用户下),不定期增长的。两个月由200w数据增加到700w数据。
我所在公司要将数据抽取过来到公司的人口系统中进行处理。要实现每日更新,(不能超过三天)
由于数据库硬件配置比较差(提升硬件已经不可能)。要怎么实现。
公司提供的存储过程执行时间太长。


求帮助!!!!!



ccgc.txt(14.56 KB, 下载次数: 41)2012-9-23 17:47 上传点击文件名下载附件


回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
由于数据库硬件配置比较差(提升硬件已经不可能),硬件是基础,你的配置比较差,才有提升的余地,不 提升?
只能从软件方面考虑了,优化存储过程?还是说说需求看看能用新方案?
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
要优化,lz可以先在没步记录一个日志,看每步的实践分布情况,看程序主要耗时的那几步,处看程序,
1 dblink处理比较多,
2 且删除更新也比较多,lz可以考虑操作合并,
3 dml转换,避免删除和更新,
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
要优化,lz可以先在没步记录一个日志,看每步的时间分布情况,看程序主要耗时的那几步,处看程序,
1 dblink处理比较多,
2 且删除更新也比较多,lz可以考虑操作合并,
3 dml转换,避免删除和更新,
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
java3344520 发表于 2012-9-23 18:57
由于数据库硬件配置比较差(提升硬件已经不可能),硬件是基础,你的配置比较差,才有提升的余地,不 提升? ...

其实 我是想优化存储过程!,给用户的感觉是每天有更新(哪怕是不一次性更新完都可以,比如每天取5w条数据出来比对下发)。
我在这样处理的时候,时间撮没有掌握好,sql的执行计划耗时还是比较长
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
jonas_li 发表于 2012-9-23 21:56
要优化,lz可以先在没步记录一个日志,看每步的实践分布情况,看程序主要耗时的那几步,处看程序,
1 dblink处理 ...

消耗时间的sql 已经跟踪出来了
第一个是下面的
INSERT/*+append*/ INTO ZDRY_DATA

(id, version, hjdpcsdm, zdrylbbj, ywxm, rylx, xzdpcsmc, csrq, xm, hjdqh_id, xb_id, jzdxz,

zdry_id, sfzh, yjcsjb, zt, jzdqh_id, mz_id, jlbgsj, xzdpcsdm, xmpy, yxx, jlxzsj, hjdxz,

jg_id, gj_id, hjdpcsmc,zdrybh,xzbs

)
SELECT zdry_data_seq.NEXTVAL,0 as v,rj.hjdpcs,rj.zdrylbbj,rj.ywxm,'bsxf' AS rylx,rj.hjdpcs,

rj.csrq,rj.xm,'' AS hjdqh,'' AS xb,rj.hjdxz,NULL,trim(rj.sfzh),'' yjczlb,'wfp','' AS hjdqh,'' AS mz,

trim(rj.jlbgsj),rj.hjdpcs,rj.xmpy,yxx,trim(rj.jlxzsj),rj.hjdxz,'' AS jg,'' AS gj,rj.hjdpcs,trim(zdrybh),'1'

FROM vw_zdry_jxxx@st_zdry.regress.rdbms.dev.us.oracle.com rj
WHERE JLXZSJ> v_maxdate;
------------------------------------------------
还有一个消耗时间的地方 (这个消耗的时间也比较多。因为是全表插入。我可以根据逻辑关系只插入需要用到的部分,这个是能解决的。主要还是上面的那个)
insertintot_zdry_jxxx select trim(zdrybh),trim(yxx) from vw_zdry_jxxx@st_zdry.regress.rdbms.dev.us.oracle.com;
——————————————————
求解决!!!!


回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
jonas_li 发表于 2012-9-23 21:57
要优化,lz可以先在没步记录一个日志,看每步的时间分布情况,看程序主要耗时的那几步,处看程序,
1 dblink处理 ...

我想在插入数据的时候用rownum <100000,但是后面取过来的数据,要经过下发逻辑处理,
rownum <100000
要注意
每次下发的数据处理不能重复,真想不处理用存储过程怎么处理。

回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
顶起来!
求帮助。。。
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
瞎猜一下,你这个insert 语句依赖于db_link,这中间的数据查询/buffering没准存在比较大的问题,先测试对比一下这个过程,一个是用这个语句往一个临时表里插入通过db_link select 出来的数据,另一个是
用这个select 语句直接在那个主机上一个新临时表,把表exp到一个文件传输过来用imp插入这边数据库里,因为怀疑db_link和buffering过程有很多waiting event...大概思路这样。
回复

使用道具 举报

千问 | 2017-1-20 11:00:36 | 显示全部楼层
INSERT/*+append*/ INTO ZDRY_DATA
ZDRY_DATA 这个表有数据? 是否插入性能造成的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行