大访问量的情况下,可添加节点或改变架构可有效的缓解数据库压力,不过一切的原点,都是从单台mysql开始的。

下面总结一些使用过或者研究过的经验,从配置以及调节索引的方面入手,对mysql进行一些优化。
第一步应该做的就是排查问题,找出瓶颈,所以,先从日志入手

开启慢查询日志
mysql>show variables like “%slow%”; 
查看慢查询配置,没有则在my.cnf中添加,如下

log-slow-queries = /data/log/slow.log#日志目录

long_query_time = 1#记录下查询时间查过1

#log-queries-not-using-indexes#表示记录下没有使用索引的查询

 

分析日志 – mysqldumpslow
分析日志,可用mysql提供的mysqldumpslow,使用很简单,参数可–help查看

# -s:排序方式。c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;

#ac , at , al , ar 表示相应的倒叙;# -t:返回前面多少条的数据;# -g:包含什么,大小写不敏感的;

mysqldumpslow -s r -10 ./slow.log#slow记录最多的10个语句

mysqldumpslow -s t -10 -"left join" ./slow.log#按照时间排序前10中含有"left join"

 

推荐用分析日志工具 – mysqlsla

wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz

tar zvxf mysqlsla-2.03.tar.gz

cd mysqlsla-2.03

perl Makefile.PL

makemakeinstall

mysqlsla /data/log/slow.log

【说明】

queries total: 总查询次数 unique:去重后的sql数量

sorted by : 输出报表的内容排序

最重大的慢sql统计信息包括平均执行时间等待锁时间结果行的总数扫描的行总数.

Count, sql的执行次数及占总的slow log数量的百分比.

Time, 执行时间包括总时间平均时间最小最大时间时间占到总慢sql时间的百分比.

95% of Time, 去除最快和最慢的sql, 覆盖率占95%sql的执行时间.

Lock Time, 等待锁的时间.

95% of Lock , 95%的慢sql等待锁时间.

Rows sent, 结果行统计数量包括平均最小最大数量.

Rows examined, 扫描的行数量.

Database, 属于哪个数据库

Users, 哪个用户,IP, 占到所有用户执行的sql百分比

Query abstract, 抽象后的sql语句

Query sample, sql语句