您好,登錄后才能下訂單哦!
如何從MYSQL查詢?nèi)罩局羞^濾出的慢查詢?nèi)罩静⒄页鯰OP SQL,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
在 MYSQL 慢查詢?nèi)罩局?# Time 中只有時(shí)間但沒有日期的信息,需要知道一條慢查詢SQL具體是哪天的,
就需要 unix_timestamp 函數(shù)把 # Time 中的時(shí)間戳信息轉(zhuǎn)換為日期信息。
unix_timestamp(datetime=>timestamp)
from_unixtime(timestamp=>datetime)
mysql> select unix_timestamp('2021-10-26 17:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 17:30:00') |
+---------------------------------------+
| 1451122200 |
+---------------------------------------+
1 row in set (0.10 sec)
select from_unixtime('1451122200');
mysql> select from_unixtime('1451122200');
+-----------------------------+
| from_unixtime('1451122200') |
+-----------------------------+
| 2021-10-26 17:30:00.000000 |
+-----------------------------+
過濾出16:30到17:30的慢查詢?nèi)罩?br/>方法一:使用時(shí)間戳過濾
mysql> select unix_timestamp('2021-10-26 17:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 17:30:00') |
+---------------------------------------+
| 1451122200 |
+---------------------------------------+
1 row in set (0.00 sec)
mysql> select unix_timestamp('2021-10-26 16:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 16:30:00') |
+---------------------------------------+
| 1451118600 |
+---------------------------------------+
1 row in set (0.00 sec)
sed -n '/SET timestamp=14511186../,/SET timestamp=14511222../'p QITV0223-slow.log > test3.log
方法二:
mysql> select unix_timestamp('2015-12-26 16:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 16:30:00') |
+---------------------------------------+
| 1451118600 |
+---------------------------------------+
sed -n '/SET timestamp=14511186../,$'p QITV0223-slow.log > test4.log
mysql> select unix_timestamp('2021-10-26 17:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 17:30:00') |
+---------------------------------------+
| 1451122200 |
+---------------------------------------+
1 row in set (0.00 sec)
--使用gred 在 test4.log 定位到17:30執(zhí)行的SQL,比如定位出在 1085行
grep -n 'SET timestamp=14511222..' QITV0223-slow.log test4.log
1085:SET timestamp=1451122200;
--使用sed 過濾出第一行到1085行的數(shù)據(jù)
sed -n '1,1085'p test3.log > test5.log
方法三:如果所有的SQL都有 #TIME 項(xiàng),則使用 #TIME進(jìn)行過濾
sed -n '/# Time: 151226 16:30:../,/# Time: 151226 17:30:../'p QITV0223-slow.log > test10.log
如果沒有匹配到 “# Time: 151226 17:30:..”,則會(huì)把從16:30到慢查詢?nèi)罩窘Y(jié)尾的日志全過濾出來。
對(duì)于過濾好的慢查詢?nèi)罩緳z索 TOP SQL:
1. 獲取執(zhí)行時(shí)間最長(zhǎng)的 10個(gè) TOP SQL。
mysqldumpslow -s t -t 10 test10.log > slow_t_top_sql.txt
2. 獲取平均查詢時(shí)間最長(zhǎng)的 10 個(gè) TOP SQL。
mysqldumpslow -s at -t 10 test10.log > slow_at_top_sql.txt
3. 獲取鎖定時(shí)間最長(zhǎng)的 10個(gè) TOP SQL。
mysqldumpslow -s l -t 10 test10.log > slow_l_top_sql.txt
4. 獲取平均鎖定時(shí)間最長(zhǎng)的 10個(gè) TOP SQL。
mysqldumpslow -s al -t 10 test10.log > slow_l_top_sql.txt
5. 獲取返回記錄最多的 10個(gè) TOP SQL。
mysqldumpslow -s r -t 10 test10.log > slow_r_top_sql.txt
6. 獲取平均返回記錄最多的 10個(gè) TOP SQL。
mysqldumpslow -s ar -t 10 test10.log > slow_r_top_sql.txt
7. 獲取執(zhí)行次數(shù)最多的 10個(gè) TOP SQL。
mysqldumpslow -s c -t 10 test10.log > slow_r_top_sql.txt
看完上述內(nèi)容,你們掌握如何從MYSQL查詢?nèi)罩局羞^濾出的慢查詢?nèi)罩静⒄页鯰OP SQL的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。