调整mysqltuner.pl的建议:query_cache_limit

kno*_*orv 10 mysql

mysqltuner.pl脚本给了我以下建议:

query_cache_limit (> 1M, or use smaller result sets)
Run Code Online (Sandbox Code Playgroud)

并且MySQL状态输出显示:

mysql> SHOW STATUS LIKE 'Qcache%';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| Qcache_free_blocks      | 12264      | 
| Qcache_free_memory      | 1001213144 | 
| Qcache_hits             | 3763384    | 
| Qcache_inserts          | 54632419   | 
| Qcache_lowmem_prunes    | 0          | 
| Qcache_not_cached       | 6656246    | 
| Qcache_queries_in_cache | 55280      | 
| Qcache_total_blocks     | 122848     | 
+-------------------------+------------+
8 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

从上面的状态输出,我如何判断是否query_cache_limit需要建议的增加?

dav*_*vek 18

您最好的办法是设置某种测试工具,在您的数据库上执行实际(由您的方案定义)加载,然后使用不同的设置对MySql运行该测试.调整本身就是一门艺术,如果不知道你的确切需求就很难给出一个全面的答案.

来自http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html:

Qcache_free_memory计数器提供洞察缓存的可用内存.观察到的低量与针对高速缓存分配的总量可以指示尺寸过小的高速缓存,这可以通过改变全局变量来补救query_cache_size.

Qcache_hitsQcache_inserts显示从缓存中提供查询的次数以及已插入缓存的查询数.命中率与插入率的低比率表明查询重用率很低或设置过低 query_cache_limit,这用于管理专用于每个单独查询高速缓存条目的RAM.大型查询结果集将需要此变量的更大设置.

查询重用率较差的另一个指标是Qcache_lowmem_prunes 价值增加.这表明MySQL必须经常从缓存中删除查询以使用传入语句.数量越来越多的其他原因Qcache_lowmem_prunes是尺寸过小的缓存,它无法容纳所需数量的SQL语句和结果集,以及缓存中的内存碎片,这可以通过发出FLUSH QUERY CACHE 语句来缓解.您可以使用该RESET QUERY CACHE命令从缓存中删除所有查询.

Qcache_not_cached计数器提供了洞察针对MySQL的执行语句并不是缓存,由于无论是作为一个非SELECT语句或具有进入被禁止明确的数量 SQL_NO_CACHE提示.

您的点击率与插入率之比约为1:15或6%,因此看起来您的设置可以通过一些微调来实现(尽管如我所说,您最了解这一点,因为您最了解自己的要求).