SQL Server 2005和caching

问题背景:我正在为我的网站实施一个caching系统。 目前我们正在探索memcache作为这样做的手段。 但是,我正在查看是否存在类似的SQL Server的东西。 我明白,MySQL有查询caching,虽然不是分布式作为一种“停止差距”的措施。 MySQL查询caching是否等同于SQL Server中的cachingcaching?

所以这是我的问题:

  1. 有没有办法知道目前存储在缓冲区caching?
  2. 跟着做到这一点,有没有办法强制某些表或结果集进入caching? 我有多less控制缓冲区和过程caching中发生了什么? 我知道那里曾经是一个DBCC PINTABLE命令,但从那以后被中断了。
  3. 稍微偏离主题:数据库层上是否应该存在caching? 或者使用Velocity / Memcachepipe理caching更为谨慎? 是的,为什么? 看起来caching失效在处理许多具有重叠触发器的对象时是一件痛苦的事情。

谢谢!

1)是的,你可以看到什么是在Sql Server缓冲区caching(2005年和2008年)— DEMO:缓冲区计数对象&index.sql —按对象记忆。 —按对象(table,index)分解缓冲区SELECT b.database_id,database_name = CASE b.database_id WHEN 32767 THEN'Resource'ELSE db_name(b.database_id)END,p.object_id,Object_Name = object_name(p.object_id ,database_id),p.index_id,buffer_count = count(*)FROM sys.allocation_units a JOIN sys.dm_os_buffer_descriptors b ON a.allocation_unit_id = b.allocation_unit_id JOIN sys.partitions p ON a.container_id = p.hobt_id WHERE object_id> 99 GROUP BY b.database_id,p.object_id,p.index_id ORDER BY buffer_count DESC

2)您可以在2005年在caching中固定表格 – 这个function在2008年不推荐使用…我认为SQL Server用于在caching中保留热表格的algorithm最好是您决定要在caching中固定一个表格。 时间将会更好地用于查询调优。

3)这取决于……

我不认为你的第三点是脱离主题的。 如果你想为你的网站实现caching,我认为在web层使用memcache或类似的东西是有道理的。

你想要实现caching的原因之一就是首先减less对数据库的调用次数。 如果你把caching放在数据库中,你不会节省很多。

你的性能也将取决于你的对象模型,以及你如何查询你的数据库。 如果caching对象及其全部或大部分属性,则与caching每个页面的特定结果集相比,您将获得更好的caching性能,因为使用特定对象的每个页面都可以使用相同的cachinglogging。

无论您select什么方法,数据库都将拥有自己的内部caching。 当您的Webcaching要求您通过不必为了每个数据页而转到磁盘时,就可以帮助您查询性能。

道歉,因为这是大约一年后,原来的发布,但刚刚遇到这个问题。

为了回应Joe EO的第二个回答,“…你可以在2005年的caching中插入表格……”钉住表格不再适用于SQL2005 …这是罪魁祸首:

http://www.sqlskills.com/BLOGS/PAUL/post/DBCC-PINTABLE.aspx

而且我相信现在已经完全从SQL2008中移除了。

HTH

humbleDBA

查询caching与cachingcaching不同,cachingcaching包含实际的数据块,查询caching包含特定查询的结果。 换句话说,查询caching仅在查询与之前运行的查询相同或几乎相同时才有效,通常限于同一用户。

只要查询访问任何其他查询最近访问的任何数据,缓冲区caching就会生效。

恐怕我不知道一个简单的方法来查看缓冲池中当前有哪些数据,也不知道在SQL Server 2005中是否支持将对象固定到caching。我可能会添加我主要是一个Oracle DBA,所以有一个更好的MS-SQL知识的人可能会对此有所了解。

数据库层中的缓冲区caching对应用程序性能至关重要,尽pipe有任何应用程序级caching。 系统文件caching数据库缓冲区caching之间有一些重叠,在某些情况下让RDBMS绕过系统caching可能是有益的。