MySql的设计中大量使用了缓存,下面这些缓存配置项是应该熟知的

key_buffer_size


key_buffer_size是设置MyISAM表索引的缓冲区大小,此参数对MyISAM表性能影响最大

对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB


table_cache

table_cache是指表高速缓存的大小。当MySQL访问一个表时,如果在MySQL表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容

一般通过查看 Open_tables 和 Opened_tables 这两个状态的值,来判断是否需要增加table_cache的值,如果open_tables接近table_cache,并且 Opened_tables这个值在逐步增加,那就要考虑增加table_cache的大小了

sort_buffer_size

sort_buffer_size指的是查询排序时所能使用的缓冲区大小,系统默认大小为2MB

该参数对应的分配内存是每连接独占的,如果有100个连接,那么实际分配的总排序缓冲区大小为100×6MB=600MB。所以,对于内存在4GB左右的服务器来说,推荐将其设置为6~8MB

read_buffer_size

read_buffer_size指的是读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享,值的设置可参照sort_buffer_size

join_buffer_size

join_buffer_size指的是联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享,值的设置可参照sort_buffer_size

thread_cache_size

thread_cache_size用于设置Thread Cache池中可以缓存的连接线程最大数量,可设置为0~16384,默认为0

这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时,如果缓存中还有空间,那么客户端的线程将被放到缓存中;如果线程重新被请求,那么请求将从 缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能

1GB内存 -> 8
2GB内存 -> 16
3GB内存 -> 32
4GB及以上可以给此值为64或更大的数值

query_cache_size

query_cache_size指定MySQL查询缓冲区的大小。观察MySQL状态,如果 Qcache_lowmem_prunes 的值非常大,则表明经常出现缓冲不够的情况;如果Qcache_hits的值非常大,则表明查询缓冲使用得非常频繁;对于 Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多

tmp_table_size

tmp_table_size用于设置内存临时表的最大值。如果超过该值,则会将临时表写入磁盘,其范围为1KB到4GB