すべてのプロダクト
Search
ドキュメントセンター

PolarDB:スレッドプール

最終更新日:Jun 17, 2025

PolarDB for MySQL は、データベースのパフォーマンスとリソース使用率を最適化するために、スレッドプール機能を提供します。この機能は、スレッドをセッションから分離します。セッションごとに 1 つのスレッドを使用する代わりに、この機能はスレッドのプールを使用して、アクティブなセッション全体でタスクを実行します。

メリット

従来の MySQL アーキテクチャでは、セッションごとにスレッドが作成および維持されます。多数のセッションが存在する場合、高いリソース競合、過剰なスレッドスケジューリング、およびキャッシュの無効化が発生する可能性があり、これによりクラスタのパフォーマンスが大幅に低下します。

PolarDB のスレッドプールでは、さまざまなタイプの SQL 操作に異なる優先順位を設定し、同時実行制御を実装し、接続数を最適な数に制限できます。これにより、PolarDB クラスタは、高い接続同時実行性の下でも高いパフォーマンスを維持できます。スレッドプール機能には、次のメリットがあります。

  • 多数のスレッドが同時に実行されている場合、スレッドプールは同時実行スレッドの数を適切な範囲内で自動的に調整します。これは、過剰なスレッドスケジューリングを回避し、キャッシュの無効化のリスクを軽減するのに役立ちます。

  • 多数のタスクが同時に実行されている場合、スレッドプールはステートメントとトランザクションに個別に優先順位を付けて管理し、同時実行ステートメントとトランザクションの数を制御します。これにより、リソース競合が軽減され、システムパフォーマンスが最適化されます。

  • スレッドプールは、管理関連の SQL ステートメントにより高い優先順位を付与します。これにより、接続の確立、データベース管理、データベース監視などの操作は、システム負荷が高い場合でも確実に実行されます。

  • スレッドプールは、複雑な SQL ステートメントにより低い優先順位を付与し、これらのステートメントの最大同時実行数を制限します。これにより、複雑なクエリによるシステムリソースの過剰な消費を防ぎ、データベースシステム全体が動作し続けるようにします。

スレッドプールの使用方法

次の表で説明されているパラメータを使用して、PolarDB コンソールでスレッドプール機能を構成できます。詳細については、「クラスタとノードパラメータを構成する」をご参照ください。

説明

MySQL 構成ファイルとの互換性を確保するために、PolarDBコンソールのクラスタパラメータには、loose_ というプレフィックスが付いています。

パラメータ

説明

loose_thread_pool_enabled

スレッドプール機能を有効にするかどうかを指定します。有効値:

  • ON

  • OFF

説明
  • デフォルト値は、データベースエンジンのバージョンによって異なります。

    • PolarDB for MySQL 5.6 の場合、デフォルト値は OFF です。

    • PolarDB for MySQL 5.7、8.0.1、および 8.0.2 の場合、デフォルト値は ON です。

  • スレッドプール機能を有効または無効にした後、クラスタを再起動する必要はありません。

loose_thread_pool_size

スレッドプール内のスレッドグループの数。有効値は、プライマリノードの CPU コア数によって異なります。

有効値:DBNodeClassCPU ~ DBNodeClassCPU × 10。

デフォルト値:DBNodeClassCPU × 2

説明
  • DBNodeClassCPU は、プライマリノードの CPU コア数を表します。値は整数です。

  • データベースエンジンMySQL 5.7 であるクラスタの場合、デフォルト値は DBNodeClassCPU です。

例:

  • データベースエンジンMySQL 8.0.1 で、エディションが クラスタエディション であるクラスタの場合、プライマリノードに 4 コアと 8 GB のメモリがある場合、パラメータの有効値は 4 ~ 40 で、デフォルト値は 8 です。

  • データベースエンジンMySQL 8.0.1 で、エディションが マルチマスタークラスタ(データベース/テーブル)エディション であるクラスタの場合、プライマリノードに 4 コアと 8 GB のメモリがある場合、パラメータの有効値は 8 ~ 80 で、デフォルト値は 16 です。

  • データベースエンジンMySQL 5.7 で、エディションが クラスタエディション であるクラスタの場合、プライマリノードに 4 コアと 8 GB のメモリがある場合、パラメータの有効値は 4 ~ 40 で、デフォルト値は 4 です。

loose_thread_pool_high_prio_mode

高優先度キューに追加する SQL クエリのタイプ。有効値:

  • transactions(デフォルト):進行中のトランザクションの SQL クエリが高優先度キューに追加され、チケットが割り当てられます。チケットの数は、thread_pool_high_prio_tickets パラメータで指定されます。これらのトランザクションの後続のすべての SQL クエリは、チケットがなくなるまで高優先度キューに配置されます。

  • statements:すべての SQL クエリが高優先度キューに追加されます

  • none:高優先度キューに SQL クエリは追加されません

デフォルト値:transactions。

説明

このパラメータは、PolarDB for MySQL 5.6 および 5.7 クラスタでのみサポートされています。

loose_thread_pool_high_prio_tickets

高優先度キューに割り当てられるチケットの最大数。

有効値:0 ~ 4294967295。

デフォルト値:4294967295。

説明

このパラメータは、PolarDB for MySQL 5.6 および 5.7 クラスタでのみサポートされています。

loose_thread_pool_idle_timeout

アイドル状態のスレッドが解放されるまでのタイムアウトしきい値。

有効値:0 ~ 31536000。

デフォルト値:60

単位:秒。

説明

このパラメータは、PolarDB for MySQL 5.6 および 5.7 クラスタでのみサポートされています。

loose_thread_pool_oversubscribe

各スレッドグループで許可されるアクティブスレッドの最大数。

アクティブスレッドとは、SQL ステートメントを実行しているスレッドのことです。スレッドによって実行されるステートメントが次の状態にある場合、スレッドはアクティブではありません。

  • SQL ステートメントは、ディスク I/O 操作の完了を待機しています。

  • SQL ステートメントは、トランザクションのコミットを待機しています。

有効値:1 ~ 1000。

デフォルト値:20。

loose_thread_pool_stall_limit

スレッドプールが輻輳状態になるまでのタイムアウトしきい値。

スレッドプールが輻輳状態になると、システムは SQL ステートメントを実行するための新しいスレッドを作成します。

有効値:1 ~ 18446744073709551615。

デフォルト値:10。

単位:ミリ秒。

説明

データベースエンジンMySQL 5.6 であるクラスタの場合、デフォルト値は 30 ミリ秒です。

loose_bypass_thread_pool_ips

スレッドプールによって課せられる制限をバイパスすることが許可されているクライアント IP アドレス。これらの IP アドレスを持つクライアントは、スレッドプールが完全に占有されている場合でも、管理 SQL ステートメントを実行できます。

例:

10.69.96.16,10.69.96.17
説明

このパラメータは、リビジョンバージョン 8.0.1.1.19 の PolarDB for MySQL 8.0.1 でのみサポートされています。

loose_bypass_thread_pool_check_ignore_proxy

これらの IP アドレスを持つクライアントがプロキシ経由でデータベースに接続する場合に、loose_bypass_thread_pool_ips パラメータの IP アドレスの指定を無視するかどうかを指定します。有効値:

  • ON(デフォルト):これらの IP アドレスを持つクライアントがプロキシ経由でデータベースに接続する場合に、loose_bypass_thread_pool_ips パラメータの IP アドレスの指定を無視します。

  • OFF:これらの IP アドレスを持つクライアントがプロキシ経由でデータベースに接続する場合に、loose_bypass_thread_pool_ips パラメータの IP アドレスの指定を無視しません。

説明

このパラメータは、リビジョンバージョン 8.0.1.1.19 の PolarDB for MySQL 8.0.1 でのみサポートされています。

loose_thread_pool_high_priority_users

高優先度データベースアカウント。これらのアカウントからのリクエストは、スレッドプールの高優先度キューに配置され、最初に処理されます。

例:

user1, user2
説明
  • このパラメータは、リビジョンバージョン 8.0.1.1.19 の PolarDB for MySQL 8.0.1 でのみサポートされています。

  • このパラメータは、新しく確立されたデータベース接続にのみ有効です。

  • 最小限の高優先度アカウントを構成することをお勧めします。

loose_thread_pool_mark_ddl_thread_timeout_sec

スレッドプールにおける DDL 操作のタイムアウトしきい値。しきい値に達すると、DDL 操作はタイムアウトとしてラベル付けされ、システムは操作を実行するための新しいスレッドを自動的に作成します。

有効値:0 ~ 864000。

デフォルト値:600。

単位:秒。

説明

このパラメータは、リビジョンバージョン 8.0.1.1.19 の PolarDB for MySQL 8.0.1 でのみサポートされています。

loose_thread_pool_mark_ddl_thread_timeout_immediately

スレッドプールが高負荷状態で、低優先度キューが積み重なっている場合に、DDL ステートメントをすぐにタイムアウトとしてラベル付けし、ステートメントを処理するための新しいスレッドを作成するかどうかを指定します。このパラメータは、多数の DDL ステートメントを実行する必要があるシナリオに適用されます。有効値:

  • ON

  • OFF(デフォルト)

説明

このパラメータは、リビジョンバージョン 8.0.1.1.19 の PolarDB for MySQL 8.0.1 でのみサポートされています。

スレッドプールのステータスをクエリする

次のステートメントを実行して、スレッドプールのステータスをクエリできます。

select * from information_schema.THREAD_POOL_STATUS;

出力例:

mysql> select * from information_schema.THREAD_POOL_STATUS;
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
| ID | THREAD_COUNT | ACTIVE_THREAD_COUNT | WAITING_THREAD_COUNT | DUMP_THREAD_COUNT | SLOW_THREAD_TIMEOUT_COUNT | CONNECTION_COUNT | LOW_QUEUE_COUNT | HIGH_QUEUE_COUNT |
+----+--------------+---------------------+----------------------+-------------------+---------------------------+------------------+-----------------+------------------+
(以下、出力例のため省略)

次の表に、パラメータを示します。

パラメータ

説明

ID

スレッドプールの ID。

THREAD_COUNT

スレッドプール内のスレッド数。

ACTIVE_THREAD_COUNT

スレッドプール内のアクティブスレッド数。

WAITING_THREAD_COUNT

スレッドプール内で、ディスク I/O 操作の完了を待機しているスレッドと、トランザクションのコミットを待機しているスレッドの数。

DUMP_THREAD_COUNT

スレッドプール内の DUMP クラスの持続的接続の数。

SLOW_THREAD_TIMEOUT_COUNT

スレッドプール内でタイムアウトとしてラベル付けされたスレッドの数。

CONNECTION_COUNT

スレッドプール内で確立されたユーザー接続の数。

LOW_QUEUE_COUNT

スレッドプールの低優先度キューにある保留中のリクエストの数。

HIGH_QUEUE_COUNT

スレッドプールの高優先度キューにある保留中のリクエストの数。

Sysbench テスト

このセクションでは、スレッドプール機能が有効になっている場合と無効になっている場合のデータベースパフォーマンスを比較します。テスト結果は、スレッドプール機能が有効になっている場合、データベースは高同時実行条件下で大幅に高いパフォーマンスを提供することを示しています。

図 1. インデックスのないテーブルに対する更新操作を処理するためのオンライントランザクション処理(OLTP)システムのパフォーマンスOLTP无索引更新

図 2. 書き込み専用操作を処理するための OLTP システムのパフォーマンスOLTP只写

図 3. 読み取り専用操作を処理するための OLTP システムのパフォーマンスOLTP只读

図 4. 読み取り/書き込み操作を処理するための OLTP システムのパフォーマンスOLTP读写测试