我尝试运行 tuningprimer.sh 来调整我的 mysql 设置。我已经多次将 mysql 查询缓存增加到当前的 2GB,但根据测试结果,这仍然不够:
> QUERY CACHE Query cache is enabled Current query_cache_size = 2.00 G
> Current query_cache_used = 1.72 G Current query_cache_limit = 8 M
> Current Query cache Memory fill ratio = 86.22 % Current
> query_cache_min_res_unit = 4 K However, 3906616 queries have been
> removed from the query cache due to lack of memory Perhaps you should
> raise query_cache_size MySQL won't cache query results that are larger
> than query_cache_limit in size
如您所见,由于缓存大小的原因,有 390 万条查询被从缓存中删除。我担心索引这么大的缓存。我的意思是,在这么大的缓存文件中进行搜索可能比执行查询本身花费更多的时间和资源。
您觉得如何?我还应该增加 mysql 缓存吗?
顺便说一句:服务器运行 Litespeed + mysql + php 5.3 并具有 24GB RAM,当前内存使用量为 12GB
答案1
如果您有很多相当小的结果集需要缓存,那么您的 query_cache_min_res_unit 可能设置得太大了。由于 query_cache_min_res_unit 是缓存结果集的最小分配大小,因此即使有 2 GB 的查询缓存,您也无法存储超过 512,000 个结果。查看输出中的 Qcache_total_blocks 和 Qcache_queries_in_cache 变量SHOW STATUS LIKE '%qcache%';
- 如果您看到比率接近 1:1,则降低 query_cache_min_res_unit 值可能会有所帮助。
锁争用问题仍然是一个问题,但是当“SHOW PROCESSLIST”列出过多的“等待查询缓存锁”进程时,您会看到达到限制。
答案2
答案3
你可能想读一下这个:http://www.percona.com/files/presentations/MySQL_Query_Cache.pdf在您开始使用大型缓存之前。我有一个 850GB 的 mysql db,主要存储人口统计数据,根据我的查询计划,我的查询缓存为 32M。
我一开始使用一个大缓存,经过几年的使用 mysql 并进行了大量性能调整和清理查询后,我将其降至 32M,并且运行良好。
“高性能 Mysql”中也有一章关于查询缓存的精彩内容。
参考文献:
http://www.percona.com/files/presentations/MySQL_Query_Cache.pdf