實(shí)例講解MySQL 慢查詢(xún)
簡(jiǎn)介
開(kāi)啟慢查詢(xún)?nèi)罩?,可以讓MySQL記錄下查詢(xún)超過(guò)指定時(shí)間的語(yǔ)句,通過(guò)定位分析性能的瓶頸,才能更好的優(yōu)化數(shù)據(jù)庫(kù)系統(tǒng)的性能。
一、配置慢查詢(xún)
1、參數(shù)說(shuō)明
- slow_query_log : 慢查詢(xún)開(kāi)啟狀態(tài)(默認(rèn)關(guān)閉)
- slow_query_log_file : 慢查詢(xún)?nèi)罩敬娣诺奈恢茫ㄟ@個(gè)目錄需要MySQL的運(yùn)行帳號(hào)的可寫(xiě)權(quán)限, 一般設(shè)置為MySQL的數(shù)據(jù)存放目錄)
- long_query_time : 查詢(xún)超過(guò)多少秒才記錄(默認(rèn)10秒)
2.查看慢查詢(xún)相關(guān)參數(shù)
show variables like 'slow_query%'; +---------------------------+----------------------------------+ | Variable_name | Value | +---------------------------+----------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /mysql/data/localhost-slow.log | +---------------------------+----------------------------------+ show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+
3.配置慢查詢(xún)
它有兩種配置方式,一種是全局變量配置,一種是配置文件配置
(1)全局變量配置
--將 slow_query_log 全局變量設(shè)置為“ON”狀態(tài) set global slow_query_log='ON'; --設(shè)置慢查詢(xún)?nèi)罩敬娣诺奈恢? set global slow_query_log_file='/usr/local/mysql/data/slow.log'; --查詢(xún)超過(guò)1秒就記錄 set global long_query_time=1;
(2)修改配置文件my.cnf(linux環(huán)境下)
slow_query_log = ON slow_query_log_file = /usr/local/mysql/data/slow.log long_query_time = 1
總結(jié):
(1)通過(guò)全局變量配置好后,需要關(guān)閉會(huì)話(huà)后重新打開(kāi)查詢(xún)才有效,通過(guò)配置文件需要重啟Mysql服務(wù)器后才有效
(2) 因?yàn)殚_(kāi)啟慢查詢(xún)會(huì)影響性能,一般建議通過(guò)全局變量配置,這樣重啟服務(wù)器又是默認(rèn)關(guān)閉慢查詢(xún)狀態(tài)。
二、mysqldumpslow工具
mysqldumpslow是Mysql自帶的一個(gè)工具,有了它我們可以不用去上面的log文件去找,如果數(shù)據(jù)平凡操作,那么去log查下日志也是比較繁瑣的一件事。
1、主要命令
--s:是表示按照何種方式排序 --c:訪(fǎng)問(wèn)次數(shù) --l:鎖定時(shí)間 --r:返回記錄 --t:查詢(xún)時(shí)間 --al:平均鎖定時(shí)間 --ar:平均返回記錄數(shù) --at:平均查詢(xún)時(shí)間 --t:即為返回前面多少條的數(shù)據(jù) --g:后面搭配一個(gè)正則匹配模式,大小寫(xiě)不敏感
2、舉例
--1.得到返回記錄集最多的10個(gè)SQL mysqldumpslow -s -r -t 10 /logs/mysql-slow.log --2.得到訪(fǎng)問(wèn)次數(shù)最多的10個(gè)SQL mysqldumpslow -s -c -t 10 /logs/mysql-slow.log --3.得到按照時(shí)間排序的前10條里面含有做鏈接的查詢(xún)語(yǔ)句 mysqldumpslow -s t -t 10 -g "left join" /logs/mysql-slow.log --4.另外建議在使用這些命令時(shí)結(jié)合|和more使用,否則又可能出現(xiàn)爆屏情況 mysqldumpslow -s r -t 10 /logs/mysql-slow.log | more
三、show profile
Show profiles是5.0.37之后添加的,要想使用此功能,要確保版本在5.0.37之后。
1、開(kāi)啟 show profile
show variables like "profiling";--默認(rèn)是關(guān)閉的 +---------------+-------+ | Variable_name | Value | +---------------+-------+ | profiling | OFF | +---------------+-------+ --開(kāi)啟 set profiling=1;
2、運(yùn)行指定SQL
我這里運(yùn)行幾條SQL語(yǔ)句,然后運(yùn)行
show profiles;--會(huì)列出所有在這個(gè)開(kāi)啟期間執(zhí)行的SQL,并附上QUERY ID +----------+------------+----------------------------+ | Query_ID | Duration | Query | +----------+------------+----------------------------+ | 1 | 0.00168025 | select * from vhr.employee | | 2 | 0.06573200 | select * from vhr.hr | +----------+------------+----------------------------+ --我們可以看到顯示最近操作的兩條語(yǔ)句,列表大小由profiling_history_size會(huì)話(huà)變量控制, 默認(rèn)值為15.最大值為100
3、診斷具體SQL
show profile cpu,block io for queryid --對(duì)應(yīng)2中的query_id SHOW PROFILE CPU FOR QUERY 1;--查詢(xún)query_id為1的具體信息 +----------------------+----------+----------+------------+ | Status | Duration | CPU_user | CPU_system | +----------------------+----------+----------+------------+ | starting | 0.000194 | 0.000000 | 0.000000 | | checking permissions | 0.000012 | 0.000000 | 0.000000 | | Opening tables | 0.000030 | 0.000000 | 0.000000 | | init | 0.000053 | 0.000000 | 0.000000 | | System lock | 0.000011 | 0.000000 | 0.000000 | | optimizing | 0.000003 | 0.000000 | 0.000000 | | statistics | 0.000014 | 0.000000 | 0.000000 | | preparing | 0.000010 | 0.000000 | 0.000000 | | executing | 0.000001 | 0.000000 | 0.000000 | | Sending data | 0.001213 | 0.000000 | 0.000000 | | end | 0.000014 | 0.000000 | 0.000000 | | query end | 0.000012 | 0.000000 | 0.000000 | | closing tables | 0.000019 | 0.000000 | 0.000000 | | freeing items | 0.000070 | 0.000000 | 0.000000 | | cleaning up | 0.000025 | 0.000000 | 0.000000 | +----------------------+----------+----------+------------+
日常開(kāi)發(fā)需要注意的結(jié)論:
1 converting HEAP to MyISAM : 查詢(xún)結(jié)果太大,內(nèi)存都不夠用了,往磁盤(pán)上搬了;
2 creating tmp table : 創(chuàng)建臨時(shí)表,拷貝數(shù)據(jù)到臨時(shí)表,然后再刪除;
3 copying to tmp table on disk :把內(nèi)存中臨時(shí)表復(fù)制到磁盤(pán),危險(xiǎn)?。。?br />
4 locked
注:以上四個(gè)中若出現(xiàn)一個(gè)或多個(gè),表示sql 語(yǔ)句 必須優(yōu)化。
以上就是實(shí)例講解MySQL 慢查詢(xún)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 慢查詢(xún)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- MySQL慢查詢(xún)的坑
- MYSQL慢查詢(xún)和日志實(shí)例講解
- MySQL慢查詢(xún)?nèi)罩镜淖饔煤烷_(kāi)啟
- MYSQL慢查詢(xún)與日志的設(shè)置與測(cè)試
- MySQL 慢查詢(xún)?nèi)罩镜拈_(kāi)啟與配置
- Mysql sql慢查詢(xún)監(jiān)控腳本代碼實(shí)例
- MySQL慢查詢(xún)?nèi)绾味ㄎ辉斀?/a>
- MySQL開(kāi)啟慢查詢(xún)方法及實(shí)例
- MySQL5.7慢查詢(xún)?nèi)罩緯r(shí)間與系統(tǒng)時(shí)間差8小時(shí)原因詳解
- Mysql慢查詢(xún)優(yōu)化方法及優(yōu)化原則
- 通過(guò)MySQL慢查詢(xún)優(yōu)化MySQL性能的方法講解
- MySQL Threads_running飆升與慢查詢(xún)的相關(guān)問(wèn)題解決
相關(guān)文章
Mysql出現(xiàn)問(wèn)題:error?while?loading?shared?libraries:?libaio解
這篇文章主要介紹了Mysql出現(xiàn)問(wèn)題:error?while?loading?shared?libraries:?libaio解決方案的相關(guān)資料,需要的朋友可以參考下2022-10-10搞定mysql行轉(zhuǎn)列的7種方法以及列轉(zhuǎn)行
在MySQL數(shù)據(jù)庫(kù)中,有時(shí)候我們需要將一列數(shù)據(jù)轉(zhuǎn)化為行數(shù)據(jù),以便更好地進(jìn)行數(shù)據(jù)分析和處理,下面這篇文章主要給大家介紹了關(guān)于搞定mysql行轉(zhuǎn)列的7種方法以及列轉(zhuǎn)行的相關(guān)資料,需要的朋友可以參考下2024-03-03MySql?字符集不同導(dǎo)致?left?join?慢查詢(xún)的問(wèn)題解決
當(dāng)兩個(gè)表的字符集不一樣,在使用字符型字段進(jìn)行表連接查詢(xún)時(shí),就需要特別注意下查詢(xún)耗時(shí)是否符合預(yù)期,本文主要介紹了MySql?字符集不同導(dǎo)致?left?join?慢查詢(xún)的問(wèn)題解決,感興趣的可以了解一下2024-05-05Mysql中正則表達(dá)式Regexp常見(jiàn)用法
這篇文章主要介紹了Mysql中正則表達(dá)式Regexp常見(jiàn)用法,MySql REGEXP運(yùn)算符匹配字符串,mysql正則REGEXP學(xué)習(xí)練習(xí)筆記,需要的朋友可以參考下2020-02-02