mysql优化

        key_buffer_size 索引缓冲区大小

SHOW STATUS LIKE 'key_read%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Key_read_requests |9335458|
| Key_reads         |301    |
+-------------------+-------+
Key_reads是从硬盘上读取索引的次数,Key_read_requests是索引请求次数,Key_reads/Key_read_requests即索引失效率,此值越低越好,小于1/1000较好,可以通过调整key_buffer_size的值来调整索引的利用率,可以通过show variables like 'key_buffer_size';查看当前值,可以修改my.cnf文件添加key_buffer_size=32M来改变大小,此值也不是越大越好,太大会增加换页率反而降低效率。另,此值只对MyISAM表有效。

        table_open_cache 表缓存

SHOW GLOBAL STATUS LIKE 'Open%tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 400   |
| Opened_tables | 24257 |
+---------------+-------+
show variables like 'table%cache';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| table_definition_cache | 400   |
| table_open_cache       | 400   |
+------------------------+-------+
Open_tables是当前打开表的数量,Opened_tables是没有在缓存中找到的表数量,table_open_cache是缓存中表的最大数量,如果Open_tables=table_open_cache,而且Opened_tables在不断增加的时候就要增大table_open_cache的值了,通过修改/etc/my.cnf,添加table_open_cache = 1024来改变大小。该值与Connections有关,因为一般而言每个线程会独立打开一个表,手册建议table_open_cache = max_connections * n,n是sql语句中的最大表数。
         索引

show status like 'handler_read_%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Handler_read_first    | 0     |
| Handler_read_key      | 444   |
| Handler_read_next     | 0     |
| Handler_read_prev     | 0     |
| Handler_read_rnd      | 56    |
| Handler_read_rnd_next | 982   |
+-----------------------+-------+
前面4个参数都是对索引的读取次数,越大越好,后面2个参数是对数据文件读取的次数,如果Handler_read_rnd或Handler_read_rnd_next过大证明索引没有利用上,要优化sql语句,添加索引或者提高索引利用率。
        thread_cache_size 线程缓存

show global status like 'Thread%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 22    |
| Threads_created   | 3233  |
| Threads_running   | 1     |
+-------------------+-------+
show status like '%connections%';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Connections          | 3234  |
| Max_used_connections | 25    |
+----------------------+-------+
thread cache命中率为(Connections-Threads_created)/Connections,命中率当然越高越好,上面因为thread_cache_size=0,所以每有一个连接便重新建立了一个线程,可以修改my.cnf文件添加thread_cache_size=8来改变该值。如果是长连接thread_cache_size的值就不需要设置多大,因为长连接一旦连接就不会断开重新连接也就不需要重新创建线程,短连接要根据情况设置改值大小,和连接数、内存相关(1G8个,或者参考Threads_connected值)。

        innodb_buffer_pool_size innodb缓存

show status like  'Innodb_buffer_pool_%';
+-----------------------------------+-------+
| Variable_name                     | Value |
+-----------------------------------+-------+
| Innodb_buffer_pool_pages_data     | 277   |
| Innodb_buffer_pool_pages_dirty    | 0     |
| Innodb_buffer_pool_pages_flushed  | 26    |
| Innodb_buffer_pool_pages_free     | 234   |
| Innodb_buffer_pool_pages_misc     | 1     |
| Innodb_buffer_pool_pages_total    | 512   |
| Innodb_buffer_pool_read_ahead_rnd | 2     |
| Innodb_buffer_pool_read_ahead_seq | 11    |
| Innodb_buffer_pool_read_requests  | 22288 |
| Innodb_buffer_pool_reads          | 91    |
| Innodb_buffer_pool_wait_free      | 0     |
| Innodb_buffer_pool_write_requests | 53    |
+-----------------------------------+-------+
innodb buffer缓存innodb表的索引、数据、插入数据时的缓冲等,读取命中率=(Innodb_buffer_pool_read_requests - Innodb_buffer_pool_reads) / Innodb_buffer_pool_read_requests * 100%,通常要大于99%比较好,可以修改my.cnf文件添加innodb_buffer_pool_size=1G来改变该值,参考值=内存*70%~80%。


        如果确定不了参数可以先用mysql提供的参考配置试试,在usr/share/mysql/目录下的my-small.cnf   my-medium.cnf   my-large.cnf   my-huge.cnf   my-innodb-heavy-4G.cnf这几个文件。

        另,最好把mysql字符集设置成utf-8,兼容性更好,可避免中文乱码,在/etc/my.cnf 文件中的 [mysqld]下添加default-character-set=utf8 修改服务器编码,[client] 下添加default-character-set=utf8 修改客户端连接默认编码,一般来讲这个可以不设置,在客户端连接到数据库时客户端主动设置编码方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值