您好,登錄后才能下訂單哦!
小編給大家分享一下mysql數據庫慢查詢是什么意思,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在特定業務環境和技術條件下,我們設定一個閾值,稱之為:long_query_time,對于每條dml語句的執行進行耗時統計t,如果t>=long_query_time,則稱這條dml語句為慢語句(慢sql)。
在MySQL中,提供了對慢查詢的語句的檢測與記錄能力。
MySQL的慢查詢日志是MySQL提供的一種日志記錄,用來記錄在MySQL中響應時間超過閾值的語句,具體指運行時間超過long_query_time值的SQL,則會被記錄到慢查詢日志中(日志可以寫入文件或者數據庫表,如果對性能要求高的話,建議寫文件)。默認情況下,MySQL數據庫是不開啟慢查詢日志的,long_query_time的默認值為10(即10秒,通常設置為1秒),即運行10秒以上的語句是慢查詢語句。
# ON為開啟慢查詢日志,OFF則為關閉慢查詢日志
slow_query_log
# 指定了慢查詢的閾值,即如果執行語句的時間超過該閾值則為慢查詢語句,默認值為10秒
long_query_time
# 記錄的慢查詢日志到文件中(注意:默認名為主機名.log,慢查詢日志是否寫入指定文件中,需要指定慢查詢的輸出日志格式為文件,相關命令為:show variables like ‘%log_output%’;去查看輸出的格式)
slow_query_log_file
# 這個參數設置為ON,可以捕獲到所有未使用索引的SQL語句(注意:如果只是將log_queries_not_using_indexes設置為ON,而將slow_query_log設置為OFF,此時該設置也不會生效,即該設置生效的前提是slow_query_log的值設置為ON)
log_queries_not_using_indexes
影響層面 | 可能影響內容 |
---|---|
技術 | 數據庫連接池被占滿、導致大事務、主從延遲增大 |
業務 | 時效變慢、成功率降低、其他關聯業務雪崩 |
用戶 | 體驗下降、忠誠度不高的用戶流失 |
系統 | 數據庫被hung死,甚至雪崩,拖垮服務 |
sql方向:優化sql語句的編寫,嚴格避免慢查詢(不是盡量避免)
考慮在選擇性較好的where條件字段添加索引;
避免不必要的排序,如果必要,可以考慮通過在排序字段添加索引減小排序成本。
如果有復合索引,那么必須使用到該索引中的第一個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用。
不要對 where 條件字段進行函數、算術運算或其他表達式運算,否則可能導致無法正確使用索引。
like條件首位模糊匹配會無法使用索引,例如select id from t where name like '%abc%' 。
從邏輯上降低數據掃描量,考慮sql返回的數據是否都是必要的。比如判斷是否存在符合條件的記錄,使用limit 1代替count。
監控方向:對慢查詢進行監控,及時發現,提早預防
慢查詢條數告警
慢查詢時間、慢sql記錄
定期對慢sql記錄進行查詢分析、總結
以上是“mysql數據庫慢查詢是什么意思”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。