插入超过特定数量的行时,INSERT 需要超过 5 个小时

Pio*_*otr 8 sql-server

当向表中插入少于大约 1,350,000 行时,大约需要 2 分钟,但是当插入的行数更大时,插入数据所需的时间会增加到大约 5 小时。

问题与查询或索引无关,因为长期以来一切正常,查询、表或索引的结构没有任何变化。

问题第一次出现在大约 2 周前,当插入的行数大于 +-1,350,000 时,它会在几天内重复出现。例如,一天插入的行数为 1,200,000,该过程需要 2 分钟,另一天的行数为 1,450,000,插入数据需要 5-6 小时。

我试图重建索引,但没有帮助。

Aar*_*and 14

我的猜测是 - 如果您实际上没有被阻止 - 您达到了数据文件(和/或日志文件)必须增长的阈值,并且您的配置没有优化以支持这种增长。确保这件事:

  1. 您的数据文件增长率是合理的,并且是一个固定大小(不是 %!),足以容纳此事务以及可能同时进行的任何其他事情。
  2. 日志文件也一样。
  3. 启用即时文件初始化。这将有助于加快数据文件的增长,但不是通常更麻烦的日志文件增长。
  4. 您不会在循环中插入 135 万行,或者全部作为一个大事务插入。也有一些是被说破你的交易成块


小智 5

这可能是内存问题吗?

如果某些必须重复访问的数据块对于内存来说太大,并且您会遇到磁盘崩溃,您可能会看到这种行为。如果您必须循环遍历对于内存来说太大的数据块,那么您最终会在每次传递时从交换文件中读回整个数据,将其推过该限制可能会导致您的性能急剧下降。