(圖片來源)
不論是程式面還是資料面,我們時常在說提高效能、縮短執行時間,但這句話只有表達出要達到的目的並沒有說明具體的方法,那我們究竟該從何下手呢?
以 Mysql 為例,本身內建 slow_query_log 的功能,該功能可以記錄執行時間過長的 query 語法,既然電腦已經幫助我們省去大半時間來找出執行過慢的 query ,那我們便可以將更多的精力放在優化語法上,從而解決因慢 query 引起的各種問題!
- 檔案設定 (以 Laragon WAMP 來當作範例)
- 指令設定
一、 檔案設定
1. 開啟 my.ini
2. [mysqld] 添加下方設定
slow_query_log = 1 # 0 為關閉, 1 為開啟 slow_query_log_file = "D:/laragon3/tmp/log/mysql-slow.log" # log 存放的位置 long_query_time = 1 # 紀錄執行超過 1 秒的 query 語法
3. 重啟 Mysql
4. 嘗試執行較久的 query 語法
執行完較久的 query 語法後開啟 log file ,已經自動記錄慢 query 完整的信息,包含執行時間與完整 query 語法等等資訊。
另外,如果想要紀錄每一筆的 query 語法,Mysql 也是有內建功能唷!在 [mysqld] 添加下方設定 ,其餘步驟都跟上方相同!
general_log = 1 # 開啟 query log general_log_file = "D:/laragon3/tmp/log/mysql-query.log" # log 存放位置
二、指令設定
在本機或測試環境當然想重啟幾次 Mysql 都不會有任何問題,但是如果是在線上環境就不能這麼隨意的進行重啟,在這種狀況下可以使用指令來達到我們要的目的。
在 SQL Manage Tool 或是 mysql comand Line 輸入下方語法並執行,就可以直接啟用 slow_query_log 功能,不用重啟 Mysql!
SET global log_output = 'FILE'; SET global slow_query_log = 1; SET global slow_query_log_file = "D:/laragon3/tmp/log/slow-test.log"; SET global long_query_time = 1;
general_log 啟用也不需要重啟 Mysql,指令如下:
SET global log_output = 'FILE'; SET global general_log_file= 'D:/laragon3/tmp/log/test.log'; SET global general_log = 1;
參考:
How to enable MySQL Query Log?
開啟 slow query log, 儲存執行慢的 MySQL 語句
Mysql 管理之道(第二版) page 210,5.5.1 如何定位執行很慢的 SQL 語句