节约数据迁移15分钟

    最近在调数据迁移的性能, 其中有下面这样的一句SQL语句, 表的大小为25GB, 记录数为1亿.

INSERT /*+ APPEND */ INTO B
  SELECT /*+ PARALLEL(A,4) FULL(A) */
        SEQ_B.NEXTVAL, A.*
FROM A;

    这一步在很好的存贮及主机上测试时, 居然用了26分钟, 忍无可忍, 一定要调整一下. 仔细考虑了一下, 因应是序列的取下个值太慢的问题, 序列原来的CACHE值为20, 于是将脚本改成如下:

ALTER SEQUENCE SEQ_B CACHE 2000;
INSERT /*+ APPEND */ INTO B
  SELECT /*+ PARALLEL(A,4) FULL(A) */
        SEQ_B.NEXTVAL, A.*
FROM A;
ALTER SEQUENCE SEQ_B CACHE 20;

    这样改了后, 10分钟就完成了, 有效地节约了15分钟.

留言 (1)

不错 原来是cache问题 ,几天前我也插入过数据
不过没那么大 后来用rownum+一个数 解决了这个问题 ^_^

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • I don't want to put you to any trouble.
  • 我不想麻烦你.
  • Excuse me, would you give me a hand?
  • 对不起, 你能帮我个忙吗?
  • I'd be glad to help.
  • 我乐意帮忙.
  • Would you mind mailing this letter for me?
  • 你能替我寄这封信吗?
  • I have so many things to do before I leave.
  • 我走之前还有很多事情要做.