首頁 > 軟體

MySQL慢查詢優化解決問題

2022-03-16 13:01:19

1.  MySQL慢查詢介紹

  MySQL的慢查詢紀錄檔是MySQL提供的一種紀錄檔記錄,它用來記錄在MySQL中響應時間超過閥值的語句,具體指執行時間超過long_query_time值的SQL,則會被記錄到慢查詢紀錄檔中。long_query_time的預設值為10,意思是執行10S以上的語句。預設情況下,Mysql資料庫並不啟動慢查詢紀錄檔,需要我們手動來設定這個引數,當然,如果不是調優需要的話,一般不建議啟動該引數,因為開啟慢查詢紀錄檔會或多或少帶來一定的效能影響。慢查詢紀錄檔支援將紀錄檔記錄寫入檔案,也支援將紀錄檔記錄寫入資料庫表

慢查詢紀錄檔相關引數:

MySQL 慢查詢的相關引數解釋:

  • 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_log表中。MySQL資料庫支援同時兩種紀錄檔儲存方式,設定的時候以逗號隔開即可,如:log_output='FILE,TABLE'。紀錄檔記錄到系統的專用紀錄檔表中,要比記錄到檔案耗費更多的系統資源,因此對於需要啟用慢查詢紀錄檔,又需要能夠獲得更高的系統效能,那麼建議優先記錄到檔案。

2.發現問題(主動/被動)

問題點:資料庫查詢過程中速度過慢的SQL語句

主動:資料庫預設情況下slow_query_log的值為OFF,表示慢查詢紀錄檔是禁用的

mysql> show variables  like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name       | Value                                         |
+---------------------+-----------------------------------------------+
| slow_query_log      | OFF                                           |
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+
2 rows in set (0.00 sec)
 
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.09 sec)
 
mysql> show variables like '%slow_query_log%';
+---------------------+-----------------------------------------------+
| Variable_name       | Value                                         |
+---------------------+-----------------------------------------------+
| slow_query_log      | ON                                            |
| slow_query_log_file | /home/WDPM/MysqlData/mysql/DB-Server-slow.log |
+---------------------+-----------------------------------------------+
2 rows in set (0.00 sec)

被動:使用者在使用程式時候告知頁面反應慢

3.找到原因-對症下藥

原因點:沒有加索引、索引失效、SQL極度複雜、高並行

1.表結構設計時沒有索引導致

2.SQL語句導致索引失效

索引失效7字口訣:

  • 模:模糊查詢LIKE以%開頭
  • 型:資料型別錯誤
  • 數:對索引欄位使用內部函數
  • 空:索引列是NULL
  • 運:索引列進行四則運算
  • 最:複合索引不按索引列最左開始查詢
  • 快:全表查詢預計比索引更快

3.SQL極度複雜10張以上表聯合查詢

  • 優化表結構和程式

4.高並行時段導致等待

  • 在程式和資料庫之間加入快取

Hole yor life get everything if you never give up.

到此這篇關於MySQL慢查詢優化解決問題的文章就介紹到這了,更多相關MySQL慢查詢優化內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com