close

computer-therms-4-1241958.jpg

(圖片來源)

 

不論是程式面還是資料面,我們時常在說提高效能縮短執行時間,但這句話只有表達出要達到的目的並沒有說明具體的方法,那我們究竟該從何下手呢?

以 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 語句 

 

arrow
arrow
    創作者介紹
    創作者 Mayuge 的頭像
    Mayuge

    工程的日子每天都很師

    Mayuge 發表在 痞客邦 留言(0) 人氣()