MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  MySQL 8.0 のよくある質問  /  MySQL 8.0 FAQ: MySQL Enterprise Thread Pool

A.15 MySQL 8.0 FAQ: MySQL Enterprise Thread Pool

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

A.15.1.

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

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

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

詳細は、セクション5.6.3「MySQL Enterprise Thread Pool」を参照してください。

A.15.2.

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

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

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

A.15.3.

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

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

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

A.15.4.

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

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

MySQL の Threads_running 変数は、MySQL サーバーで現在実行されている並列ステートメントの数を追跡します。 この変数が、サーバーが最適に動作しない (通常は InnoDB ワークロードで 40 を超える) リージョンを一貫して超えている場合、特に極端な並列オーバーロードの状況ではスレッドプールが役立ちます。

innodb_thread_concurrency を使用して同時に実行するステートメントの数を制限する場合は、スレッドプールがスレッドグループに接続を割り当て、トランザクションコンテンツ、ユーザー定義の指定などに基づいて実行をキューイングすることで、同じ問題をより適切に解決する必要があります。

最後に、ワークロードが主に短いクエリーで構成されている場合は、スレッドプールが有益です。

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

A.15.5.

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

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


関連キーワード:  プール, 接続, サーバー, 実行, ステートメント, パフォーマンス, 管理, InnoDB, 処理, 制限