MySQL在運作一段時間之後,執行效能無可避免地都會慢慢下滑,其實透過組態設定就能夠找回原本的運作效能。而使用MySQL本身內建的指令,則可以隨時分析SQL指令的效能。如果嫌指令繁雜難記,只要使用開源工具mytop,就能夠即時監控MySQL伺服器的運行狀態。
在簡單說明explain的用法之後,接著以測試SQL指令常用的in和not in語法為例來分析其效能,測試結果如圖12所示。從中可以發現,使用in語法會比使用not in語法的效能更佳。
|
▲圖12 藉由測試in和not in語法來分析效能。 |
藉由此類的分析來改寫SQL指令,就能夠優化查詢的效能。
使用MySQL監控軟體mytop
就如同Linux系統提供top工具程式,讓使用者能夠檢視系統資源的使用情況,在開源碼社群中,也提供了一個類似top的工具程式,它是以Perl語言實作,名稱為mytop,可用來監控MySQL資料庫的資源使用情況。可連結至「http://jeremy.zawodny.com/mysql/mytop/」網址來取得mytop的最新版本,本文使用的版本為1.6。
取得安裝檔案之後,進行解壓縮,依序執行下列指令開始安裝程序:
perl Makefile.PL
make
make test
make install
成功安裝mytop後,就會產生名為「mytop」的執行檔,此時便可利用此執行檔來監控MySQL伺服器,mytop常用的選項如下:
-u:登入資料庫的帳號名稱,預設為root。
-p:登入資料庫所使用的密碼資訊,預設為空。
-h:資料庫所在的主機資訊,預設為localhost。
-P:資料庫所使用的通訊埠,預設為3306。
-s: 顯示資訊的時間間隔(單位為秒),預設為5秒,表示每5秒就會重新顯示一次最新的資訊。
-d: 設定欲連接測試的資料庫名稱,如果未設定此參數,便預設使用名稱為「test」的資料庫。
-b:設定僅顯示一次最新資訊,而非連續更新。
-S: 指定MySQL伺服器所使用的Socket檔案所在,如果mytop與MySQL服器位於同一台主機上,即可利用指定Socket檔案的方式來監控資料庫。
--noheader: 不顯示標題(Header)資訊,亦即不顯示如圖13內(A)部分的資訊。
--header:顯示標題資訊,此為預設的選項。
|
▲圖13 查看MySQL伺服器目前的運作狀態。 |
緊接著,可以執行「mytop -u [帳號名稱] -p [所使用的密碼資訊]」指令來取得目前MySQL伺服器的運作狀態,其中包括MySQL伺服器版本以及目前連線的資訊。
至此,管理員就可以利用mytop來即時監控MySQL伺服器的運作狀態了。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>