MysqlSQL性能重要的两个指标:响应时间(Response Time)和吞吐量(Throughput)
1. EXPLAIN 你的 SELECT 查询;
2. PROCEDURE ANALYSE() 你可以得到相关的建议。
3. using等价于join操作中的on,例如a和b根据id字段关联,那么以下等价
~~~
using(id);
on a.id=b.id;
~~~
4. 在终端下profiling的使用方法;
~~~
show variables like '%profil%'; #查看参数是否开启;
select @@profiling; #查看是否已经启用profile
set profiling=1; #不是全局的只能在当前会话;
show profiles; #查看会话建立后的所有语句;
show profile for query 6; #分析ID=6的语句;
show profile block io,cpu for query 6; #获取 CPU 和 Block IO 的消耗;
show profile all for query 6; #查询其他;
show profile cpu,block io,memory,swaps,context switches,source for query 6; #查询其他;
~~~
5. 监控工具
Nagios
6. mysql内存计算器;
`http://www.mysqlcalculator.com/`
7. 查看那些进程在运行
~~~
show processlist; #查看前100;
show full processlist; #查看所有;
~~~
8. 慢查询查看慢查询是否开启;
~~~
show variables like '%quer%';
set global slow_query_log = ON; #开启慢查询日志;
set global long_query_time = 5; #设置慢查询时间,默认是0.000000;
show variables like 'long%'; #查看设置时间;
set global slow_query_log_file='/data/mysql/new-slow.log'; #配置慢查询路径;
~~~
慢查询工具:mysqlsla
mysqldumpslow命令 #慢查询分析;
-s 后面接下面的参数表示 mysqldumpslow 结果显示的顺序!
c query执行的次数
t sql执行的时间
l lock锁表的时间
r sql返回的行数
ac,at,al,ar, 表示倒序排列
-t, 是top n,即为返回前面n条数据。
-g, 后边可以写一个正则匹配模式,大小写不敏感
显示执行时间最长的前两个
~~~
[root@rac3 python]# mysqldumpslow -s t -t 2 /opt/mysql/data/slowquery.log
Reading mysql slow query log from /opt/mysql/data/slowquery.log
Count: 2 Time=412.54s (825s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost
select count(N) from sbtest ,t1 where t1.c=sbtest.c
Count: 1 Time=778.20s (778s) Lock=0.00s (0s) Rows=1.0 (1), root[root]@localhost
select count(N) from sbtest where sbtest.id not in ( select id from t1 )
~~~
#显示次数最多的前两个
~~~
[root@rac3 python]# mysqldumpslow -s c -t 2 /opt/mysql/data/slowquery.log
Reading mysql slow query log from /opt/mysql/data/slowquery.log
Count: 12 Time=0.00s (0s) Lock=0.00s (0s) Rows=1.0 (12), root[root]@localhost
select count(N) from tab_1
Count: 2 Time=412.54s (825s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@localhost
select count(N) from sbtest ,t1 where t1.c=sbtest.c
~~~
9.