MySQLをチューニング,そしてスケールアップ/スケールアウトへ

第3回 MySQLチューニング(2) 設定項目と稼働状況の確認

この記事を読むのに必要な時間:およそ 2 分

稼働中のMySQLサーバのパラメータ確認-SHOW VARIABLESコマンド

SHOW VARIABLESコマンドでは現在のパラメータを確認できます。SHOW VARIABLESコマンドの出力内容はLIKEやWHEREで絞り込むこともできます。パラメータ名がわかっている場合には,⁠SELECT @@パラメータ名;」で値の確認も可能です。

図1 SHOW VAIRABLESコマンドの実行例

mysql> SHOW VARIABLES LIKE 'char%';
mysql> SHOW VARIABLES WHERE Value = 'ON';
mysql> SELECT @@character_set_server;

ここでの注意すべきポイントが2点あります。

  1. MySQLサーバ起動時の設定ではなく現在有効なパラメータが表示される
  2. デフォルトでは現在の接続で有効なパラメータが表示され,他の接続とは値が異なる可能性がある

1. MySQLサーバ起動時のパラメータではなく現在有効なパラメータが表示される

SETコマンドによって接続毎に一時的にパラメータを変更できる項目があります。SHOW VARIABLESコマンドの結果にはSETコマンドによって変更された後のパラメータが出力されるため,MySQLサーバの起動時の設定とは異なる可能性があります。

2. デフォルトでは現在の接続で有効なパラメータが表示され,他の接続とは値が異なる可能性がある

SETコマンドはデフォルトではコマンドを実行しているクライアントのパラメータを一時的に変更し,他のクライアントとは別の値を利用することができます。SETコマンドで設定した値はクライアントを切断するまでの間のみ有効です。他のクライアントのパラメータはGLOBALオプションを付けたSHOW GLOBAL VARIABLESコマンドで確認できます。現在の接続に関するコマンドと明示する場合はLOCALオプションを付けます。

例)

SHOW LOCAL VARIABLES;

SETコマンドにもGLOBALオプションが利用可能です。この場合,設定した値は「SET GLOBALコマンド以降に接続したクライアント」のみに適用され,コマンドを実行しているクライアントや接続済みの他のクライアントには適用されないので注意してください。またSET GLOBALコマンドの実行にはSUPER権限が必要です。

MySQLのパラメータ設定

MySQLのパラメータ設定方法は,設定ファイルでの指定とMySQLサーバのコマンドラインオプションでの指定があります。MySQLの設定ファイルはテキストファイルのため,各種のエディタで編集可能です。

どこに置かれた設定ファイルを使用するかはMySQLサーバのバージョンやOSによって異なるので注意が必要です。複数の設定ファイルに同じ設定項目で異なる値が設定されていた場合は,後から読み込まれたファイル(下記の図では後ろに書かれたファイル)の内容が優先されます。セキュリティの観点から,全ユーザが書き込み可能になっている設定ファイルはMySQLサーバからは利用されません。

参考リンク

MySQL 5.6リファレンスマニュアル 4.2.6 Using Option Files

図2 Mac OS X 10.9上でのMySQL 5.6.22が利用する設定ファイル

$ ./mysqld --verbose --help|grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

このため,MySQLサーバ起動時のコマンドラインオプション「--defaults-file」で設定ファイルを明示的に指定することを推奨します。なお,その他のコマンドラインオプションは設定ファイルの内容よりもさらに優先されるため,テストなどの目的で一時的にパラメータを変更する際に利用できます。

稼働状況の確認方法(1)-SHOW STATUSコマンド

SHOW STATUSコマンドではMySQLサーバの内部カウンタなどの値を確認できます。コマンド実行回数などは,デフォルトではSHOW STATUSコマンドを実行したクライアントによる値,GLOBALオプションを付けることでMySQLサーバ全体の値を確認できます。

主なカテゴリは以下のとおりです。

表 接頭辞とカテゴリ

接頭辞 カテゴリ
Com_ MySQLサーバ内でのコマンド実行回数
Create_tmp_ テンポラリテーブル作成
Handler_ Handlerインターフェースに対するコマンド実行回数
Innodb_ InnoDBストレージエンジン
Key_ MyISAMのインデックスキャッシュ
Performance_schema_ パフォーマンススキーマ
Qcache_ クエリキャッシュ
Select_ 問題となり得るSELECT文
Slave_ レプリケーションスレーブ
Sort_ ソート
Ssl_ SSL
Table_ テーブルレベルロックおよびテーブルキャッシュ
Thread_ MySQLサーバの内部スレッド
Uptime_ 稼働時間

SHOW GLOBAL STATUSコマンドの出力は,MySQLサーバの起動時点から現在までの積算値が出力されます。SHOW STATUSコマンドの場合は,Uptimeなど一部の値を除いて接続時からの積算値となります。FLUSH STATUSコマンドを実行することで一部のカウンタをリセットができるので,その後に挙動を確認したいSQL文を実行してカウンタの変化が確認可能となります。

著者プロフィール

梶山隆輔

MySQL Sales Consulting Senior Manager。

日本オラクル(株)において,MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なMySQL部門にて,オーストラリア,インド,台湾などに在籍するチームメンバーを束ね,アジア太平洋地域の25以上の国や地域でのMySQL普及やビジネスの拡大をミッションとする。

コメント

コメントの記入