最近的任务是sql执行性能优化,一边学习一边记录吧。
写在前面
mysql性能优化是程序员一项很重要的技能。
作为以web开发为主战场的php程序员也不例外。web的性能消耗还是主要在数据存储、查询这块,就算你的网站做了访问的负载均衡等优化,但是最终的压力还是要到数据库这一层。
缓存Cache是分担数据库压力很重要的一环,但是本事sql执行的性能也是非常重要的。而且学习掌握数据库优化技巧是通用的技能,不管你是php程序员也好,或者java,go等等,只要你想成为出色的程序员,你就应该去学习掌握。
开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
相关配置说明和查看
关于慢查询日志,mysql的以下几个配置是关联的。
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的文件
long_query_time 查询超过多少秒才记录
可以使用以下命令查看配置:
查看是否开启慢查询记录日志 和 慢查询日志的文件位置
SHOW VARIABLES LIKE 'slow_query%'
查看慢查询界定时间(单位:s)
SHOW VARIABLES LIKE 'long_query_time%'
在配置文件中添加配置
可以在mysql配置文件中直接修改这些配置: (我的 /etc/my.cnf)
在 【mysqld】模块下
配置了慢查询日志记录的位置: log-slow-queries=/var/lib/mysql/slow.log
还是超过多少时间算慢查询:long_query_time=1
注意:这个slow.log 需要给mysql运行账号的写权限
顺便说下,log-bin 是记录除select语句之外的所有sql语句到日志中,可以用来恢复数据文件,在数据库的主从复制中也需要用到。
测试
先重启下mysql服务: service mysqld restart
执行一条慢查询sql: select sleep(2);
再查看下慢查询日志文件:
cat /var/lib/mysql/slow.log
如果日志存在,那么mysql开启慢查询就算成功了。