一,查询缓存
Query Cache对于繁更新的表,查询缓存是不适合的,而对于一些不常改变数据且有大量相同sql查询的表,查询缓存会节约很大的性能
查询缓存的相关参数
1)query_cache_limit允许进入查询缓冲区的最小数据大小,默认值是1MB
2)query_cache_size决定分配给缓存的内存数量,单位是字节。 ,默认是0
3)query_cache_type OFF | ON指定查询缓冲的类型,0是关闭,1为开启缓默认为1.
4)read_buffer_size = n 为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB);
5)read_rnd_buffer_size = n 类似于read_buffer_size选项,但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)
6)join_buffer_size = n 在参加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。
查询缓存的性能评估
1)用这个命令查看:mysql> SHOW VARIABLES LIKE '%query_cache%';
have_query_cache YES --查询缓存是否可用
query_cache_limit 1048576 --可缓存具体查询结果的最大值
query_cache_size 599040 --查询缓存的大小
query_cache_type YES --阻止或是支持查询缓存
2)在 SHOW STATUS 中,你可以监视查询缓存的性能:
变量含义
Qcache_queries_in_cache 在缓存中已注册的查询数目
Qcache_inserts 被加入到缓存中的查询数目
Qcache_hits 缓存命中的次数
Qcache_lowmem_prunes 因为缺少内存而被从缓存中删除的查询数目
Qcache_not_cached 没有被缓存的查询数目 (不能被缓存的,或由于 QUERY_CACHE_TYPE)
Qcache_free_memory 查询缓存的空闲内存总数
Qcache_free_blocks 查询缓存中的空闲内存块的数目
Qcache_total_blocks 查询缓存中的块的总
二,索引缓存
key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。对于内存在2GB左右的服务器该参数可设置为128M,性能由一下几个参数决定
1)Key_read_requests :是从cache中读索引的请求
2)Key_reads :是从物理硬盘上读索引的次数
通过二者的比值即
key_reads /key_read_requests来决定,其比值越小性能就越优,至少是1:100
状态值可以使用SHOW STATUS LIKE ‘key_read%’获得
key_buffer_size �C 128M
key_read_requests �C 650759289
key_reads - 79112
3) 比例接近1:8000 健康状况非常好
三, 表缓冲区的限制
table_cache指定表高速缓存的大小,值在2G内存以下的机器中的值默认时256到512可通过以下两个参数来衡量其性能
(1) Open_tables :表示当前打开的表数目
(2)opened_tables :表示累计已经打开的表数目
通过二者的比值来调整性能,如果Opened_tables远大于Open_tables,并且Open_tables很接近table_cache,那么就说明table_cache偏小
可用该命令查看:mysql> SHOW STATUS like '%open_%'
四,连接数限定
(1)back_log :指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中,默认值为50。对于Linux系统推荐设置为小于512的整数。
(2) max_connections :允许并发连接的数量,该值过小你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。
五,等待时间限制
1)interactive_timeout :对后续起的交互链接有效 。 默认数值是28800
2)wait_timeout:对当前交互链接有效,服务器在关闭连接之前在一个连接上等待行动的秒数,默认数值是28800,即如果没有事情发生,服务器在 8个小时后关闭连接
注意二者的值要相等否则不生效