我试图运行tuningprimer.sh来调整我的MySQL设置。 我已经把mysql查询caching提高了几倍到目前的2GB,但是根据testing结果还是不够的:
> 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
正如您所看到的,3.9百万个查询从caching中删除,因为它的大小。 恐怕索引这样一个大的caching。 我的意思是,可能search这样一个大的caching文件可能需要更多的时间和资源比执行查询本身。
你怎么看 ? 我还应该增加mysqlcaching吗?
顺便说一句:服务器运行Litespeed + MySQL + PHP 5.3,并有24GB的RAM,目前的内存使用量是12GB
如果你有很多相当小的结果集要caching,你的query_cache_min_res_unit可能被设置的太大。 由于query_cache_min_res_unit是caching结果集的最小分配大小,即使使用2 GB的查询caching,也不能存储超过512,000个结果。 看一下来自SHOW STATUS LIKE '%qcache%';输出的Qcache_total_blocks和Qcache_queries_in_cachevariablesSHOW STATUS LIKE '%qcache%'; – 如果您看到比例接近1:1,则可能会从降低query_cache_min_res_unit值中受益。
锁争用问题仍然是一个问题,但是当“SHOW PROCESSLIST”列出过多的“正在等待查询caching锁”处理时,您会看到限制命中。
文档说:
“请注意不要将caching大小设置得太大,由于需要线程在更新过程中lockingcaching,因此可能会看到locking争用问题,因为caching非常大。
请注意,它并没有定义什么非常大的东西。编辑:看着这个错误,我认为你是在非常大的领土。
如果这是一个search服务,也许你应该考虑像Solr的东西?
在开始使用巨大的caching之前,您可能需要阅读以下内容: http ://www.percona.com/files/presentations/MySQL_Query_Cache.pdf。 我有一个850GB的MySQL数据库存储大多数人口统计数据和我的查询caching是32M根据我的查询计划。
我已经开始了一个大型的caching,经过几年的使用MySQL的性能调优和清理查询我把它放到32M,它运作良好。
“高性能Mysql”在查询caching方面也有很大的篇幅。
参考文献:
http://www.percona.com/files/presentations/MySQL_Query_Cache.pdf