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


MySQL 5.6 リファレンスマニュアル  /  MySQL 5.6 のよくある質問  /  MySQL 5.6 FAQ: MySQL エンタープライズスケーラビリティースレッドプール

A.14 MySQL 5.6 FAQ: MySQL エンタープライズスケーラビリティースレッドプール

A.14.1. スレッドプールとは何ですか。これはどのような問題を解決しますか。
A.14.2. スレッドプールは、最適なパフォーマンスおよびスループットのために、並列セッションおよびトランザクションをどのように制限および管理しますか。
A.14.3. スレッドプールは、クライアント側の接続プールとどのように異なりますか。
A.14.4. スレッドプールはどのような場合に使用しますか。
A.14.5. 推奨されるスレッドプールの構成はありますか。

A.14.1.

スレッドプールとは何ですか。これはどのような問題を解決しますか。

MySQL スレッドプールは、MySQL サーバーのデフォルトの接続処理機能を拡張する MySQL サーバーのプラグインであり、ステートメント/クエリーおよびトランザクションの並列実行数を制限して、タスクを完了するための CPU およびメモリーのリソースがそれぞれに十分に確保されるようにします。MySQL 5.5 および 5.6 の商用配布には、スレッドプールプラグインが含まれています。

MySQL サーバーのデフォルトのスレッド処理モデルでは、クライアント接続ごとに 1 つのスレッドを使用してステートメントが実行されます。より多くのクライアントがサーバーに接続してステートメントを実行すると、全体的なパフォーマンスが低下します。スレッドプールプラグインは、オーバーヘッドを軽減してパフォーマンスを向上させるように設計された代替のスレッド処理モデルを提供します。スレッドプールプラグインは、特に現在のマルチ CPU/コアシステムでの多数のクライアント接続において、ステートメント実行スレッドを効率的に管理することによって、サーバーのパフォーマンスを向上させます。

詳細は、セクション8.11.6「スレッドプールプラグイン」を参照してください。

A.14.2.

スレッドプールは、最適なパフォーマンスおよびスループットのために、並列セッションおよびトランザクションをどのように制限および管理しますか。

スレッドプールは、分割統治手法を使用して並列性を制限および調整します。MySQL サーバーのデフォルトの接続処理と異なり、スレッドプールでは接続とスレッドが分離され、接続およびそれらの接続から受け取ったステートメントを実行するスレッドが固定された関係を持たないようになっています。スレッドプールは、構成可能なスレッドグループ内でクライアント接続を管理します。スレッドグループでは、実行される処理の性質に基づいて優先順位が付けられ、キューに入れられます。

詳細は、セクション8.11.6.2「スレッドプール操作」を参照してください。

A.14.3.

スレッドプールは、クライアント側の接続プールとどのように異なりますか。

MySQL 接続プールはクライアント側で動作し、MySQL サーバーに対して MySQL クライアントで接続および切断が繰り返されないようにします。MySQL クライアントのアイドル状態の接続をキャッシュし、必要に応じてほかのユーザーが使用できるように設計されています。これにより、クエリーが MySQL サーバーに発行されたときに、接続の確立および切断のオーバーヘッドおよびコストが最小化されます。MySQL 接続プールは、クエリー処理機能、またはバックエンドの MySQL サーバーの負荷を認識できません。それとは対照的に、スレッドプールは MySQL サーバー側で動作し、インバウンドの並列接続の実行、およびバックエンドの MySQL データベースにアクセスするクライアント接続から受け取ったクエリーの実行を管理するように設計されています。機能が分離されているため、MySQL 接続プールとスレッドプールは次元の異なるものであり、相互に独立して使用できます。

MySQL Connector を使用した MySQL の接続プールについては、第23章「Connector および APIで説明しています。

A.14.4.

スレッドプールはどのような場合に使用しますか。

スレッドプールを最適に使用するには、考慮するべきいくつかの経験則があります。

MySQL の Threads_running 変数は、MySQL サーバーで現在実行されている並列ステートメントの数を追跡します。この変数がサーバーが最適に動作しない範囲に常時ある場合 (通常、InnoDB のワークロードの場合、40 を超えている場合)、特にきわめて並列負荷が高い状況では、スレッドプールを使用することは効果があります。

innodb_thread_concurrency を使用して同時に実行されるステートメントの数を制限している場合、スレッドプールを使用すると、トランザクションの内容、ユーザー定義の指定などに基づいて、接続をスレッドグループに割り当てて実行をキューに入れることによって、同じ問題が少しだけ良好に解決されます。

最後に、ワークロードが主に短いクエリーで構成されている場合、スレッドプールを使用することは効果があります。

詳細は、セクション8.11.6.3「スレッドプールのチューニング」を参照してください。

A.14.5.

推奨されるスレッドプールの構成はありますか。

スレッドプールには、パフォーマンスに影響する、ユーザー事例から追加された多数の構成パラメータがあります。これらの詳細、およびチューニングのヒントについては、セクション8.11.6.3「スレッドプールのチューニング」を参照してください。