溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql數(shù)據(jù)庫慢查詢是什么意思

發(fā)布時(shí)間:2021-12-30 14:30:31 來源:億速云 閱讀:397 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下mysql數(shù)據(jù)庫慢查詢是什么意思,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

何為慢SQL

在特定業(yè)務(wù)環(huán)境和技術(shù)條件下,我們?cè)O(shè)定一個(gè)閾值,稱之為:long_query_time,對(duì)于每條dml語句的執(zhí)行進(jìn)行耗時(shí)統(tǒng)計(jì)t,如果t>=long_query_time,則稱這條dml語句為慢語句(慢sql)。

在MySQL中,提供了對(duì)慢查詢的語句的檢測與記錄能力。

MySQL的慢查詢?nèi)罩臼荕ySQL提供的一種日志記錄,用來記錄在MySQL中響應(yīng)時(shí)間超過閾值的語句,具體指運(yùn)行時(shí)間超過long_query_time值的SQL,則會(huì)被記錄到慢查詢?nèi)罩局校ㄈ罩究梢詫懭胛募蛘邤?shù)據(jù)庫表,如果對(duì)性能要求高的話,建議寫文件)。默認(rèn)情況下,MySQL數(shù)據(jù)庫是不開啟慢查詢?nèi)罩镜?,long_query_time的默認(rèn)值為10(即10秒,通常設(shè)置為1秒),即運(yùn)行10秒以上的語句是慢查詢語句。

# ON為開啟慢查詢?nèi)罩?,OFF則為關(guān)閉慢查詢?nèi)罩?/p>

slow_query_log 

# 指定了慢查詢的閾值,即如果執(zhí)行語句的時(shí)間超過該閾值則為慢查詢語句,默認(rèn)值為10秒

long_query_time

# 記錄的慢查詢?nèi)罩镜轿募校ㄗ⒁猓耗J(rèn)名為主機(jī)名.log,慢查詢?nèi)罩臼欠駥懭胫付ㄎ募校枰付樵兊妮敵鋈罩靖袷綖槲募?,相關(guān)命令為:show variables like ‘%log_output%’;去查看輸出的格式)

slow_query_log_file

# 這個(gè)參數(shù)設(shè)置為ON,可以捕獲到所有未使用索引的SQL語句(注意:如果只是將log_queries_not_using_indexes設(shè)置為ON,而將slow_query_log設(shè)置為OFF,此時(shí)該設(shè)置也不會(huì)生效,即該設(shè)置生效的前提是slow_query_log的值設(shè)置為ON)

log_queries_not_using_indexes

慢查詢后果

影響層面

可能影響內(nèi)容

技術(shù)

數(shù)據(jù)庫連接池被占滿、導(dǎo)致大事務(wù)、主從延遲增大

業(yè)務(wù)

時(shí)效變慢、成功率降低、其他關(guān)聯(lián)業(yè)務(wù)雪崩

用戶

體驗(yàn)下降、忠誠度不高的用戶流失

系統(tǒng)

數(shù)據(jù)庫被hung死,甚至雪崩,拖垮服務(wù)

避免慢查詢

sql方向:優(yōu)化sql語句的編寫,嚴(yán)格避免慢查詢(不是盡量避免)

  • 考慮在選擇性較好的where條件字段添加索引;

  • 避免不必要的排序,如果必要,可以考慮通過在排序字段添加索引減小排序成本。

  • 如果有復(fù)合索引,那么必須使用到該索引中的第一個(gè)字段作為條件時(shí)才能保證系統(tǒng)使用該索引,否則該索引將不會(huì)被使用。

  • 不要對(duì) where 條件字段進(jìn)行函數(shù)、算術(shù)運(yùn)算或其他表達(dá)式運(yùn)算,否則可能導(dǎo)致無法正確使用索引。    

  • like條件首位模糊匹配會(huì)無法使用索引,例如select id from t where name like '%abc%' 。

  • 從邏輯上降低數(shù)據(jù)掃描量,考慮sql返回的數(shù)據(jù)是否都是必要的。比如判斷是否存在符合條件的記錄,使用limit 1代替count。

監(jiān)控方向:對(duì)慢查詢進(jìn)行監(jiān)控,及時(shí)發(fā)現(xiàn),提早預(yù)防

  • 慢查詢條數(shù)告警

  • 慢查詢時(shí)間、慢sql記錄

  • 定期對(duì)慢sql記錄進(jìn)行查詢分析、總結(jié)

以上是“mysql數(shù)據(jù)庫慢查詢是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)
AI