表示された情報は、単に1度だけ実行した結果を眺めても意味のある項目は多くありません。これらは定期的に収集することによってはじめて意味を持ちます。
なにはともあれ、まずは情報収集を開始しましょう。
show statusの実行結果を定常的に収集するには、mysqladminコマンドを利用するのが簡単です。
/usr/bin/mysqladmin -u root -p{password} extended-status >> ~/status.txt
単純に情報収集するだけなら、このコマンドをcronに仕込んで定期的に実行すればよいでしょう。例えば、自身のユーザアカウントのcronに以下のように設定します。
*/5 * * * * /usr/bin/mysqladmin -u root -p{password} extended-status >> ~/status.txt
ただし、このままでは実行結果の羅列がどんどん追記されるだけです。そこで項目別に保存ファイルを分けるなど、上記コマンドを含めてスクリプト化しておけば便利です。
筆者の場合は以下のようなシェルスクリプトを作成して、~/data以下のディレクトリに情報を収集しています。なお、使用する際にはソケットファイルの場所やパスワード部分を、ご自身の環境にあわせて変更してください。
#!/bin/sh
########################
## Get mysql status
HOME=`/bin/echo $HOME`
DIR=$HOME/data
HOST=`/bin/hostname`
DATE=`/bin/date "+%Y/%m/%d %H:%M:%S"`
SOCKET=/var/lib/mysql/mysql.sock
COMMAND="/usr/bin/mysqladmin -u root -p{PASSWORD} extended-status"
if [ -S $SOCKET ];then
$COMMAND | /bin/awk '{print $2,$4}' | /bin/egrep -v '(^ |Variable_name)' | \
while read LABEL DATA
do
/bin/echo $DATE $DATA >> $DIR/$HOST.$LABEL
done
else
/bin/echo "MySQL is not running."
fi
また、各項目は単純なカウンタになっているものと収集時の瞬間的な値を示すものが入り混じっていますので注意してください(各項目の詳細はマニュアルを参照してください)。
例えば、Threads_createdは「接続を処理するために作成されたスレッドの数」で、累積値をあらわしています。これは単純なカウンタ値であるため、前回得られた値との差分を保存すべき項目となります。
逆にThreads_runningは「スリープ状態になっていないスレッドの数」なので、そのまま収集するのがよいです。このような点もスクリプト化しておけば、後の分析作業がより容易になるでしょう。
|