现在的位置: 首页 > 综合 > 正文

MySQL优化篇

2013年10月01日 ⁄ 综合 ⁄ 共 1528字 ⁄ 字号 评论关闭

MySQL配置文件在安装路径下有这几个文件:

 

1.my-huge.ini

 

2.my-medium.ini

 

3.my-large.ini

 

4.my-small.ini

 

不同流量和不同服务器环境,选择上述的不同配置文件。一般情况下,my-medium.ini能够满足大部分需求。

 

show variables;可以查看目前所有的参数.

 

先来看看三个重要的参数:key_buffer_size,query_cache_size,table_cache

 

key_buffer_size仅对MyIsam表起作用,他指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引的读速度。

 

一般我们设置为16M,实际上大一点的站点,这个参数是远远不够的。

 

通过查看key_reads : key_read_requests,可以知道key_buffer_size是否合理。

 

key_reads : key_read_requests应该尽可能的低,至少是1:100或1:1000更好。

 

上述状态值可以使用show status like 'key_read%'.

 

下面是一组运行了30天的MySQL运行信息:

 

key_buffer_size : 128M

 

key_read_requests:65075289

 

key_reads:79112

 

比例接近1:8000,说明状况非常好

 

从4.0.1开始,Mysql提供了查询缓冲机制。使用查询缓冲,mysql将select和查询结果

 

存放在缓冲区中,今后对于同样的select语句(区分大小写),将直接从缓冲区中读取

 

查询结果。根据mysql用户手册,使用查询缓冲最大可以达到238%的效率提升。

 

通过调节一下几个参数可以知道query_cache_size设置是否合理:

 

Qcache inserts,Qcache hits,Qcache lowmem prunes,Qcache free blocks,Qcache total blocks

 

Qcache_lowmem_prunes的值非常大,则说明经常出现缓冲不够的现象,同时Qcache_hits的值

 

非常大,则说明查询缓冲使用非常频繁,此时需要增加缓冲大小Qcache_hits的值不大,则表明查

 

询重复效率很低。这种情况下使用查询缓冲反而影响效率。在select中加入SQL_NO_CACHE则不

 

缓冲结果。

 

Qcache_free_blocks,如果该值非常大,则表明缓冲区碎片很多。

 

Query_cache_type决定是否使用查询缓冲。

 

table_cache指定表告诉缓存的大小。每当Mysql访问一个表时,如果在缓冲区还有空间,该表就

 

被打开并放入其中,这样可以更快的访问内容。通过检查峰值时的状态值open_tables和opened_Tables,可以决定是否需要增加table_cache值。

 

如果你发现open_tables等于table_cache并且opened_tables在不断增长,那么就需要增加table_cache值了。不能盲目的把table_cache设置的很大,否则会造成文件描述符不足,从而导致性能不稳定或者连接失败。

 

多余1G内存的机器,推荐128-256M。

 

下面是一台运行了30天的机器,设置table_cache=256

 

得到一下状态:open tables 256;  opened tables 9046

 

虽然open_tables等于table_cache,但相对于服务器运行时间,已经运行了30天,opened_tables的值也非常低,所以无需增加table_cache.

 

如果仅仅在6个小时内疚出现上述状态信息,那么就需要考虑加大table_cache了。

抱歉!评论已关闭.