Memcached vs SQL Server缓存

时间:2010-06-21 12:53:53

标签: sql-server performance caching memcached

我一直在阅读很多文章,建议在数据库前放置Memcached(或Velocity等)比直接点击数据库更有效。它将通过查找内存缓存中的数据来减少数据库上的命中数,这比访问数据库要快。

但是,SQL Server拥有数据库中对象的内存缓存。检索数据时,SQL Server会维护其缓存并将(如果需要)从其内存中提取行而不会访问磁盘。

因此,如果SQL Server拥有自己的缓存,外部Memcached(或类似)服务器的好处是什么?

我读过的大多数文章都是社交网站,大多数都使用MySql。但是,关于使用SQL Server的MySpace的article建议也在该系统上使用缓存。

这个article解释了何时应该使用缓存,而article是一个对位。

3 个答案:

答案 0 :(得分:16)

  

因此,如果SQL Server拥有自己的缓存,外部Memcached(或类似)服务器的好处是什么?

是的SQL Server有自己的缓存,但他只缓存:
- 查询计划
- 数据库文件中的页面

但他没有缓存:
- 查询结果

e.g。你有一个复杂的查询,它使用了大量数据的聚合 (想想:我们的客户数据库中有多少个不同的国家/地区:   SELECT DISTINCT来自客户GROUP国家的国家/地区)

SQL Server将扫描整个客户表,但结果集只会有几个条目。 当您重新发出查询时,SQL Server将重用查询计划并重新扫描客户表, (如果你很幸运,这些页面仍在内存中)

使用memcached时,您可以存储结果集的几行,并在不连接数据库服务器的情况下反复重复使用它们。因此需要从数据库服务器获得一些负载 注意:如果您的数据在SQL服务器上发生更改,请注意一些陈旧的数据!!

答案 1 :(得分:4)

另一个好处还可能是SQL Server的扩展成本很高,而添加新的Web /缓存服务器可能会更便宜。

我们在应用程序级别使用缓存来存储各种事物,而不是从数据库中存储所有事物。您可以在代码中操作数据对象,然后添加到缓存中。

如果需要,您甚至可以存储标记(输出缓存)。

在一天内,通过使用缓存,我们将我们的网站从能够处理150个并发会话同时进行压力测试到800以上。我强烈建议使用它!

答案 2 :(得分:0)

Velocity等,特别是当您的SQL服务器位于自己的盒子上时。我们一直在使用ASP.NET的内置缓存,但希望转向Velocity。多个Web服务器与SQL集群通信,缓存确实有助于提高可伸缩性并减少SQL负载。