MySQL 查询缓存设置(Query Cache Configuration)

4 篇文章 0 订阅
3 篇文章 0 订阅


MySQL的系统参数“have_query_cache”标识数据库是否支持query_cache。可以如下查询该参数:

	mysql> SHOW VARIABLES LIKE 'have_query_cache';
	+------------------+-------+
	| Variable_name    | Value |
	+------------------+-------+
	| have_query_cache | YES   |
	+------------------+-------+


FLUSH QUERY CACHE
对查询缓存内存进行碎片整理。

如果使用的是标准的二进制版本MySQL,即使查询缓存被禁用,这个值也一直是“YES”。

通过一些其他的系统参数设置查询缓存操作。可以再配置文件或者通过mysqld在命令行启动
mysql的时候指定这些参数。这些系统参数都以“query_cache_”作为前缀。


query_cache_size

表示查询缓存占用的内存大小。如果为0,表示禁用查询缓存。默认为‘0’。设置query_cache_size
时,值需要大于40KB,因为mysql需要至少40KB空间来分配查询缓存的结构。如果你设置的值过小,
mysql会发出警告,比如:

	mysql> SET GLOBAL query_cache_size = 40000;
	Query OK, 0 rows affected, 1 warning (0.00 sec)

	mysql> SHOW WARNINGS\G
	*************************** 1. row ***************************
	  Level: Warning
		Code: 1282
	Message: Query cache failed to set size 39936;
			  new query cache size is 0

	mysql> SET GLOBAL query_cache_size = 41984;
	Query OK, 0 rows affected (0.00 sec)

	mysql> SHOW VARIABLES LIKE 'query_cache_size';
	+------------------+-------+
	| Variable_name    | Value |
	+------------------+-------+
	| query_cache_size | 41984 |
	+------------------+-------+

如果想要真正缓存一些查询,需要将‘query_cache_size’的值设置的大一些。比如:

‘query_cache_size’的值会被自动对齐到1024的倍数,因此看到的实际大小可能会比你设置的
值略小一些。

	mysql> SET GLOBAL query_cache_size = 1000000;
	Query OK, 0 rows affected (0.04 sec)

	mysql> SHOW VARIABLES LIKE 'query_cache_size';
	+------------------+--------+
	| Variable_name    | Value  |
	+------------------+--------+
	| query_cache_size | 999424 |
	+------------------+--------+
	1 row in set (0.00 sec)

query_cache_type

将‘query_cache_size’的值设置为大于0后,‘query_cache_type’的值将会影响它具体怎么工
作。
0 / OFF: 表示禁用查询缓存
1 / ON : 开启查询缓存,可以通过指定‘SELECT SQL_NO_CACHE’指定不使用查询缓存。
2 / DEMAND:只有使用‘SELECT SQL_CACHE’查询时使用查询缓存。

如果‘query_cache_size’值为‘0’,你需要同样将‘query_cache_type’设为‘0’。这种情况下,
服务器不再获取查询缓存互斥锁,意味着你不能在数据库服务器运行时启用查询缓存,这降低了
处理查询时的部分开销。

设置全局(global)范围的‘query_cache_type’会影响之后进行所有的查询缓存行为。不同
客户端可以通过设置会话(session)范围的‘query_cache_type’改变自己的查询缓存方式。
<span style="white-space:pre">	</span>mysql> SET SESSION query_cache_type = OFF;


如果你要在数据库启动时指定‘query_cache_type’值,只能使用数字的方式指定。

通过‘query_cache_limit’参数指定单个查询所能占用的查询缓存大小,默认值为1M。小心不
要将该值设置过大,由于线程需要在更新数据期间锁定缓存,该值过大可能导致锁定缓存问题占用
大量查询缓存的内存。

你可以在命令行或者配置文件中使用‘--maximum-query_cache_size=32M’指定在数据库服务器
运行时使用‘set’所能指定的最大缓存大小。

当一个查询需要被缓存时,在客户端取回查询结果集的同时,结果集会被存放到查询缓存中。
结果集数据通常不会被放在一个大的内存块中。查询缓存在需要时分配内存块用来存放这些数据,
当一个内存块被填满时,一个新的内存块就会被分配。由于分配内存的开销比较大,所以查询缓存
根据指定的‘query_cache_min_res_unit’值来决定分配内存块的大小。当一个查询执行后,最后一
个查询缓存内存块会被调整为实际的数据大小,以便释放掉未使用的内存。根据数据库服务器执行
的SQL的类型不同,你可能会发现通过调整‘query_cache_min_res_unit’的大小可以带来不错的性能
提升。
query_cache_min_res_unit:
* 默认值为4K,这应该适用于大多数情况。
* 如果很多查询的结果集非常小,变量的默认大小可能会导致内存碎片化,即产生了很多空闲
 内存块。碎片内存可以导致查询缓存由于可用内存不足删除已缓存结果。在这种情况下,减
 小变量值。空闲碎片数和删除的缓存结果数可以通过给定的变量‘Qcache_free_blocks’和
 ‘Qcache_lowmem_prunes’查看。
* 如果大多数查询的结果集很大(检查‘Qcache_total_blocks’和‘Qcache_queries_in_cache’)
 ,可以通过增大变量值提升性能。但是,一定要注意不要将该值设置的过大。


如果想要禁用查询缓存,可以在启动mysql时指定‘query_cache_type=0’。


如果发现又任何错误,请留言或发送邮件至ytc2007@126.com












































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值