【问题标题】:How do large blobs affect SQL delete performance, and how can I mitigate the impact?大型 Blob 如何影响 SQL 删除性能,如何减轻影响?
【发布时间】:2011-07-01 14:22:09
【问题描述】:

我目前遇到一个奇怪的问题,我对 SQL Server 的理解与此不太相符。我们使用 SQL 作为内部存储服务的文件存储,我们的数据库中有大约 50 万行。大多数文件 (86%) 为 1mb 或以下,但即使在我们数据库的新副本上,我们只是用数据填充表以进行测试,似乎有大量数据的行经常存储在 BLOB 中当我们的 SQL 服务器负载不足时导致超时。我对 SQL Server 如何删除行的理解是它是一个垃圾收集过程,即该行被标记为幽灵,然后在将更改复制到事务日志后,该行被幽灵清理过程删除。这向我表明,无论 blob 中数据的大小如何,行删除都应该接近瞬时。但是,在删除这些行时,我们肯定会遇到大量超时和惊人的低性能。

在我们的测试数据集中,超过 30mb 的文件会导致此问题。这是一个边缘案例,我们不会经常遇到这些问题,尽管我们正在研究 SQL 文件流作为我们某些问题的解决方案,但我们正在尝试缩小这些问题的根源。

我们正在事务内部执行删除操作。我们还对元数据(例如文件大小统计信息)进行更新,但这些更新存在于与文件数据本身不同的单独表中。层次结构数据存储在包含文件信息的表中。

真的,最终我们围绕删除所做的事情并不重要,我们只是找不到任何关于在 BLOB 中包含大量数据的行上删除性能低的参考。我们正在尝试确定这是否是一个值得探索的途径,或者它是否必须是我们围绕导致问题的删除的流程之一。有没有可能发生这种情况的情况?当许多这些删除同时发生时,数据库服务器是否经常出现完全超时?如果存在这个问题,有没有办法解决?

【问题讨论】:

  • 我建议将其移至serverfault.com,在那里您可能会发现更多人了解 SQL Server 内部结构。 :)
  • 你在这方面有什么收获吗?我认为我们有同样的问题。我们的 Blob 大小为 2 到 20 MB,删除性能非常慢。

标签: sql-server performance timeout


【解决方案1】:

您正在描述一个性能问题,并且与任何性能问题一样,您需要首先通过测量来解决它。猜测会让你一事无成。因此,使用适当的调查方法,Waits and Queues 再次完美适用。观察、收集数据和分析。您肯定会发现导致查询超时的原因(是阻塞吗?是 IO 吗?是 CPU 吗?),根据实际发现,我们可以推荐适当的修复方法。

至于回答您的直接问题:不,删除 BLOB 不会导致您描述的任何症状。这些是典型的contention 症状。

【讨论】:

  • 我不期待得到明确的答案,我想我提供了太多信息。关于 blob 的大小是否会影响删除该行所需的时间,我真的需要一个明确的答案。我们怀疑与锁有关的问题,但在我们进行所有测量以确定原因之前,我想排除 SQL Server 固有的简单性能问题。
  • 你消除了明显的,例如。数据库/日志增长事件?
  • 我会 100% 诚实,我不太擅长 SQL 性能调优。为优化此过程而提供的任何提示或途径将不胜感激。
  • 我现在正在看,非常感谢您的帮助。
猜你喜欢
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 2012-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
相关资源
最近更新 更多