sky 发表于 2013-5-7 08:58:06

解决:设置mysql的query_cache_size值无效

在mysql中开启query_cache,有时可以提高查询效率。默认情况下query_cache是关闭的。我在测试mysql的查询缓存时遇到了这么一个问题:
mysql> show global variables like 'query_cache%';
+------------------------------+---------+
| Variable_name                                | Value        |
+------------------------------+---------+
| query_cache_limit                        | 1048576        |
| query_cache_min_res_unit                | 4096        |
| query_cache_size                        | 0                |
| query_cache_type                        | ON                |
| query_cache_wlock_invalidate        | OFF                |
+------------------------------+---------+
5 rows in set (0.00 sec)

mysql> set global query_cache_size=1024;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show global variables like 'query_cache%';
+------------------------------+---------+
| Variable_name                                | Value        |
+------------------------------+---------+
| query_cache_limit                        | 1048576        |
| query_cache_min_res_unit                | 4096        |
| query_cache_size                        | 0                |
| query_cache_type                        | ON                |
| query_cache_wlock_invalidate        | OFF                |
+------------------------------+---------+
5 rows in set (0.00 sec)

从显示结果可以看出设置无效,而且有一个警告,我们看看警告内容是什么:
mysql> show warnings;
+---------+------+----------------------------------------------------------------+
| Level   | Code | Message                                                                                |
+---------+------+----------------------------------------------------------------+
| Warning | 1282 | Query cache failed to set size 1024; new query cache size is 0        |
+---------+------+----------------------------------------------------------------+
1 row in set (0.00 sec)

警告说我设置的值1024失败,为什么呢?看看mysql的参考手册:
############################################################
# 当设置query_cache_size变量为非零值时,应记住查询缓存至少大约需要40KB来分配其数据结构。(具体
# 大小取决于系统结构)。如果你把该值设置的太小,将会得到一个警告,如本例所示:
#
# mysql> SET GLOBAL query_cache_size = 40000;
#
# Query OK, 0 rows affected, 1 warning (0.00 sec)

############################################################
由此得知我们设置的值太小了,至少应该大于40KB,我们重新设置一个大点的值看看:
mysql> set global query_cache_size=1024*50;
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like 'query_cache%';
+------------------------------+---------+
| Variable_name                                | Value        |
+------------------------------+---------+
| query_cache_limit                        | 1048576        |
| query_cache_min_res_unit                | 4096        |
| query_cache_size                        | 51200        |
| query_cache_type                        | ON                |
| query_cache_wlock_invalidate        | OFF                |
+------------------------------+---------+
5 rows in set (0.00 sec)

这次设置的值没有警告信息了,而且再次查看发现有值了,成功了!

一般在生产环境不会遇到这样的问题,因为谁也不会把这个值设置成小于40KB的,我这是在测试时遇到的。
而且这里面有一个小技巧,就是show warnings;这个可以查看警告具体内容,很好。

shuaiwei588 发表于 2013-5-7 09:09:08

老天,你让夏天和冬天同房了吧?生出这鬼天气!

常青树 发表于 2013-5-16 22:29:36

我在马路边丢了一分钱

xxxmenger 发表于 2013-5-18 06:07:41

人生重要的不是所站的位置,而是所朝的方向!

殇帝刘玢你 发表于 2013-5-19 08:43:48

我妈常说,我们家要是没有电话就不会这么穷。

741057228我QQ 发表于 2013-5-20 18:44:28

只要不下流,我们就是主流!

yzwj2004 发表于 2013-5-22 05:06:18

不错不错,楼主您辛苦了。。。
页: [1]
查看完整版本: 解决:设置mysql的query_cache_size值无效