gpt4 book ai didi

c# - SqlDependency 锁表?

转载 作者:行者123 更新时间:2023-11-30 14:28:29 30 4
gpt4 key购买 nike

我想在我的项目中使用 SqlDependency,但是我想要依赖的表正被多个程序用于非常重要的目的。因此,他们必须能够在 SqlDependency 运行时插入此表。这可能吗?

我读过 this问题,但没有找到我的答案。

最佳答案

为了回答您的问题,SqlDependency 不会“锁定”表,但可能 increase lock contention在高写环境中,因为它使用与索引 View 相同的机制来检测基础数据的变化。

但是,除非:

  • 更改频率可能很高。要定义“高”,您确实需要测试您的生态系统,但建议的准则是,如果您的数据每秒更改多次,它可能不适合您:SqlDependency 的响应时间无法保证,并且回调机制并非旨在可靠地处理许多并发更改,您需要在每个 更改时得到通知。此外,SqlDependency 会增加基础表上的阻塞/争用,因为用于跟踪更改的索引会形成具有高写入频率的瓶颈。

  • 您打算将 SqlDependency 构建到直接访问数据库的客户端应用程序(例如桌面应用程序)中,并且其中会有很多实例。在这种情况下,大量的监听器、队列和消息可能会影响数据库性能并且效率低下。在这种情况下,您需要在考虑 SqlDependency 之前在数据库和应用程序之间放置一些中间件。

  • 您需要可靠地收到每一次更改的通知。 SQL Server 中的 SqlDependency 底层机制将为每次更改生成通知,但 .NET 方面的设计并不是以多线程方式固有地处理它们:如果通知到达时 SqlDependency 的工作线程已经在处理另一个通知,它会被错过。在这种情况下,您可以使用 SqlNotificationRequest相反。

  • 您需要立即收到更改通知(即保证亚秒级)。 SqlDependency 并非设计为低延迟;它专为缓存失效场景而设计。

如果 SqlDependency 不适合,请查看 Planning for Notifications和基础Query Notifications MSDN 上的页面以获取更多指导和替代方案建议。否则请参阅下文,了解有关如何根据正在使用的底层技术评估性能的更多详细信息。

SqlDependency 在很大程度上依赖于两项关键的 SQL Server 技术:query notifications (基于 indexed views )和 service broker .它有效地 Hook 到每当基础数据发生变化时更新索引 View 的机制。它为每个更改添加一条消息到队列,服务代理处理消息和通知。在写入频率非常高的情况下,SQL Server 将努力处理写入,使其“索引 View ”保持最新,以及排队和提供许多结果消息。如果您需要近乎即时的通知,这可能仍然是最好的方法,否则请查看轮询或使用 更新后 触发器,它可能使用 Service Broker 作为 suggested on MSDN .

关于c# - SqlDependency 锁表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29532508/

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