本文要说的是由MySQL数据库引起的网站打开速度慢的一个排查思路,如果是带宽跑满等其他情况则需要用其他方法
执行数据库语句,看看有没有语句长时间出现,正常数据都是毫秒执行,如果好几秒都在列表里,那肯定是有问题
mysql > show full processlist ;
也可以通过-e选项执行后grep过滤
mysql -uroot -p -e "show full processlist" |grep -vi sleep
开启慢查询日志,如超过2秒的查询记录进日志
vi /etc/my.cnf
slow_query_log = on #开启慢查询日志
slow_query_log_file = filename #指定日志文件保存路径
long_query_time = 2 #指定达到多少秒才算慢查询
如果发现语句有多个查询条件且重复值多,那么在重复少的条目上创建索引
排查实例:
某论坛打开速度很慢,按上述方式检查后发现有很多查询语句,都是用论坛的搜索框搜索的,那么优化思路如下:
1、网站程序上做调整,需要登录后才能搜索,这样可以减少搜索次数,减轻数据库压力
2、如果有大量频繁的搜索,分析web日志(awstats),有可能是爬虫,封掉就可以了
2、数据库做主从同步,读写分离
3、数据库前端做Memcache缓存服务器
4、类似'%避孕套%'这样的语句很难做索引优化,可以通过专门的搜索服务(如Sphinx)来实现搜索,不让数据库去做这个事。