【问题标题】:IMPROVE INSERT HUGE TABLES ORACLE改进插入大表 ORACLE
【发布时间】:2021-06-11 08:10:34
【问题描述】:

早上好,

在我所在的项目中,它被插入到巨大的表中。尽管没有主键,但它们需要很长时间。我通常做的是将数据插入到简单的工作表中,然后通过交换将数据带到分区的大表中。

我的问题是,如果在大桌子上这样插入,会不会更快?

Insert /*+ append parallel */ 
in (select * from hugetable 
    where 1 = 2)
select * from table2

谢谢

【问题讨论】:

  • 您的示例代码无法编译,因此很难说它是否会更快。除此之外,我们很难回答性能问题,因为很大程度上取决于每个场景的精确细节。您没有向我们提供几乎足够的信息来做出明智的评估。我的一般建议是调查为什么您当前的过程需要这么长时间,而不是消失在试图找到可能更快的替代方案的兔子洞中。

标签: oracle optimization insert bulk-load


【解决方案1】:

有很多选项可以降低插入速度。一种有效的选择是让数据库处于归档日志模式,这通常是好的。它确实使插入语句变慢了一点,这里的附加提示可能会有所帮助。这是因为表尾标记只是放在要追加的数据的末尾,数据只是存储起来,不经过普通副本,这样可以节省时间。

如果这有帮助,请不要忘记这会影响数据库的备份/恢复。您需要对此类事务中涉及的数据文件进行备份。

也就是说,如果您的数据库处于归档日志模式并且还启用了“force_logging”,它根本不会帮助您,因为数据库将忽略附加提示。通常这是因为有一个与您的数据库相关的备用数据库希望存档保持有效的备用数据库。

并行提示可以工作,但大多数时候它不会有帮助。有很多事情需要正确设置才能为您工作。

最重要的是找到你的速度或速度不足的根本原因。如果您的硬件几乎无法容纳 10MB/s,那么您就不能期望插入速度比这更快。

所以,简而言之,有一个通用的答案:视情况而定。不是您希望的答案,而是一些可能指向您可以进一步调查的方向的提示。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2017-08-20
    • 1970-01-01
    • 2020-09-16
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多