一、什麼是資料庫慢查詢?
資料庫慢查詢,就是查詢時間超過了我們設定的時間的語句。
預設的設定時間是10秒。也可以自己根據實際專案設定。
set long_query_time=0.0001;
slow_query_log :是否開啟慢查詢日誌,1表示開啟,0表示關閉。
log-slow-queries :舊版(5.6以下版本)mysql資料庫慢查詢日誌儲存路徑。可以不設定該引數,系統則會預設給乙個預設的檔案host_name-slow.log
slow-query-log-file:新版(5.6及以上版本)mysql資料庫慢查詢日誌儲存路徑。可以不設定該引數,系統則會預設給乙個預設的檔案host_name-slow.log
long_query_time :慢查詢閾值,當查詢時間多於設定的閾值時,記錄日誌。
log_queries_not_using_indexes:未使用索引的查詢也被記錄到慢查詢日誌中(可選項)。
log_output:日誌儲存方式。log_output='file'表示將日誌存入檔案,預設值是'file'。log_output='table'表示將日誌存入資料庫,這樣日誌資訊就會被寫入到mysql
慢查詢日誌配置:
預設情況下slow_query_log的值為off,表示慢查詢日誌是禁用的,可以通過設定slow_query_log的值來開啟,如下所示:
show variables like 'slow_query%'; -- 慢查詢
show variables like 'long_query_time'; -- 查詢時間設定
show variables like '%slow_query_log%';-- 檢視慢查詢的日誌配置
set global slow_query_log = 'on'; ---開啟慢查詢日誌
show variables like 'log_queries_not_using_indexes'; --檢視未使用索引的
set global log_queries_not_using_indexes=1; -- 未使用索引的查詢也被記錄到慢查詢日誌中
show global status like '%slow_queries%';-- 查詢慢查詢記錄
三、最大連線數的檢視與設定
-- 1、檢視最大連線數
show variables like '%max_connections%'; -- 上限連線數
show global status like 'max_used_connections' -- 服務響應的最大連線數
比較理想的設定:max_used_connections / max_connections * 100% ≈ 85%
最大連線數佔上限連線數的85%左右,如果發現比例在10%以下,mysql伺服器連線數上限設定的過高了。
-- 2、修改最大連線數
set global max_connections = 500;
-- 列出mysql伺服器執行各種狀態值
show global status;
四、常見的慢查詢優化
1、索引沒起到作用的情況
1)、使用like關鍵字的查詢語句 在使用like關鍵字進行查詢的查詢語句中,如果匹配字串的第乙個字元為「%」,索引不會起作用。只有「%」不在第乙個位置索引才會起作用。
2)、 使用多列索引的查詢語句 mysql可以為多個字段建立索引。乙個索引最多可以包括16個字段。對於多列索引,只有查詢條件使用了這些欄位中的第乙個欄位時,索引才會被使用。
2、優化資料庫結構
1)、將字段很多的表拆解成多個表
2)、設定中間表
3、分解關聯查詢
很多高效能的應用都會對關聯查詢進行分解,就是可以對每乙個表進行一次單錶查詢,然後將查詢結果在應用程式中進行關聯,很多場景下這樣會更高效。
4、優化limit分頁
在系統中需要分頁的操作通常會使用limit加上偏移量的方法實現,同時加上合適的order by 子句。如果有對應的索引,通常效率會不錯,否則mysql需要做大量的檔案排序操作。
乙個非常令人頭疼問題就是當偏移量非常大的時候,例如可能是limit 10000,20這樣的查詢,這是mysql需要查詢10020條然後只返回最後20條,前面的10000條記錄都將被捨棄,這樣的代價很高。
優化此類查詢的乙個最簡單的方法是盡可能的使用索引覆蓋掃瞄,而不是查詢所有的列。然後根據需要做一次關聯操作再返回所需的列。對於偏移量很大的時候這樣做的效率會得到很大提公升。
雲資料庫mysql 慢查詢 Mysql慢查詢
一 簡介 開啟慢查詢日誌,可以讓mysql記錄下查詢超過指定時間的語句,通過定位分析效能的瓶頸,才能更好的優化資料庫系統的效能。二 引數說明 slow query log 慢查詢開啟狀態 slow query log file 慢查詢日誌存放的位置 這個目錄需要mysql的執行帳號的可寫許可權,一般...
MySql資料庫慢查詢
一 什麼是資料庫慢查詢?資料庫慢查詢,就是查詢時間超過了我們設定的時間的語句。預設的設定時間是10秒。也可以自己根據實際專案設定。set long query time 0.0001 slow query log 是否開啟慢查詢日誌,1表示開啟,0表示關閉。log slow queries 舊版 5...
mysql資料庫開啟慢查詢
一 慢查詢的設定 兩種配置方式,一種是通過命令配置,可以即時生效,但重啟服務後失效。示例如下 root laojiang mysql uroot proot set global long query time 1 set global slow query log on set global sl...