一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

mysql 開啟慢查詢?nèi)罩?/span>

 大芬油畫 2013-10-25

優(yōu)化 MySQL最重要的一部分工作是先確定”有問題”的查詢語句。只有先找出這些查詢較慢的sql查詢(執(zhí)行時間較長),我們才能進(jìn)一步分析原因并且優(yōu)化它。 MySQL為我們提供了Slow Query Log記錄功能,它能記錄執(zhí)行時間超過了特定時長的查詢。分析Slow Query Log有助于幫我們找到”問題”查詢。記錄slow queries

首先,我們需要查看mysql server版本號,以及是否配置啟用了slow query log。

#打開服務(wù)
log_slow_queries = ON

當(dāng)log_slow_queries是ON時,才表示已經(jīng)啟用了記錄slow query功能。默認(rèn)是不記錄slow query的。
啟用slow query日志
#//將下列配置放到my.cnf中
[mysqld]
log-slow-queries = /var/lib/mysql/slow-queries.log

//新增加的參數(shù)
long_query_time = 3
log-queries-not-using-indexes
log-slow-admin-statements

上面的配置打開了slow query日志,將會捕獲了執(zhí)行時間超過了3秒的查詢,包括執(zhí)行速度較慢的管理命令(比如OPTIMEZE TABLE),并且記錄了沒有使用索引的查詢。這些SQL,都會被記錄到log-slow-queries指定的文件/var/lib/mysql /slow-queries.log文件中。
log-slow-queries <slow_query_log_file>
存放slow query日志的文件。你必須保證mysql server進(jìn)程mysqld_safe進(jìn)程用戶對該文件有w權(quán)限。
long_query_time
如果query time超過了該值,則認(rèn)為是較慢查詢,并被記錄下來。單位是秒,最小值是1,默認(rèn)值是10秒。10秒對于大多數(shù)應(yīng)用來講,太長了。我們推薦從3秒開始, 依次減少,每次都找出最”昂貴”的10條SQL語句并且優(yōu)化他們。日復(fù)一日,一步一步優(yōu)化。一次性找出很多條SQL語句,對于優(yōu)化來講,意義并不大。
log-queries-not-using-indexes
MySQL會將沒有使用索引的查詢記錄到slow query日志中。無論它執(zhí)行有多快,查詢語句沒有使用索引,都會被記錄。有的時候,有些沒有使用引索的查詢非???例如掃描很小的表),但也有可能導(dǎo)致服務(wù)器變慢,甚至還會使用大量的磁盤空間。
log-slow-admin-statements
一些管理指令,也會被記錄。比如OPTIMEZE TABLE, ALTER TABLE等等。
日志文件

我們可以通過tail -f查看日志文件。
$tail -f /var/lib/mysql/slow-queries.log
# Time: 110107 16:22:11
# User@Host: root[root] @ localhost []
# Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774
SET timestamp=1294388531;
select count(*) from ep_friends;

第一行,SQL查詢執(zhí)行的時間
第二行,執(zhí)行SQL查詢的連接信息
第三行記錄了一些我們比較有用的信息
Query_time SQL執(zhí)行的時間,越長則越慢
Lock_time 在MySQL服務(wù)器階段(不是在存儲引擎階段)等待表鎖時間
Rows_sent 查詢返回的行數(shù)
Rows_examined 查詢檢查的行數(shù)
Slow Query日志,雖然幫助你記錄了那些執(zhí)行過了的SQL語句。但它不是萬能的,意義可能沒有你想象的那么大。它只告訴了你哪些語句慢,但是為什么慢?具體 原因,還是需要你自己去分析,不斷的調(diào)試。也許,你只需要換一條更有效的sql語句,也許你只需簡單地增加一個索引,但也有可能你需要調(diào)整你應(yīng)用程序的設(shè) 計方案。比如,上面那條語句是很明顯,它檢查了600多萬行數(shù)據(jù)。不幸的是,并不是每條語句都這么明顯。也許還有別的原因,比如:
*鎖表了,導(dǎo)致查詢處于等態(tài)狀態(tài)。lock_time顯示了查詢等待鎖被翻譯的時間
*數(shù)據(jù)或索引沒有被緩存。常見于第一次啟動服務(wù)器或者服務(wù)器沒有調(diào)優(yōu)
*備份數(shù)據(jù)庫,I/O變慢
*也許同時運行了其它的查詢,減少了當(dāng)前查詢

所以,不要過于緊張日志文件某條記錄,而應(yīng)該理性地審記,找出真正的原因。如果經(jīng)常出現(xiàn)的slow query需要特別注意。如果個別出現(xiàn),則做一些常規(guī)檢查即可。我們建議,統(tǒng)計并且形成基準(zhǔn)報告,進(jìn)行比較排除,比胡亂瞎撞有用。希望大家不要在這部分過于浪費時間與精力。
線上記錄slow query

上文的配置需要重啟mysql server進(jìn)程mysqld才會生效。但是很多時候,尤其是產(chǎn)品運營環(huán)境,不希望每次修改都需要重新啟動mysql服務(wù)器,也希望能在某些特定時間記 錄。MySQL5.1給我們提供了更為靈活的運行時控制,使得你不必重新啟動mysql服務(wù)器,也能選擇性地記錄或者不記錄某些slow queries。

MySQL5.1中,提供了全局變量slow_query_log、slow_query_log_file可以靈活地控制enable/disable慢查詢。同時可以通過long_query_time設(shè)置時間
#//停用slow query記錄
#注意:設(shè)置了slow_query_log全局變量, log_slow_queries也會隱性地跟著改變
mysql>set global slow_query_log=OFF

不幸運的是,在MySQL5.0并沒有提供類似的全局變量來靈活控制,但是我們可以通過將long_query_time設(shè)置得足夠大來避免記錄某些查詢語句。比如
mysql>set global long_query_time = 3600;

MySQL5.0, 不關(guān)服務(wù)的情況下,希望不記錄日志的辦法是將日志文件成為/dev/null的符號鏈接(symbolic link)。注意:你只需要在改變后運行FLUSH LOGS以確定MYSQL釋放當(dāng)前的日志文件描述符,重新把日志記錄到/dev/null

和MySQL5.0不同,MySQL5.1可以在運行時改變?nèi)沼浶袨椋瑢⑷罩居涗浀綌?shù)據(jù)庫表中。只要將mysql全局變量log_output設(shè)置 為 TABLE即可。MySQL會將日志分別記錄到表mysql.gengera_log和mysql.slow_log二張表中。但是,我們推薦將日志記錄 在日記文件中。
mysql> show variables like ‘log_output’\G
Variable_name: log_output
Value: FILE
mysql>set global log_output=’table’;
缺陷與審記

雖然記錄了slow query能夠幫助你優(yōu)化產(chǎn)品。但是MySQL目前版本,還有幾大蹩足的地方。
1.MySQL5.0版本, long_query_time時間粒度不夠細(xì),最小值為1秒。對于高并發(fā)性能的網(wǎng)頁腳本而言,1秒出現(xiàn)的意義不大。即出現(xiàn)1秒的查詢比較少。直到mysql5.1.21才提供更細(xì)粒度的long_query_time設(shè)定.
2.不能將服務(wù)器執(zhí)行的所有查詢記錄到慢速日志中。雖然MySQL普通日志記錄了所有查詢,但是它們是解析查詢之前就記錄下來了。這意味著普通日志沒辦法包含諸如執(zhí)行時間,鎖表時間,檢查行數(shù)等信息。
3.如果開啟了log_queries_not_using_indexes選項,slow query日志會充滿過多的垃圾日志記錄,這些快且高效的全表掃描查詢(表小)會沖掉真正有用的slow queries記錄。比如select * from category這樣的查詢也會被記錄下來。

通過microslow-patch補(bǔ)丁可使用更細(xì)的時間粒度,和記錄所有執(zhí)行過的sql語句。不過,使用這個補(bǔ)訂不得不自己編譯MySQL,出于穩(wěn)定性考濾,我們推薦在開發(fā)測試環(huán)境,可以打上這個補(bǔ)丁,享受這個補(bǔ)丁帶來的便利。在運營環(huán)境盡量不要這么做…

MySQL自帶了mysqldumpslow工具用來分析slow query日志,除此之外,還有一些好用的開源工具。比如MyProfi、mysql-log-filter,當(dāng)然還有mysqlsla

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产精品不卡免费视频| 日韩性生活视频免费在线观看| 中文文精品字幕一区二区| 一二区不卡不卡在线观看| 又色又爽又黄的三级视频| 精品伊人久久大香线蕉综合| 草草草草在线观看视频| 亚洲伦理中文字幕在线观看| 日木乱偷人妻中文字幕在线| 能在线看的视频你懂的| 亚洲综合色婷婷七月丁香| 91欧美日韩精品在线| 国产一区二区三区香蕉av| 亚洲中文字幕视频在线观看| 中文字幕亚洲精品人妻| 免费福利午夜在线观看| 欧美字幕一区二区三区| 九九热精彩视频在线播放| 欧美胖熟妇一区二区三区| 九九九热视频免费观看| 国产又粗又爽又猛又黄的| 久久99午夜福利视频| 激情内射亚洲一区二区三区| 亚洲熟女国产熟女二区三区| 91天堂免费在线观看| 色综合久久中文综合网| 一区二区三区四区亚洲专区| 中文字幕日产乱码一区二区| 亚洲一区二区久久观看| 国产一级不卡视频在线观看| 日韩性生活视频免费在线观看 | 日韩精品一区二区毛片| 黄色国产精品一区二区三区| 成人午夜爽爽爽免费视频| 国产av精品一区二区| 熟女少妇一区二区三区蜜桃| 国产精品尹人香蕉综合网| 欧美性高清一区二区三区视频| 综合久综合久综合久久| 日本欧美一区二区三区在线播| 国产在线一区二区免费|