要进行优化, 必须先知道问题在哪里.
如果使用 phpMyAdmin, 可以查看【状态】-->【建议】
开启慢查询
一般建议启动慢查询日志, 因为 MySQL 默认是关闭的.
如果是 Linux 系统, 则配置文件 my.cnf 一般位于 /etc/mysql/my.cnf
使用 root 用户或其他有权限的账号编辑此文件, 找到 [mysqld] (如果使用 vim, 则键入 /\\[mysqld\\], 而不是 /[mysqld])
在这一段中找到
#log_slow_queries = /var/log/mysql/mysql-slow.log
#log_query_time = 2
将前面的注释符#去掉, 保存.
注意这里 log_query_time = n, n 指的是秒数, 超过这个时间的查询语句将被记录. 根据具体使用的环境, 一般设置 n为 1~5秒
查询缓存使用情况
mysql> show status like 'Qcache%';
+-------------------------+----------+
| Variable_name | Value |
+-------------------------+----------+
| Qcache_free_blocks | 3 |
| Qcache_free_memory | 16373216 |
| Qcache_hits | 322 |
| Qcache_inserts | 283 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 59 |
| Qcache_queries_in_cache | 175 |
| Qcache_total_blocks | 391 |
+-------------------------+----------+
8 rows in set (0.00 sec)
References:
https://www.cnblogs.com/sunss/archive/2010/10/13/1850407.html
InnoDB 日志文件大小设置的问题
问题:
InnoDB 日志文件大小不合适,此关系到 InnoDB 缓冲池。
建议:
在一个 InnoDB 表写入很多的系统上您应该将 innodb_log_file_size 设为 innodb_buffer_pool_size 的 25% 。因为该值越大,当数据库崩溃时恢复的时间就越长,所以该值不应高于 256 MB 。请注意您不能简单的修改该变量的值。您需要关闭服务器,删除 InnoDB 日志文件,在 my.cnf 中设置新的值,启动服务器,一切正常后再检查错误日志。参见这篇博客
现状:
您的 InnoDB 日志大小为 InnoDB 缓冲池大小的 3.9%,该值不应低于 20%
使用的变量/公式:
innodb_log_file_size / innodb_buffer_pool_size * 100
检验:
value < 20 && innodb_log_file_size / (1024 * 1024) < 256
mysql> show variables like 'innodb_log%';
+---------------------------+---------+
| Variable_name | Value |
+---------------------------+---------+
| innodb_log_buffer_size | 8388608 |
| innodb_log_file_size | 5242880 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
+---------------------------+---------+
4 rows in set (0.00 sec)
mysql> show variables like 'innodb_buffer%';
+------------------------------+-----------+
| Variable_name | Value |
+------------------------------+-----------+
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_size | 134217728 |
+------------------------------+-----------+
2 rows in set (0.00 sec)
打开 /etc/mysql/my.cnf
找到 InnoDB 所在行(一些描述),
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
增加下面两行
innodb_log_file_size=32M
innodb_buffer_pool_size=128M
关闭mysqld,
# service mysqld stop
删除 /var/lib/mysql/ 下面的 ib_logfile0, ib_logfile1, ..., ib_logfileN
# cd /var/lib/mysql
# rm ib_logfile0 ib_logfile1
启动 mysqld
# service mysqld start