※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

- 人目 ( ̄ー ̄)/~~ アリガトネ




MySQL 5.5では、InnoDBのI/Oサブシステムを利用可能なI/Oキャパシティーをより有効に活用できるよう変更されています。
この変更点は、I/Oサブシステムの設定を詳細に制御する機能を提供します。

バックグラウンドI/Oスレッド

InnoDBは、いくつかのアクティビティーのI/Oにバックグラウンドスレッドを使っています。プリフェッチングディスクプロックとダーティーページのフラッシュ
はこれらのうちの2例です。以前までは、InnoDBはこれらのアクティビティーを実行する為に1スレッドのみ利用していたので、サーバーの性能を十分に活用しない状況でした。MySQL5.5では、複数の読書きのスレッドをバックグラウンドで利用可能となり、ページの読書きを高速に出来るようになりました。

パッチはバックグラウンドのI/Oスレッド数をシステム変数を使ってコンフィグ可能にしています。innodb_read_io_threadsは読込のプリフェッチ要求に使うスレッド数を制御します。innodb_write_io_threadsは、バッファーキャッシュからディスクへのダーティページを書込むスレッド数を制御します。両変数のデフォルト値は4です。

I/Oスレッドを増加させられると、InnoDBで複数のディスクを使う際に恩恵が生まれます。しかしながら、実行されるI/Oのタイプについては考慮する必要があります。ダイレクトライトよりバッファードライトを使うシステムでは、書込みのスレッド数を1以上に増やしても、もうすでに書込みは速いので、ほとんど恩恵が産まれないでしょう。

I/Oレートの調整


以前までは、InnoDBの単位時間当たりの入出力の命令数(IOPS)はコンパイル時間のパラメータでした。
この値は、バックグラウンドI/Oが、サーバーの資源を使いつくさないように、サーバーが100IOPSの性能があるという前提で100IOPSを下回らないように定められています。しかしながら、最近のシステムはこれよりすぐれており、この値はI/Oの利用を制限する必要がありまなくなりました。

MySQL5.5は、このI/Oレートのパラメータをinnodb_io_capacityシステム変数としました。この変数は、サーバーをたちあげる際に設定出来、高いI/Oレートを持つシステムでは高い値をとれます。高I/Oレートを持つということは、ダーティーページのフラッシュ、削除された列のリムーブ、インサートバッファの変更の反映が高速にされるので、サーバーが列の変更をより高レートで行いやすくします。innodb_io_capacityの標準の値は200です。一般的には、InnoDBのI/Oに利用しているディスクドライブの数の関数として、値を変更します。

I/O制限をあげられる機能は、とりわけ高いIOPSをサポートするプラットフォームで有用です。
例えば、InnoDBに複数のディスク、またはSSDを使っているシステムではこのパラメータを制御することでメリットが得られます。