mysql genlog 分析_Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)...
對Mysql進行深入的分析對于發現mysql性能瓶頸和尋找優化策略是十分必要的。 我們可以從不同的粒度上對Mysql進行分析:可以整體分析服務器,或者檢查單個查詢或批查詢。
通過分析,我們得到的如下信息:
1、Mysql訪問得最多的數據
2、Mysql執行得最多的查詢的種類
3、Mysql停留時間最長的狀態
4、Mysql用來執行查詢的使用得最頻繁的子系統
5、Mysql查詢過程中訪問的數據種類
6、Mysql執行了多少種不同類型的活動,比如索引掃描。
Mysql提供了兩種查詢日志,它們可以為我們獲取以上信息提供幫助。 這兩種查詢日志為普通日志(general
log)和慢速日志(slow log)。
General log:
Geleral log記錄了服務器接收到的每一個查詢或是命令,無論這些查詢或是命令是否正確甚至是否包含語法錯誤,general log 都會將其記錄下來 ,記錄的格式為 {Time ,Id ,Command,Argument
}。也正因為mysql服務器需要不斷地記錄日志,開啟General
log會產生不小的系統開銷。 因此,Mysql默認是把General
log關閉的。 我們可以通過修改Mysql全局變量來開啟General
log功能或是更改日志存放路徑。
注意:mysql5.0 版本,如果要開啟slow log、general log,需要重啟,從MySQL5.1.6版開始,general query log和slow query log開始支持寫到文件或者數據庫表兩種方式,并且日志的開啟,輸出方式的修改,都可以在Global級別動態修改。
1、首先查看log_output,確認日志輸出到文件還是數據庫。
mysql> show variables like 'log_output';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| log_output ? ? ? | ?FILE |
+-------------------+-------+
1 row in set (0.00 sec)
通過以上結果可以發現,log_output的值為FILE,證明是輸出到日志文件,如果為TABLE則輸出到默認‘mysql’數據庫中的相應日志表,該表的默認引擎為CSV。
2、接下來通過如下命令可以查看 mysql默認的 General log 配置。
mysql> show global variables like '%general%';
+------------------+---------------------------+
| Variable_name | Value |
+------------------+---------------------------+
| general_log | OFF |
| general_log_file | /var/lib/mysql/ubuntu.log |
+------------------+---------------------------+
2 rows in set (0.00 sec)
general_log的值為OFF,所以當前general_log是關閉的。general_log_file變量的值是日志文件的路徑。
3、通過 set global general_log = on; 命令開啟General log。
4、最后我們可以從/var/lib/mysql/ubuntu.log文件中查看相應日志信息。
Slow
log:
General log日志內容比較簡單,不包含執行時間或其他只有在查詢結束之后才能得到的信息,相反,slow
log 記錄了這些內容。
1、我們首先來看一下與慢日志相關的全局變量。
mysql> show global variables like '%slow%';
+---------------------+--------------------------------+
| Variable_name | Value |
+---------------------+--------------------------------+
| log_slow_queries | ON |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/ubuntu-slow.log
|
+---------------------+--------------------------------+
4 rows in set (0.00 sec)
筆者的mysql已經開啟了慢日志選項。變量slow_launch_time的值代表著捕獲所有執行時間超過2秒的查詢。slow log可以記錄沒有使用索引的查詢,它也能記錄執行速度比較慢的管理命令。
開啟log_queries_not_using_indexes,將會記錄沒有使用索引的查詢到slow日志里。
mysql> show global variables like '%not_using%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF |
+-------------------------------+-------+
1 row in set (0.00 sec)
slow log 的日志格式為:
# Time: 111108 19:38:00
# User@Host: root[root] @ localhost []
# Query_time: 15.268541 Lock_time: 0.000237 Rows_sent: 1 Rows_examined: 102
use mytest;
SET timestamp=1320752280;
select count(a.b) from mytable a ,mytable b ,mytable c ,mytable d;
慢速日志的確提供了很多有用的信息,但是不代表出現的查詢一定一直都是慢的。如果同樣的查詢在慢速日志里出現了多次,那么它的確需要優化,但是如果只是出現了偶爾一兩次,則有可能是其他客觀原因造成的,比如某些鎖,I/O磁盤物理性問題,網絡問題等等。
慢速日志的slow_launch_time的時間單位為秒,可以通過網上第三方補丁將其更改為毫秒級,用于更加精細的日志記錄和分析,但是這需要重新編譯mysql。
我們通常在日志中查找下面幾個信息:長查詢、影響比較大的查詢和新查詢。這可能需要我們自己寫一下腳本或是借助某些第三方工具進行日志分析。
General log 系統開銷比較大,一般不建議開啟。
總結
以上是生活随笔為你收集整理的mysql genlog 分析_Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fsimage文件丢失_hadoop f
- 下一篇: kylin安装mysql_源码安装mys