23

我正在做一个项目,我们正在考虑将 SQLCacheDependency 与 SQL Server 2005/2008 一起使用,我们想知道这将如何影响系统的性能。

所以我们想知道以下问题

SQLCacheDependency 对象(查询通知)的数量是否会对 SQL Server 性能产生负面影响,即对受影响表的插入、更新和删除操作?

例如,在 SQL Server 2005/2008 中,单个表上的 50000 个不同查询通知对该表的插入和删除会产生什么影响(性能方面)。

有没有关于如何使用 SQLCacheDependencies 的建议?有什么官方的注意事项吗?我们在 Internet 上找到了一些信息,但没有找到有关性能影响的信息。

如果这里有人对这些问题有一些答案,那就太好了。

4

5 回答 5

7

使用轮询机制的 SQL Cache 依赖不应该是 sql server 或 application server 的负载。

让我们看看 sqlcachedependency 工作和分析它们的所有步骤:

  1. 为 sqlcachedependency 启用数据库。
  2. 一个表说 'Employee' 为 sqlcachedependency 启用。(可以是任意数量的表)
  3. Web.config 已更新以启用 sqlcachedependency。
  4. 配置了使用 sql 缓存依赖项的页面。而已。

内部:

  • 步骤 1. 在数据库中创建一个表“ASPnet_sqlcachetablesforchangenotification”,该表将存储启用了 sqlcachedependency 的“Employee”表名。并添加一些存储过程。
  • 步骤 2. 在“ASPnet_sqlcachetablesforchangenotification”表中插入一个“Employee”表条目。还在此“员工”表上创建插入更新删除触发器。
  • 步骤 3. 通过提供连接字符串和 polltime 启用 sqlcachedependency 应用程序。

每当“Employee”表发生变化时,就会触发触发器,进而更新“ASPnet_sqlcachetablesforchangenotification”表。现在应用程序每 5000 毫秒轮询一次数据库,并检查对“ASPnet_sqlcachetablesforchangenotification”表的任何更改。如果有 r 任何更改,则相应的缓存将从内存中删除。

缓存与数据新鲜度相结合的巨大好处(最多数据可以陈旧 5 秒)。轮询由后台进程负责,不应成为性能障碍。因为正如您从上面的列表中看到的那样,该任务对 CPU 的要求最低。

于 2010-03-25T13:45:44.857 回答
4

SQLCacheDependency 实现为索引视图,每次修改表时,此视图索引都会更改。同一张表上有这么多视图(SQLCacheDependency 对象)意味着修改的性能相当不错。但是,如果每个表有 1 个视图(SQLCacheDependency 对象),则应该没有问题。

缓存更改通知是异步的,并在服务器有资源时触发。

于 2009-07-21T14:22:20.273 回答
2

你是对的,没有提供太多关于这方面的信息,但在这个页面中有一个与你的问题相关的短语http://msdn.microsoft.com/en-us/library/ms178604%28VS.80%29.aspx

“与 SQL 缓存依赖相关的数据库操作很简单,因此不会在服务器上产生沉重的处理成本。”

希望这对您有所帮助,尽管您的问题已经有点老了。

于 2009-10-10T16:32:44.270 回答
1

我所能提供的只是有关性能的轶事证据,但我们使用 SqlCacheDependency 作为一种“消息传递解决方案”,适用于每小时处理一万条消息的大型企业应用程序。

基本架构是我们公司使用 Perforce 进行源代码控制,并且我们有一个“订阅服务”,它从触发 Web 服务调用接收消息,然后在每次 p4 提交时调用并将一条记录插入 SQL 数据库。我们的应用程序具有依赖项设置,可以为影响您正在监视的分支或路径的每个更改发送订阅通知。

表现还不错。触发器运行大约 200 毫秒,我们从未抱怨过将消息中继给最终用户的延迟。

与往常一样,您的里程可能会有所不同。

于 2009-08-10T04:57:21.220 回答
1

这个页面似乎有一些关于设置使用哪种技术的好信息(当然我只是略过它)。

于 2009-03-31T04:20:15.237 回答