> 数据库 > MySQL >

mysql数据库优化

mysql数据库优化成了这几天的老大难问题。疯狂的寻找mysql优化的资料,觉得有用的不少,记录下跟大家分享,对了,这里仅仅是mysql数据库本身的优化,没有写磁盘之类的:

开始之前,介绍俩mysql的命令:
show global status;    查看运行状态的,显示运行各种状态值
show variables;          查询MySQL服务器配置信息的
ps:在命令里面设置配置信息的话,下次重启不起作用,所以要写到my.cnf里面。

1.慢查询
就是语句执行需要的时间,如果超过设定的值,则进行记录。

show variables like '%slow%';这个可以查看是否开启及设置的时间,单位为秒。
show global status like '%slow%';这个是查看统计情况

2.连接数
遇见”MySQL: ERROR 1040: Too many connections”的情况,一种是访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_connections值过小:

show variables like 'max_connections';查看最大连接数
mysql> show global status like 'Max_used_connections'查看目前出现的最大连接数

推荐的两个者的比例:Max_used_connections / max_connections * 100% ≈ 85%

3.Key_buffer_size

show variables like 'key_buffer_size';显示目前Key_buffer_size的设置值,单位是字节。

那么这个参数设置多少合适呢,一般是内存的1/4大小。如何确定一个合适的值呢?
show global status like 'key_read%';这个是看索引请求(Key_read_requests)的,还可以查看内存中没有找到直接从硬盘读取索引(Key_reads)。两者的比值Key_reads / Key_read_requests越小越好,至少是1:100,1:10000算是很不错。不过比例再大的话,也没有很大的意义了。

MySQL服务器还提供了key_blocks_*参数:show global status like 'key_blocks_u%';
Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过渡索引了,把缓存占满了。比较理想的设置:
Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 80%

4.Open_tables

show global status like 'open%tables%';查看打开表的情况
Open_tables表示打开表的数量,Opened_tables表示打开过的表数量,如果Opened_tables数量过大,说明配置中table_cache(5.1.3之后这个值叫做table_open_cache)值可能太小。
比较适合的值:
Open_tables / Opened_tables * 100% >= 85%
  Open_tables / table_cache * 100% <= 95%

5.查询缓存(query cache)

(责任编辑:IT)