Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  スピンロックのポーリングの構成

14.13.10 スピンロックのポーリングの構成

InnoDB の多くの相互排他ロック読み書きロックは短時間だけ予約されます。マルチコアシステムでは、スレッドがスリープの前に相互排他ロックまたは読み書きロックをしばらくの間取得できるかどうかを連続して確認すると、より効率的になる場合があります。このポーリング期間中に相互排他ロックまたは読み書きロックが使用可能になった場合、そのスレッドは同じタイムスライス内でただちに続行できます。ただし、共有オブジェクトの複数のスレッドが頻繁にポーリングしすぎると、キャッシュのピンポンが発生し、各プロセッサが互いのキャッシュの一部を無効にする場合があります。InnoDB は、以降の各ポーリング間にランダムな時間待つことによってこの問題を最小限に抑えます。この遅延は、ビジーループとして実装されます。

相互排他ロックまたは読み書きロックのテスト間の最大の遅延は、パラメータ innodb_spin_wait_delay を使用して制御できます。遅延ループの期間は、C コンパイラやターゲットプロセッサによって異なります。(100MHz Pentium の時代、この遅延の単位は 1 マイクロ秒でした。)すべてのプロセッサコアが高速なキャッシュメモリーを共有するシステムでは、この最大の遅延を短くするか、または innodb_spin_wait_delay=0 を設定してビジーループを完全に無効にすることができます。複数のプロセッサチップを備えたシステムでは、キャッシュを無効にすると重大な影響を与える場合があるため、最大の遅延を増やすことができます。

innodb_spin_wait_delay のデフォルト値は 6 です。スピン待ちの遅延は、MySQL オプションファイル (my.cnf または my.ini) で指定したり、コマンド SET GLOBAL innodb_spin_wait_delay=delay を使用して実行時に変更したりできる動的なグローバルパラメータです。ここで、delay は望ましい最大の遅延です。この設定を変更するには、SUPER 権限が必要です。

InnoDB のロック操作に関するパフォーマンスの考慮事項については、セクション8.10「ロック操作の最適化」を参照してください。


User Comments
Sign Up Login You must be logged in to post a comment.