问题描述
嗨,汤姆,
我们有一个根据活动日期每天分区的表。每天,我们都会使用/* 附加 */提示 (单独使用partitionkey列的值使用1修改) 为前几天分区的sysdate-1 (trunc(sysdate)) 分区进行批量插入。
今天,我们有接近2000万条记录的数据,这些记录在15-20分钟内被复制。考虑到数据量的增长,我相信应该有一种更好的方法来做到这一点,而不是做insert select。
我确实经历了分区交换,据我了解,只能将非分区表形成为单个分区。您能否建议是否有更好的方法来做到这一点?
我们有一个根据活动日期每天分区的表。每天,我们都会使用/* 附加 */提示 (单独使用partitionkey列的值使用1修改) 为前几天分区的sysdate-1 (trunc(sysdate)) 分区进行批量插入。
今天,我们有接近2000万条记录的数据,这些记录在15-20分钟内被复制。考虑到数据量的增长,我相信应该有一种更好的方法来做到这一点,而不是做insert select。
我确实经历了分区交换,据我了解,只能将非分区表形成为单个分区。您能否建议是否有更好的方法来做到这一点?
专家解答
那么,您可以尝试使用create table作为select将数据复制到新表中。然后用你现有的一个分区交换新表。例如在伪代码中:
但是要真正提供帮助,我们需要了解您的插入正在做什么。找到这个,在启用等待的情况下跟踪您的插入。然后使用tkprof解析跟踪文件。您可以在以下位置找到有关如何执行此操作的说明:
https://blogs.oracle.com/sql/how-to-create-an-execution-plan#tkprof
如果执行此操作后仍然需要帮助,请发布格式化的跟踪文件结果。
drop table temp_tab; create table temp_tab as select trunc(sysdate), ... from tab partition (yesterday_partition); alter table tab exchange partition today_partition with temp_tab;复制
但是要真正提供帮助,我们需要了解您的插入正在做什么。找到这个,在启用等待的情况下跟踪您的插入。然后使用tkprof解析跟踪文件。您可以在以下位置找到有关如何执行此操作的说明:
https://blogs.oracle.com/sql/how-to-create-an-execution-plan#tkprof
如果执行此操作后仍然需要帮助,请发布格式化的跟踪文件结果。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。