適用於MySQL 5.1
取自high performance MySQL.
general log和slow log之區別(具體名字並非如此):
show variables like '%query%';
+------------------------------+-------------------------------+
| Variable_name | Value |
+------------------------------+-------------------------------+
| ft_query_expansion_limit | 20 |
| have_query_cache | YES |
| long_query_time | 60.000000 |
| query_alloc_block_size | 8192 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 16777216 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| query_prealloc_size | 8192 |
| slow_query_log | ON |
| slow_query_log_file | /var/log/mysql/MySQL-slow.log |
+------------------------------+-------------------------------+MySQL> show variables like '%general%';
+------------------+----------------------------+
| Variable_name | Value |
+------------------+----------------------------+
| general_log | OFF |
| general_log_file | /var/run/mysqld/MySQLd.log |
+------------------+----------------------------+
2 rows in set (0.00 sec)
這兩個log一般默認是不打開的,可以在my.cnf修改相關設置。它們主要用來記錄查詢的執行信息。
general.log:什麼查詢都記錄,其中有些查詢甚至是沒通過語法分析的,帶有錯誤;
slow.log:只記錄查詢執行時間大於long_query_time的一類查詢。分析log文件並不能得到很多信息,往往使用explain命令查看MySQL對某個查詢產生的查詢計劃。
eg. explain select count(*) from t;MySQL> explain select count(*) from tG
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: NULL
type: NULL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: NULL
Extra: Select tables optimized away
1 row in set (0.00 sec)另外show status、show session status、show profiles、show profile,show processlist也可以派上用場。
flush status,show status經常配對用來對某個階段的工作審查。
比如
flush status
select count(*) from t;
show status
可以查看上面query的影響。
另外如果數據庫默認沒有啟用profiling,在某個session中啟用它,可以查看到很多具體信息,如查詢使用cpu情況。
set profiling=1;
select count(*) from t;
show profiles;
或show profile cpu for query 1;操作系統級別的審查命令:
Operating system profiling;
查看虛擬存儲,頁表,IO等。
vmstat,mpstat,iOStat,strace等。