使用MySQL缓存数据

时间:2011-06-21 16:02:18

标签: mysql caching

我想在MySQL上缓存数据

SET GLOBAL query_cache_size = SOME_SIZE;

在MySQL中高效缓存数据是否都需要?

我是否需要添加额外的东西才能有效地使用缓存?

我对数据缓存知之甚少,但仍然需要用于性能问题,所以如果我错过了一些重要信息,请假设系统处于默认状态时回答这个问题。

4 个答案:

答案 0 :(得分:5)

我通常不建议使用MySQL查询缓存。理论上听起来很棒,但不幸的是,对于高效缓存并不是一个很好的胜利,因为从查询中访问它是由互斥锁控制的。这意味着许多并发查询会排队以获取对查询缓存的访问权限,如果您拥有大量并发客户端,这会带来更多损害。

即使这些查询没有结果集,它甚至会损害INSERT / UPDATE / DELETE,因为如果它们更新相同的表,它们会从查询缓存中清除查询结果。并且这种清除在互斥体上受到相同的排队。

更好的策略是使用memcached进行特定查询结果的可伸缩缓存,但这需要您考虑要缓存的内容并编写应用程序代码以访问memcached并在数据不存在时将其故障回复到MySQL在缓存中。这是更多的工作,但如果你做得对,它会带来更好的结果。

请参阅TANSTAAFL

答案 1 :(得分:4)

在MySQL中有很多用于缓存不同内容的设置。这是优化MySQL的一个很好的指南:

http://www.fromdual.com/mysql-performance-tuning-key

答案 2 :(得分:1)

请注意,查询缓存的功能非常具体:

  

查询缓存存储a的文本   SELECT语句连同   相应的结果发送到   客户端。如果是相同的语句   稍后收到服务器   从查询中检索结果   缓存而不是解析和   再次执行该声明   http://dev.mysql.com/doc/refman/5.6/en/query-cache.html

因此,如果相关表中的任何内容发生更改,或者查询甚至被重写,则不使用缓存。因此select * from T where id in (1,2)select * from T where id in (2,1)不同。

答案 3 :(得分:1)

SHOW VARIABLES LIKE '%query_cache%';

将显示缓存的当前设置。但它并不像打开它那么简单,你运行的查询需要具有可缓存的结果集,并且需要比这个注释框更多的解释。

如果您认为某个特定查询应该被缓存,那么发布它,我们就可以确定它是否可以缓存。

相关问题