MySQLで不要なSleepセッションを消すプログラム
0.改訂履歴
- 2005.10.03 新規作成
1.はじめに
このドキュメントでは,MySQLにて,ステータスがSleepになっているコネクションを,消すプログラムについて説明する. システムの暴走?や,キャンペーン等で急激なアクセスがきた場合,不要なコネクションが残る事がある. 放置しておくとmac connection値になるので,それを回避するために不要なプロセスを切断する. これが複数あるとkillコマンドを入力するのは面倒なので,Sleepセッションに限定して一括で実行するプログラムとなる.
2.プログラム
- 以下のプログラムを使って,実行すればよい.
#!/bin/sh MYSQLROOT=root MYPASSWD=password MYSQLADMIN='/usr/local/mysql/bin/mysqladmin' MYSQLmon='/usr/local/mysql/bin/mysql' TMPFILE=MySQLsessionKiller #get process list $MYSQLADMIN -u $MYSQLROOT -p$MYPASSWD processlist > /tmp/$TMPFILE.processlist #get SleepSession List and session ID cat /tmp/$TMPFILE.processlist | grep Sleep | cut -f 2 -d' ' > /tmp/$TMPFILE.sessionid #create kill SQL command cat /tmp/$TMPFILE.sessionid | sed "s/^/kill /g" | sed "s/$/;/g" > /tmp/$TMPFILE.killcommand # cat /tmp/$TMPFILE.killcommand | $MYSQLmon -u $MYSQLROOT -p$MYPASSWD > /tmp/$TMPFILE.status NOW_DATE=`date +%Y.%m.%d` NOW_TIME=`date +%H:%M:%S` echo ------------------------------ echo DATE echo ------------------------------ echo $NOW_DATE $NOW_TIME echo ------------------------------ echo Process list [Before] echo ------------------------------ cat /tmp/$TMPFILE.processlist echo ------------------------------ echo Process list [after] echo ------------------------------ $MYSQLADMIN -u $MYSQLROOT -p$MYPASSWD processlist echo ------------------------------ echo Exec log echo ------------------------------ cat /tmp/$TMPFILE.status echo END [root@db02 bin]# |
- このプログラムでは,次のような動作になる.
- mysqladminを使っプロセスリストを呼び出し,その中からセッションIDを取り出す.
- 取り出したセッションIDを,killコマンドのフォーマットにそろえて,SQL文を作成する.
- 作成したSQL文をmysqlモニタに読み込ませて実行させる.
- 実行結果などを表示する.
- /tmp以下にちょっとゴミファイルが残るが,これは意図的に残している.