前几天发现博客的响应速度略有降低,除了经常被并发攻击所导致的线程等待原因外,隐隐觉得是不是在数据库方面还有提升的空间。因此打开了MySQL慢查询日志记录开关,记录查询超过1秒的
/usr/libexec/mysqld, Version: 5.1.73-log (Source distribution). started WITH:
Tcp port: 4000 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 140720 5:00:55
# User@Host: twx[twx] @ localhost []
# Query_time: 1.421887 Lock_time: 0.026132 Rows_sent: 232 Rows_examined: 279
USE wordpress;
SET timestamp=1405803655;
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';
可以看到,SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes' 这条语句在日志中大量存在,而且查询时间都是在1.5秒左右,这是不能忍受的,因此需要查看执行计划,分析这条语句为什么会这么慢。MySQL的explain语句可以帮助我分析原因:
mysql> EXPLAIN SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';