10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb


MySQL 5.6リファレンスマニュアル/.../ InnoDB相互排他ロックおよび読み取り/書き込みロックの実装

14.13.2 InnoDB相互排他ロックおよび読み取り/書き込みロックの実装

MySQLおよびInnoDBでは,実行の複数のスレッドが共有デタ構造にアクセスします。InnoDBは,これらのアクセスを相互排他ロック読み取り/書き込みロックの独自の実装と同期させます。InnoDBは従来,InnoDB相互排他ロックを使用して読み取り/書き込みロックの内部状態を保護してきました。UnixおよびLinuxプラットフォームでは,IEEE Std 1003.1摄氏度(POSIX.1c)にあるように,InnoDB相互排他ロックの内部状態はPthreads相互排他ロックによって保護されます。

多くのプラットフォームには,相互排他ロックと読み取り/書き込みロックを実装するためのより効率的な方法が存在します。アトミック操作を使用すると,多くの場合,Pthreadsより効率的に複数のスレッドのアクションを同期させることができます。ロックを取得または解放する各操作をより少ないCPU命令で実行できるため,共有データ構造へのアクセスのためにスレッドが競合している場合の浪費時間が少なくなります。マルチコアプラットフォム上では,これがさらにスケを向上させます。

InnoDBは,以前に使用されていたPthreadsのアプロ,チを使用する代わりに,アトミックメモリーアクセスのためのGNUコンパイラコレクション(GCC)によって提供される組み込み関数を使用して相互排他ロックと読み取り/書き込みロックを実装します。より具体的には,gccバジョン4.1.2以降でコンパInnoDBは,pthread_mutex_tの代わりにアトミックビルト邮箱ンを使用してInnoDB相互排他ロックおよび読み取り/書き込みロックを実装します。

32ビットの微软Windowsでは,InnoDBは,手で書かれたアセンブラ命令を使用して(読み取り/書き込みロックではなく)相互排他ロックを実装していました。微软Windows 2000からは,GCCによって提供される組み込み関数と同様の,帐号ンタ帐号ロックされた変数アクセスのための関数が使用できます。Windows 2000以降では,InnoDBは邮箱ンタ邮箱ロックされた関数を使用します。手で書かれた古いアセンブラコードとは異なり,新しい実装では,読み取り/書き込みロックと64ビットプラットフォームがサポートされます。

Solaris 10ではアトミック操作のためのライブラリ関数が導入され,InnoDBは,デフォルトでこれらの関数を使用します。アトミックメモリーアクセスのためのGNUコンパイラコレクション(GCC)によって提供される組み込み関数をサポートしていないコンパイラを備えたSolaris 10上でMySQLがコンパイルされた場合,InnoDBはラ邮箱ブラリ関数を使用します。

この変更によって,マルチコアシステム上のInnoDBのスケラビリティが向上します。この機能は,それがサポトされているプラットフォム上で標準で有効になります。パフォマンスの向上を利用するためにパラメタやオプションを設定する必要はありません。アトミックメモリーアクセスのための GCC、Windows、または Solaris 関数が使用できないプラットフォームでは、InnoDBは,相互排他ロックと読み取り/書き込みロックを実装するための従来のPthreadsの方法を使用します。

MySQLが起動すると,InnoDBは,アトミックメモリーアクセスが相互排他ロックに使用されるか,相互排他ロックと読み取り/書き込みロックに使用されるか,またはどちらにも使用されないかを示すメッセージをログファイルに書き込みます。適切なルを使用してInnoDBが構築されており,かCPUが必要なアトミック操作をサポ,InnoDBは,相互排他ロックに組み込み関数を使用します。さらに,スレッド識別子(pthread_t)で比較およびスワップ操作を使用できる場合,InnoDBは,読み取り/書き込みロックのための命令も使用します。

注記

ソースからビルドしている場合は,そのビルドプロセスがプラットフォームの機能を正しく利用していることを確認してください。

ロックのパフォマンスへの影響の詳細は,セクション8.10 "ロック操作の最適化"を参照してください。


本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb