星期六, 十月 15, 2005

找出 MySQL 哪些 Query 速度較慢

MySQL 中有內建的設定, 在 my.cnf 中設定:
log-slow-queries = [slow_query_log_filename]
即可記錄查詢時間花費超過的 10s的 SQL 語法(Default).
若要改 5秒 可設定如: long_query_time = 5 即設定為 5s 記錄下來.

 

如果要記錄所有 SQL 語法,可以寫入:
log-long-format (查看最常用到的欄位加 index)
# t=time, l=lock time, r=rows
# at, al, 以及 ar 是對應的平均值
Ex: 於 my.cnf ([mysqld]) 加入

log-slow-queries = /var/log/mysql/mysql-slow.log
long_query_time = 5
log-long-format

而那些查詢速度較花時間的語法, 預設會記到 MysSQL 存放處的*-slow.log 

但是要怎麼去分析這個 log file, 就要靠 MySQL 的 mysqldumpslow 來分析.
mysqldumpslow(Perl Script), 由裡面接收變數直接撈出來, 可接受的參數有:
'v+', # verbose
'd+', # debug
's=s', # 排序 (t, at, l, al, r, ar etc)
'r!', # 倒排序 (largest last instead of first)
't=i', # 顯示最高的 n 個查詢
'a!', # 不把所有的數位以 N, 字串以 'S' 顯示
'n=i', # abstract numbers with at least n digits within names
'g=s', # grep: only consider stmts that include this string
'h=s', # hostname of db server for *-slow.log filename (can be wildcard)
'i=s', # name of server instance (if using mysql.server startup script)
'l!', # don't subtract lock time from total time

參考: MySQL 自帶的 slow log 分析工具 mysqldumpslow

PS: 另外也是加上 log-query-time 下面的參數: log-queries-not-using-indexes 看起來也不錯, 詳細可見; The Slow Query Log.

延伸閱讀

相關標籤

this is comment icon 請教紀錄檔的問題~ [回覆]

大大,是否可以請教您一下呢?

我加入了
----------------
log_slow_queries=/var/log/mysql-slow-queries.log
long_query_time=5
----------------

我跑完./tuning-primer.sh 後發現是有些執行超過我設定的5 (秒?),

但是我到/var/log/下卻找不到/var/log/mysql-slow-queries.log這個檔案,

我是該手動到/var/log/新增這個檔案嗎?

還是他會自己產生呢?

感恩

Comment by 小胖 (02/25/2008 16:53)

this is comment icon 回 小胖 [回覆]

您加完後, mysql 有 restart 嗎?
那個檔案是會自動產生的. :)

Comment by Tsung (02/25/2008 17:07)

this is comment icon [回覆]

有的~我有把mysql重新啟動,但是找不到那個檔案,所以才會覺得奇怪~如果自己新增一個檔案放在那讓她寫入會很怪嗎?感恩^^

Comment by 小胖 (02/26/2008 02:22)

this is comment icon 回 小胖 [回覆]

如果設定好, 只要是 slow query 就會自動產生那個檔案, 並寫入, 自己新增一個檔案再讓他寫, 我想應該沒有用耶.

Comment by Tsung (02/26/2008 09:53)

this is comment icon [回覆]

大大,

請教一下,

有沒有加 log-long-format 這行有差嗎?

因為我試著用touch mysql-slow-queries.log新增這個檔案,

也把屬性改成644,擁有者和群組都改成mysql,

但是仍沒有記錄被寫進去,

不曉得是否有什麼可以查出原因的方式呢?

感恩

Comment by 小胖 (02/28/2008 23:54)

this is comment icon 回 小胖 [回覆]

是不是 mysql 5.1.2 的設定檔不太一樣?
參考: http://blog.chinaunix.net/u/25477/showart_352295.html 看看呢?

Comment by Tsung (02/29/2008 00:39)

this is comment icon 只要跑較久的SQL, MYSQL就會當掉 [回覆]

您好,

我的mysql只要在上面有較複雜SQL在跑的或較多人使用時就會當掉,一直找不到原因, 想請您指點迷津, 提示應該調查的方向, 感激不盡!

Comment by 尋找方向的人 (10/14/2008 01:06)

this is comment icon 回 尋找方向的人 [回覆]

/var/log/mysql/* , /var/log/mysql.err, /var/log/mysql.log 這些是用來事後追蹤.
如果正在運行, 進入 mysql 後, show processlist 可以看到哪些 sql 語法正在跑, 跑了多久的時間等等(如果很快的, 應該會看不到).

Comment by Tsung (10/14/2008 09:21)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~