我正在开发一个项目,我们正考虑在SQL Server 2005/2008中使用SQLCacheDependency,我们想知道这将如何影响系统的性能。
所以我们想知道以下问题
SQLCacheDependency对象的数量(查询通知)是否会对SQL Server性能产生负面影响,即对受影响的表上的插入,更新和删除操作有什么影响?
单个表上的50000个不同查询通知在SQL Server 2005/2008中对该表上的插入和删除有什么影响(性能方面)。
是否有关于如何使用SQLCacheDependencies的建议?任何官方的做什么和不该做什么?我们在互联网上找到了一些信息,但没有找到有关性能影响的信息。
如果这里有人对这些问题有一些答案,那就太棒了。
答案 0 :(得分:6)
使用轮询机制的SQL Cache依赖项不应该是sql server或应用程序服务器上的负载。
让我们看看sqlcachedependency工作和分析它们的所有步骤:
内部:
只要'Employee'表中发生更改,就会触发触发器,该触发器会更新'ASPnet_sqlcachetablesforchangenotification'表。 现在应用程序轮询数据库说每隔5000毫秒,并检查“ASPnet_sqlcachetablesforchangenotification”表的任何更改。如果有任何更改,则会从内存中删除相应的缓存。
缓存的巨大好处与数据的新鲜度相结合(最多数据可能是5秒失效)。轮询由后台进程处理,不应成为性能障碍。因为正如你从上面看到的那样,任务对CPU的要求最低。
答案 1 :(得分:4)
SQLCacheDependency作为索引视图实现,每次修改表时,此视图索引都会更改。在同一个表上有如此多的视图(SQLCacheDependency对象)意味着修改的性能非常高。但是,如果每个表有1个视图(SQLCacheDependency对象),则应该没有问题。
缓存已更改通知为异步,并在服务器具有资源时触发。
答案 2 :(得分:2)
你说得对,提供的信息不多,但是在这个页面中有一个与你的问题相关的短语http://msdn.microsoft.com/en-us/library/ms178604%28VS.80%29.aspx
“与SQL缓存依赖关联的数据库操作很简单,因此不会在服务器上产生大量处理成本。”
希望这可以帮到你,虽然你的问题已经有点老了。
答案 3 :(得分:1)
This page似乎有一些关于设置的好信息哪种技术可以很好地使用(我只是略过了它)。
答案 4 :(得分:1)
我所能提供的只是性能的轶事证据,但我们使用SqlCacheDependency作为一种“消息传递解决方案”,用于处理每小时一万条消息的大型企业应用程序。
基本架构是我们公司使用Perforce进行源代码控制,我们有一个“订阅服务”,它接收来自触发器webservice调用的消息,而不是在每次p4提交时调用,并将记录插入到SQL数据库中。我们的应用程序具有依赖关系设置,可以为影响您正在监视的分支或路径的每个最常更改发送订阅通知。
表现很好。触发器运行大约200毫秒,我们从未抱过将消息中继到最终用户的延迟。
与往常一样,您的里程可能会有所不同。