gpt4 book ai didi

sql - 优化对不相关表的大量插入

转载 作者:行者123 更新时间:2023-12-02 10:06:43 24 4
gpt4 key购买 nike

对表中插入(简单和 BCP)的最大支持频率是否有任何(已记录或已知未记录)限制?以及最大并行高频插入到独立表中的情况?

我们有 4 个表(A、B、C、D)驻留在同一个数据库(sql server 2012,旗舰版)中,并且它们有自己的文件组 - 一个文件组用于这些大表,另一个文件组用于其他数据 - 两个文件组当前都在同一个SSD盘。恢复模式很简单,日志文件位于单独的 SSD 磁盘上。A、B、C、D 按时间顺序建立索引(每个索引都有一个按时间顺序排列的聚集索引),并且插入按时间顺序发生。没有从表中读取数据。通过对每个新记录执行 insert SP 来执行插入。我们每秒向每个表插入多达数十条记录。一切都工作得很好(sql server 上的 CPU 接近 0%,sql server 上的数据文件和日志文件磁盘的磁盘时间接近 0%),直到超过插入频率的某个阈值(我没有确切的数字,但每秒大约 100 次插入) )数据文件磁盘的 I/O(写入和读取)为 100%,DB 不可用,并且(几乎)所有插入尝试都超时。停止我们的服务后,数据库很快恢复正常,但在重新启动并达到类似的写入阈值后,情况又会重复。没有任何迹象表明这种情况即将到来 - DB 要么非常快,要么无法使用

什么不起作用:

  • 从头开始创建 A、B、C、D(以便它们为空) - 即使里面有几千条记录,情况又重复了。
  • 从头开始创建 A、B、C、D 作为堆(不带任何索引)

我们要做什么:

  • 通过 BCP 插入这些数据;但是还有其他 5 个表也需要使用这种方法 - 他们最终也会有插入频率高,但需要提供最多 1 秒的数据。

实际问题:

  • 我们还能看到 BCP 发生堵塞吗?
  • 我们是否应该以某种方式限制最大并行运行 BCP独立表? (每个表只有一个 BCP 线程,但是将会有~9张 table ,其中一半可以有几分钟的时间延迟数据,很少有表需要有 1 秒左右的旧数据)

最佳答案

我想到了几件事:

  1. 恢复模式是什么(可以将其设置为简单)吗?
  2. 表上是否有很多当前可能需要更新的索引(尝试删除,直到导入完成,然后添加)
  3. 您是否有必须引用但没有索引的 FK。可能是读取争用
  4. 您确定要对磁盘进行读/写操作吗?这可能会给您带来一些线索。
  5. 是否存在长时间运行的事务?

其中一些问题的答案可能会告诉您系统中存在哪些实际挑战。

关于sql - 优化对不相关表的大量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com