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.