MySQLについて言えることは、そのトランザクション(ACID準拠)ストレージエンジンであるInnoDBは確かにマルチスレッドであるということです。ただし、構成するのと同じくらいマルチスレッドです!!! 「すぐに使用できる」場合でも、InnoDBは、デフォルト設定のシングルCPU環境で優れたパフォーマンスを発揮します。InnoDBマルチスレッド機能を利用するには、多くのオプションをアクティブにすることを忘れないでください。
innodb_thread_concurrencyは、InnoDBが開いたままにできる同時スレッドの数の上限を設定します。このために設定する最適なラウンド数は、(2 X CPUの数)+ディスクの数です。更新:Percona NYC Conferenceから直接学んだように、InnoDB Storage Engineが実行中の環境に最適なスレッド数を見つけるように警告するには、これを0に設定する必要があります。
innodb_concurrency_ticketsは、免責で並行性チェックをバイパスできるスレッドの数を設定します。その制限に達すると、スレッドの並行性チェックが再び標準になります。
innodb_commit_concurrencyは、コミットできる同時トランザクションの数を設定します。デフォルトは0なので、これを設定しないと、任意の数のトランザクションが同時にコミットできます。
innodb_thread_sleep_delayは、InnoDBキューに再び入る前に、InnoDBスレッドが休止できるミリ秒数を設定します。デフォルトは10000(10秒)です。
innodb_read_io_threadsおよびinnodb_write_io_threads(両方ともMySQL 5.1.38以降)は、指定された数のスレッドを読み取りおよび書き込みに割り当てます。デフォルトは4で、最大は64です。
innodb_replication_delayは、スレーブにスレッド遅延を課し、innodb_thread_concurrencyに到達します。
innodb_read_ahead_thresholdは、非同期読み取りに切り替える前に、設定されたエクステント数(64ページ[ページ= 16K])の線形読み取りを許可します。
さらにオプションを指定すると、時間が逃げてしまいます。それらについては、MySQLのドキュメントで読むことができます。
ほとんどの人はこれらの機能を知らず、InnoDBがACID準拠のトランザクションを実行するだけで十分満足しています。これらのオプションのいずれかを調整する場合は、ご自身の責任で行ってください。
MySQL 5.5の複数のバッファプールインスタンス(9つのバッファプールインスタンスで162 GB)を使用して、この方法でデータをメモリに自動分割しようとしました。一部の専門家は、これによりパフォーマンスが50%向上するはずだと言っています。私が手に入れたのは、実際にInnoDBをクロールさせるスレッドロックです。私は1つのバッファ(162GB)に切り替えました、そして、すべては再び世界で順調でした。これを設定するには、Perconaの専門家が自由に必要です。明日、ニューヨークで開催されるPercona MySQL Conferenceに参加します。機会があればそれについて尋ねます。
結論として、マルチスレッド操作のデフォルト設定を考えると、InnoDBはマルチCPUサーバーで良好に動作するようになりました。それらを微調整するには、細心の注意、忍耐、優れたドキュメント、優れたコーヒー(またはRed Bull、Joltなど)が必要です。
おはよう、こんばんは、そしておやすみ!!!
更新2011-05-27 20:11
木曜日にニューヨークで開催されたPercona MySQL Conferenceから戻ってきました。なんて会議。多くのことを学びましたが、InnoDBに関して検討する回答を得ました。Ronald Bradfordから、innodb_thread_concurrencyを0に設定すると、InnoDBがスレッドの並行性を使用して内部的に最適なアクションを決定できると通知されました。MySQL 5.5でこれをさらに実験します。
更新2011-06-01 11:20
1つの長いクエリに関する限り、InnoDBはACIDに準拠しており、MultiVersion Concurrency Controlを使用して非常にうまく動作します。トランザクションは、他の人がデータにアクセスすることをブロックしないようにする分離レベル(デフォルトでは繰り返し可能な読み取り)を実行できる必要があります。
マルチコアシステムに関しては、InnoDBは長い道のりを歩んできました。過去には、InnoDBはマルチコア環境ではうまく機能しませんでした。複数のコアを取得して複数のmysqldプロセスをCPUに分散するには、単一のサーバーで複数のmysqlインスタンスを実行する必要がありました。これは、Percona、およびその後のMySQLのおかげで、もはや必要ありません。現在のInnoDBの現在のインスタンスは、シングルコアサーバーで正常に動作できます。