分析mysql日志文件_MySQL日志文件与分析
1.查詢?nèi)罩尽⒙樵內(nèi)罩尽⒍M(jìn)制日志對(duì)比
查詢?nèi)罩?/p>
general_log
會(huì)記錄用戶的所有操作,其中包含增刪查改等
可以指定輸出為表
慢查詢?nèi)罩?/p>
slow_log
只要超過定義時(shí)間的所有操作語句都記錄
可以指定輸出為表
二進(jìn)制日志
log_bin
記錄可能執(zhí)行更改的所有操作
mysqlbinlog查看
2.日志的分析
2.1日志的存儲(chǔ)
數(shù)據(jù)操作過程中,Mysqld是將接收到的語句按照接收的順序(注意不是執(zhí)行順序)寫到查詢?nèi)罩疚募小R粭l一條就類似這樣:
# Time: 070927 8:08:52
#User@Host: root[root] @ [192.168.0.20]
# Query_time: 372 Lock_time: 136 Rows_sent: 152 Rows_examined: 263630select id, name from manager where id in (66,10135);
這樣的話,當(dāng)我們?nèi)ゲ榭慈罩緝?nèi)容時(shí)就會(huì)灰常費(fèi)時(shí)費(fèi)神費(fèi)眼睛。那么應(yīng)該怎么破?
自5.1.6版本起,就有一波新功能出爐,比如查詢?nèi)罩究梢詫懙綌?shù)據(jù)庫系統(tǒng)中的專用表。
MySQL的命令行在啟動(dòng)時(shí)可以加載很多參數(shù),其中就提供了一個(gè)日志專用的參數(shù)--log-output,用來指定日志文件的輸出方式.
--log-output參數(shù)可選值有三個(gè):
TABLE:記錄到數(shù)據(jù)庫中的日志表;
FILE:記錄到日志文件,默認(rèn)值即為FILE?(在5.1.6到5.1.20版本時(shí),默認(rèn)值為TABLE);
NONE:不記錄。
(1)可以是TABLE、FILE、NONE,也可以是TABLE及FILE的組合(用逗號(hào)隔開),默認(rèn)為TABLE。
(2)如果組合中出現(xiàn)了NONE,那么其它設(shè)定都將失效,同時(shí),無論是否啟用日志功能,也不會(huì)記錄任何相關(guān)的日志信息。
(3)作用范圍為全局級(jí)別,可用于配置文件,屬動(dòng)態(tài)變量。
(4)啟用mysqld進(jìn)程時(shí)附加--log-output指定日志輸出類型。
MySQL支持將慢查詢?nèi)罩颈4娴絤ysql.slow_log這張表中:
2.2慢查詢分析工具
如果慢查詢?nèi)罩据敵鲱愋鸵呀?jīng)指定了FILE,在日志量大的情況下,我們可以借助一些分析工具。
(1)mysqldumpslow
mysql 自帶慢查詢?nèi)罩痉治龉ぞ?mysqldumpslow,使用很簡(jiǎn)單,可以跟-help來查看具體的用法。
主要功能:統(tǒng)計(jì)不同慢sql的出現(xiàn)次數(shù)(Count)?執(zhí)行最長時(shí)間(Time), 累計(jì)總耗費(fèi)時(shí)間(Time), 等待鎖的時(shí)間(Lock), 發(fā)送給客戶端的行總數(shù)(Rows), 掃描的行總數(shù)(Rows), 用戶以及sql語句本身(抽象了一下格式, 比如 limit 1, 20 用 limit N,N 表示).
(2)mysqlsla
功能非常強(qiáng)大. 數(shù)據(jù)報(bào)表,非常有利于分析慢查詢的原因, 包括執(zhí)行頻率, 數(shù)據(jù)量, 查詢消耗等.
格式說明如下:
總查詢次數(shù) (queries total), 去重后的sql數(shù)量 (unique)輸出報(bào)表的內(nèi)容排序(sorted by)最重大的慢sql統(tǒng)計(jì)信息, 包括平均執(zhí)行時(shí)間, 等待鎖時(shí)間, 結(jié)果行的總數(shù), 掃描的行總數(shù)。
Count:??????????????????? sql的執(zhí)行次數(shù)及占總的slow log數(shù)量的百分比。
Time:???????????????????? 執(zhí)行時(shí)間, 包括總時(shí)間, 平均時(shí)間, 最小, 最大時(shí)間, 時(shí)間占到總慢sql時(shí)間的百分比。
95% of Time:?????? 去除最快和最慢的sql, 覆蓋率占95%的sql的執(zhí)行時(shí)間。
Lock Time:?????????? 等待鎖的時(shí)間。
95% of Lock:??????? 95%的慢sql等待鎖時(shí)間。
Rows sent:???? ?????? 結(jié)果行統(tǒng)計(jì)數(shù)量, 包括平均, 最小, 最大數(shù)量。
Rows examined:? 掃描的行數(shù)量。
Database:??????????? 屬于哪個(gè)數(shù)據(jù)庫。
Users:?????????????????? 哪個(gè)用戶IP占到所有用戶執(zhí)行的sql百分比。
Query abstract:??? 抽象后的sql語句。
Query sample:???? sql語句。
除了以上的輸出, 官方還提供了很多定制化參數(shù), 是一款不可多得的好工具。
(3)pt-upgrade
這個(gè)工具用來檢查在新版本中運(yùn)行的SQL是否與老版本一樣,返回相同的結(jié)果,最好的應(yīng)用場(chǎng)景就是數(shù)據(jù)遷移的時(shí)候。
pt-upgrade h=host1 h=host2 slow.log
(4)pt-query-digest
可以從普通MySQL日志,慢查詢?nèi)罩疽约岸M(jìn)制日志中分析查詢,甚至可以從SHOW PROCESSLIST和MySQL協(xié)議的tcpdump中進(jìn)行分析,如果沒有指定文件,它從標(biāo)準(zhǔn)輸入流(STDIN)中讀取數(shù)據(jù)。
最簡(jiǎn)單的用法如下:
pt-query-digest slow.logs
整個(gè)輸出分為三大部分:
1、整體概要(Overall)
這個(gè)部分是一個(gè)大致的概要信息(類似loadrunner給出的概要信息),通過它可以對(duì)當(dāng)前MySQL的查詢性能做一個(gè)初步的評(píng)估,比如各個(gè)指標(biāo)的最大 值(max),平均值(min),95%分布值,中位數(shù)(median),標(biāo)準(zhǔn)偏差(stddev)。這些指標(biāo)有查詢的執(zhí)行時(shí)間(Exec time),鎖占用的時(shí)間(Lock time),MySQL執(zhí)行器需要檢查的行數(shù)(Rows examine),最后返回給客戶端的行數(shù)(Rows sent),查詢的大小。
2、查詢的匯總信息(Profile)
這個(gè)部分對(duì)所有”重要”的查詢(通常是比較慢的查詢)做了個(gè)一覽表:
每個(gè)查詢都有一個(gè)Query ID,這個(gè)ID通過Hash計(jì)算出來的。pt-query-digest是根據(jù)這個(gè)所謂的Fingerprint來group by的。舉例下面兩個(gè)查詢的Fingerprint是一樣的都是select * from table1 where column1 = ?,工具箱中也有一個(gè)與之相關(guān)的工具pt-fingerprint。
select * from table1 where column1 = 2
select * from table1 where column1 = 3
Rank整個(gè)分析中該“語句”的排名,一般也就是性能最常的。
Response time? “語句”的響應(yīng)時(shí)間以及整體占比情況。
Calls 該“語句”的執(zhí)行次數(shù)。
R/Call 每次執(zhí)行的平均響應(yīng)時(shí)間。
V/M 響應(yīng)時(shí)間的差異平均對(duì)比率。
在尾部有一行輸出,顯示了其他2個(gè)占比較低而不值得單獨(dú)顯示的查詢的統(tǒng)計(jì)數(shù)據(jù)。
3、詳細(xì)信息
這個(gè)部分會(huì)列出Profile表中每個(gè)查詢的詳細(xì)信息:
包括Overall中有的信息、查詢響應(yīng)時(shí)間的分布情況以及該查詢”入榜”的理由。
2.3BOX Anemometer
BOX Anemometer是基于pt-query-digest將MySQL慢查詢可視化
總結(jié)
以上是生活随笔為你收集整理的分析mysql日志文件_MySQL日志文件与分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何监控mysql数据库时间_如何监控M
- 下一篇: winform combobox第123