MySql優化——觀察服務器狀態

通常在對MySQL進行優化的時候,不要一上來就去優化MySQL的語句。MySQL的優化是一個系統話的過程,我們要自上而下來對MySQL進行優化。MySQL優化的第一步是觀察服務器狀態,找出出問題的地方在哪裏,然後纔能有的放矢。

我們可以使用show status和show processlist命令來觀察MySQL的服務器狀態。

show status返回了服務器很多狀態指標,但是通常我們只需要關注以下幾項:Queries,Threads_connected,Threads_running。這三項分別代表數據庫的查詢數量,已經連接的線程數和正在執行的線程數。注意這些指標項都是一個累計的值,所以如果我們要計算出這些統計項的差值才能觀察出服務器的狀態。爲了計算出這些統計項的差值,我們可以有兩種方案。爲了能夠使用linux的awk工具來實現數據統計,我們使用mysqladmin ext來代替MySQL命令行下面的show status命令。

第一種:

我們首先新建一個start.sh腳本文件,腳本內容爲

#!/bin/bash

while true

do

mysqladmin -uroot ext|awk '/Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}' >> status.txt

sleep 1

done

這個腳本的意思其實很簡單,每隔一秒查詢出MySQL的查詢數目,線程連接數目,線程運行數目,並將結果追加到status.txt文件中。我們可以將這個腳本執行24個小時或者一定的時間,然後對status的內容進行分析。(關於awk,可以參考http://man.linuxde.net/awk,這裏不再贅述)。

然後使用awk統計出status文件中的上下兩行的差值,使用下面的shell命令:

awk 'BEGIN{print Queries,Threads_connected,Threads_running}NR==1{last=$1;next;}{q=$1-last;last=$1}{print q,$2,$3}' status.txt

該命令行可以統計出MySQL服務器的狀態差值,同樣使用了linux的awk工具。

然後我們可以將統計出的數據導入成爲excel表格,生成圖表,就可以清楚的看出來服務器的狀態走勢。

第二種

我們可以直接使用mysqladmin ext的參數來統計出來MySQL的服務器狀態。通過-r和-i參數我們可以達到同樣的效果。-r可以看到各個指標的差值,-i可以設定刷新頻率。

mysqladmin -uroot -r -i -pxxx ext

結合awk我們就可以統計出來MySQL服務器的狀態。

mysqladmin -uroot -pxxx -r -i 1 ext |awk -F"|" '{if($2 ~ /Variable_name/){print "<---------"strftime("%HH:%mm:%ss")"---------->"}if($2 ~ /Queries|Threads_connected|Threads_running/){print $2,$3}}' >>status.txt

通過觀察服務器的連接狀態和查詢數量,我們可以繪製出服務器的狀態折線圖。通常如果狀態折線圖中總是週期性的出現查詢高峯,可能就是緩存的失效時間固定在某個時間點。針對這樣的情況,我們可以增加緩存時間,每天夜裏刷新緩存。通常情況下夜間的訪問量不會太大,在夜間緩存失效不會造成查詢洪峯。等到白天查詢變多的時候,其實我們已經建立起了一部分索引。避免出現查詢高峯。

或者我們可以把緩存時間設爲一個區間值,讓緩存逐漸失效,而不是在某一個點一起失效。這樣也能有效的防止查詢高峯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章