我在Windows 2008服务器上使用MySQl 5.1社区版MySQL.我在申请中遇到了性能问题.所以,我开始关注MySQL配置变量的调整.当我在我的MySQL数据库中运行MySQL调谐器时,我得到以下红色标记的消息:
Query cache prunes per day: 57482
它对我的数据库有什么影响以及它如何影响性能?它的最佳价值应该是多少?哪些MySQL配置参数与查询缓存Prunes相关?
如果您需要更多信息,请与我们联系.
非常感谢...
Jas*_*Heo 18
Percona提供了很好的演示.你可以在这里阅读 http://www.percona.com/files/presentations/MySQL_Query_Cache.pdf
Qcache_hits / (Qcache_hits + Com_select)
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式获取每个变量的值.
mysql> SHOW GLOBAL STATUS LIKE 'Q%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 16733288 |
| Qcache_hits | 1291736 |
| Qcache_inserts | 1301133 |
| Qcache_lowmem_prunes | 15214 |
| Qcache_not_cached | 10415252 |
| Qcache_queries_in_cache | 195 |
| Qcache_total_blocks | 113 |
| Queries | 15142148 |
| Questions | 15139850 |
+-------------------------+----------+
mysql> SHOW GLOBAL STATUS LIKE 'Com_select%';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| Com_select | 12345488 |
+---------------+----------+
Run Code Online (Sandbox Code Playgroud)
MySQL Query缓存有大小限制.当新的QC条目尝试在大小达到最大值时保存QC时,会发生什么?想想1分钟......
是.我们必须删除QC中的一些数据以保存新条目.这意味着'修剪'.要删除的QC页面由LRU算法决定.
所以我建议你增加QC的大小.请参阅http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/
可用内存量有限 - 查询通过表更新不断从查询缓存中失效,这意味着即使您运行了大量不同的查询,缓存和内存中的查询数也无法永久增长.当然,在某些情况下,你有一些永远不会被修改的表,这些表会泛滥查询,但不寻常.所以你可能想要将查询缓存设置为某个值并观察Qcache_free_memory和Qcache_lowmem_prunes - 如果你没有得到很多lowmem_prunes和free_memory保持高位,你可以适当地减少query_cache.否则你可能希望增加它,看看效率是否会提高.
提高QC是一个很好的起点.但Query Cache不是魔术.查询缓存有缺点.同时,只有一个连接可以使用查询缓存.你能用MySQL PROFILE功能吗?这是一个例子.执行每个查询时,连接锁定查询缓存锁定两次.(一个用于检查,一个用于保存)
mysql> set profiling = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from a;
Empty set (0.00 sec)
mysql> show profile;
+--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| starting | 0.000024 |
| Waiting for query cache lock | 0.000007 | <= waiting for query cache lock. to check weather query is in QC
| checking query cache for query | 0.000027 |
| checking permissions | 0.000010 |
....
| Waiting for query cache lock | 0.000022 |
....
| Sending data | 0.000029 |
| end | 0.000009 |
....
| Waiting for query cache lock | 0.000007 | <= also here, to save query in QC
| freeing items | 0.000010 |
| Waiting for query cache lock | 0.000007 |
| freeing items | 0.000005 |
| storing result in query cache | 0.000009 |
| logging slow query | 0.000008 |
| cleaning up | 0.000007 |
+--------------------------------+----------+
24 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
(我不确定你是否已经知道这一点).当QC有100个与T1相关的查询时,一个连接插入T1(或删除或更新),刷新100个查询.所以有很多变化.关闭QC更好.这取决于你的环境.
当有200个连接且服务器速度很慢时,请查看此查询
如果你正使用InnoDB,然后检查innodb_thread_concurrency,innodb_read_io_threads和innodb_write_io_threads这些变量线程并发相关.