使用道具 举报
原帖由 棉花糖ONE 于 2008-9-8 08:39 发表 在第一个里没看到你缓存T1表啊,想不明白这里有了order by rowid怎么会起到你说的那作用,order by rowid怎么会影响一个数据块里的数据呢???
原帖由 TO_TO_RO 于 2008-9-8 09:05 发表 根据表中字段的特点比如idx=aa,idx=bb....将小的表分割,直接UPDATE呢? 另外,游标里面每隔1000行就commit一次也是忌讳的。容易引起“快照太旧”错误
原帖由 nyfor 于 2008-9-11 09:44 发表 谢谢, 增长了知识, 但是楼主依然没有说明在第一种情况下, 在 alter table T1 storage(buffer_pool keep); 之后的速度怎么样, 是否第二种方法的 按 rowid 排序取到了非常重要的作用.
原帖由 棉花糖ONE 于 2008-9-11 11:30 发表 别这么肯定,能举个例子吗
原帖由 yaocf 于 2008-9-16 15:35 发表 个人之见,请各位指正 1.用keep 对数据读取起了作用,缓存了源数据, 看法:oracle是不是很聪明地只载入用到的6G,依次序加载数据?应该是,但cache buffer 太大了,6G差不多10%的数据,对冷数据没有影响,处理速度会很快,到热点数据影响很大,会引起问题,对条带化的存储,问题也表现成散开了,定期程序死了 方法:减少 keep buffer =100M 或用T1.id2 分段取出更新,类似分页原理 问题:为什么不同时keep T1/T2呢? 2.order by 我觉得是在写数据库是起了作用,更新一个地方,不用跑很多地方做一点事情,事情集中在一块完成! 看法:我猜测这个应用是个交易应用,你用1000 commit,是怕影响前台,对已经cache的数据处理量,一定可以加大 batch commit 10000 合适不? 你的机器性能能足够保证这个batch commit. 方法:加大batch commit. 以保证读取一批,处理一批,保存一批,流程匹配、干净利落 请高人拍砖!
原帖由 Tomac 于 2008-9-18 18:05 发表 22小時并不是一個理想的方案。
本版积分规则 发表回复 回帖后跳转到最后一页