[MySQLウォッチ]第14回 サーバー設定を見直してMySQLの性能を引き出す
初歩的なMySQLサーバーのチューニング
本来,データベースのチューニングとは,データベースの構造と処理内容に基づいて行うものである。これは,非常に高度で時間のかかる作業である。しかし,その部分に手をつける前に行わなくてはいけない初歩的なチューニングも存在する。ここでは,そのような初歩的な設定内容を紹介する。 MySQLサーバーのパフォーマンスが悪い場合,最初に確認するのはメモリーの割り当てだ。そのマシンに搭載されているメモリーが大きいほど,MySQLサーバーに割り当てる量を大きくすることをお勧めする。「mysqld --help」で表示されるkey_buffer_sizeを確認してほしい。出力例では,key_buffer_sizeは,デフォルト状態となっており,約8MBである。MySQL ABでは,マシンに搭載しているメモリーの1/4を推奨値としている。
リスト5●key_buffer_sizeの出力例(mysqld --helpまたはshow variables) key_buffer_size 8388572 key_buffer_sizeを調整する指標として,キャッシュ・ミス率がある。キャッシュ・ミス率は,Key_reads / Key_read_requestsで算出可能だ。キャッシュ・ミス率は,0.003より小さい値となるのが理想である。key_buffer_sizeを大きくすることで,キャッシュ・ミス率を改善できる。 key_buffer_sizeは,全コネクション(クライアントからの接続)から共通で使用する。それに対して,read_buffer,read_rnd_buffer,sort_buffer,join_bufferは,コネクションごとに使用されるバッファだ。そのため,大きくすることによって,パフォーマンスが向上するが,コネクションが多いMySQLサーバーでは注意が必要だ。
MySQLのデータベースは,ファイルとして格納されています。とくにMyISAMタイプのテーブルは,3つのファイルから構成されるので一つのテーブルにアクセスすると3つのファイルが開かれる。MySQLサーバーでは,一度開いたファイルのポインタをtable_cacheに保存して,次回からのアクセスを高速化する。
リスト6●table_cacheの出力例(mysqld --helpまたはshow variables) table_cache 64 Table_cacheの値を大きくすることで,より多くのテーブルのアクセスが高速化される。Opened_tablesの値が大きい場合には,table_cacheの増加を検討する。
スレッドとは,クライアントからのリクエストを処理するためのプロセスだ。デフォルトでは,クライアントのコネクション(接続)ごとにスレッドを生成し,コネクションの接続が切断されるとスレッドも消滅する。Threads_cacheは,不要になったスレッドをプールして再利用するための機能だ。thread_cache_sizeは,キャッシュするスレッド数を指定する。デフォルトは,0なのでスレッドのキャッシュを行わない。
リスト7●thread_cache_sizeの出力例(mysqld --helpまたはshow variables) thread_cache_size 8Threads_created,Threads_connected,Threads_runningのいずれかが大きい場合には,Threads_cacheを大きくすることで,スレッド生成を減らして接続時のレスポンスを向上できる。
チューニングとは逆に,性能を維持するためにコネクション(クライアントの接続)を抑制するのがmax_connectionsの値だ。デフォルトでは100,すなわち同時に100コネクションが可能になっている。
リスト8●max_connectionsの出力例(mysqld --helpまたはshow variables) max_connections 100 コネクションが100を越える場合には,この値を増やす必要がある。ただし,むやみに増やすと,多数のコネクションにより,パフォーマンスの低下を生じる危険性がある。 このように,MySQLサーバーのチューニングの最初の一手は,どのようにメモリーを割り当てるかと言う点である。ここで紹介したチューニングを行い,改善されないのであれば,MyISAMやInnoDBに関するシステム変数の調整に進むべきであろう。それでも改善されないのであれば,いよいよデータベース構造やSQLステートメントのチューニングを行う必要があるだろう。もちろん,ネットワークやサーバー・ハードウエアなど,MySQL以外の要因も疑うことを忘れてはいけない。
佐藤栄一(Satoh Eiichi)
■著者紹介 佐藤栄一(さとうえいいち) |