我们有一个应用程序,我们正在解析/加载大量消息并将它们加载到 SQL Server 2008 R2 实例中。我们正在使用 TVP 传递集合,这可以实现大吞吐量,但它也导致我们遇到很多死锁。我们最近在我们遇到问题的区域添加了 PAGLOCK 提示,它已经解决了大部分问题。
我担心的是这会导致大量的碎片吗?那是对的吗?我们也在研究一些重新设计的选项,但希望了解使用 PAGLOCK 提示的影响。
任何建议/意见将不胜感激。
谢谢,
小号
我们有一个应用程序,我们正在解析/加载大量消息并将它们加载到 SQL Server 2008 R2 实例中。我们正在使用 TVP 传递集合,这可以实现大吞吐量,但它也导致我们遇到很多死锁。我们最近在我们遇到问题的区域添加了 PAGLOCK 提示,它已经解决了大部分问题。
我担心的是这会导致大量的碎片吗?那是对的吗?我们也在研究一些重新设计的选项,但希望了解使用 PAGLOCK 提示的影响。
任何建议/意见将不胜感激。
谢谢,
小号
PAGLOCK
提示与碎片无关。分片与表上的索引有关。看起来您在有大量插入的表上没有正确的索引。
PAGLOCK
是与并发相关的表提示。请参阅 SQL Server 联机丛书:
PAGLOCK 不影响碎片。如果插入新行导致页面拆分,则会发生碎片,因为新行不再适合正确的页面,因此与使用的锁类型无关。如果聚集索引键不是像标识那样递增的值,则页面拆分很常见。出于同样的原因,它也发生在非聚集索引中,尽管频率较低,因为更多的行往往适合一个页面。
这意味着您无法避免在具有多个索引和高插入频率的表上出现碎片。因此,您应该根据它们的实际碎片经常重组/重建索引。