【问题标题】:Database inserts slow down the larger the table gets表越大,数据库插入越慢
【发布时间】:2018-02-20 16:55:16
【问题描述】:

我遇到了数据库插入变慢的问题,表越大,速度越慢。我正在插入大约 130 万条记录,其中前 100,000 条以合理的速度插入,但随后插入速度逐渐变慢。

表一开始是空的,并且确实有三个外键和五个索引,我读过这些可能会导致速度变慢,因为每次插入都必须重新索引。我可以确认这是问题的可能原因吗?

我是否可以通过在插入语句后禁用索引并在最后再次执行(不删除索引)来提高这种性能?

有没有人对提高性能有任何进一步的建议。

我正在使用 SQL Server,它在我的第二个硬盘上。

【问题讨论】:

  • 我认为删除索引和约束然后在批量插入后重新创建是很常见的。
  • 你能发布表架构和所有索引吗?

标签: sql-server performance


【解决方案1】:

可能会有很多问题。有关优化批量插入的 MSDN 建议,请参阅 here。但是,我会尝试将批次限制为 10,000 或 100,000 行,然后看看情况如何。如果它有很大帮助,那么您应该花一些时间来确定您的最佳批量大小。我已经看到很多次因为

而这是一个问题

a) 事务日志如何增长,人们不了解它如何影响日志以及日志需要如何保持增长。

b) 大量行上的索引如何影响内存。来自关于批量的文章here

SQL Server 根据批次自动优化负载 大小值,这可能会导致更好的性能。一般来说,你 应该使批量大小尽可能大。通常情况下, 批量大小越大,批量导入的性能越好 手术。然而,也有一些例外。如果一个或多个索引 存在于目标表上,那么较大的批处理大小可能会放入内存 分拣压力。

批处理文章中还有其他说明,说明更改批处理大小可以如何提高性能以及原因,这些只是几个示例(也是我最常看到的示例)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多