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

PolarDB:スレッドプール

最終更新日:Nov 09, 2025

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

メリット

デフォルトでは、MySQL はスレッドにセッション排他モードを使用します。このモードでは、各セッションが排他的なスレッドを作成します。多くのセッションが存在すると、深刻なリソース競合が発生し、パフォーマンスが低下します。大量のスレッドスケジューリングとキャッシュの無効化も、パフォーマンスの急激な低下を引き起こします。

PolarDB スレッドプールは、さまざまな種類の SQL 操作に対して優先度および同時実行制御メカニズムを実装し、接続数を最適な数に近づけます。これにより、PolarDB データベースは、高接続および高い同時実行性の条件下で高いパフォーマンスを維持できます。スレッドプールのメリットは次のとおりです。

  • 多くのスレッドが同時に実行されると、スレッドプールは同時実行スレッドの数を自動的に最適な範囲に調整します。これにより、過度のスレッドスケジューリングと頻繁なキャッシュの無効化を回避できます。

  • 多くのトランザクションが同時に実行されると、スレッドプールは文とトランザクションに異なる優先度を割り当てます。文とトランザクションの同時実行性を個別に制御して、リソース競合を減らします。

  • スレッドプールは、管理関連の SQL 文に高い優先度を割り当て、これらの文が最初に実行されるようにします。これにより、システム負荷が高い場合でも、新しい接続の作成、管理、モニタリングなどの操作が安定して実行されることが保証されます。

  • スレッドプールは、複雑な SQL 文に比較的低い優先度を割り当て、その最大同時実行性を制限します。これにより、あまりにも多くの複雑な SQL 文がシステムリソースを使い果たし、データベースサービス全体が利用できなくなるのを防ぎます。

スレッドプールの使用

スレッドプール機能には、次のパラメーターが含まれます。必要に応じてコンソールで変更できます。詳細については、「クラスターとノードのパラメーターを設定する」をご参照ください。

説明

PolarDBコンソール のクラスターパラメーターは、MySQL 構成ファイルとの互換性を確保するために loose_ プレフィックスを使用します。これらのパラメーターを PolarDBコンソール で変更するには、loose_ プレフィックスが付いたパラメーターを選択します。

パラメータ

説明

loose_thread_pool_enabled

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

  • ON: この機能を有効にします。

  • OFF: この機能を無効にします。

説明
  • このパラメーターのデフォルト値はバージョンによって異なります。

    • MySQL 5.6: デフォルト値は OFF です。

    • MySQL 5.7MySQL 8.0.1、および MySQL 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マルチマスタークラスター (データベース/テーブル) 版の場合、2 つのプライマリノードの仕様が 4 コアと 8 GB のメモリであれば、値の範囲は 8 から 80、デフォルト値は 16 です。

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

loose_thread_pool_high_prio_mode

スレッドプールの優先度付きキューのモード。有効値:

  • transactions (デフォルト): オープンなトランザクション内の SQL 文は、優先度付きキューに追加され、チケットが割り当てられます。チケットの数は thread_pool_high_prio_tickets パラメーターで指定されます。これらのトランザクション内の後続の SQL 文は、チケットが使い果たされるまで優先度付きキューに配置されます。

  • statements: すべての SQL 文が優先度付きキューに追加されます。

  • none: 優先度付きキューに SQL 文は追加されません。

説明

範囲:

  • MySQL 5.6

  • MySQL 5.7

loose_thread_pool_high_prio_tickets

優先度付きキューのチケット数。

値の範囲: 0 から 4294967295。デフォルト値: 4294967295。

説明

範囲:

  • MySQL 5.6

  • MySQL 5.7

loose_thread_pool_idle_timeout

スレッドプール内のアイドルスレッドを解放するための時間しきい値。リクエストを処理していないアイドルスレッドは、この時間が経過すると解放されます。

値の範囲: 0 から 31536000。デフォルト値: 60。単位: 秒。

説明

適用対象:

  • MySQL 5.6

  • MySQL 5.7

loose_thread_pool_oversubscribe

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

アクティブスレッドとは、SQL 文を実行しているスレッドのことですが、次の 2 つの状況のスレッドは含まれません。

  • 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 以降の MySQL 8.0.1

loose_bypass_thread_pool_check_ignore_proxy

loose_bypass_thread_pool_ips パラメーターを確認する際に、プロキシ経由で接続するクライアント IP アドレスを無視するかどうかを指定します。有効値:

  • ON (デフォルト): プロキシ経由で接続するクライアント IP アドレスの場合、その IP アドレスが loose_bypass_thread_pool_ips で構成されていても、スレッドプールの制限が適用されます。

  • OFF: プロキシ経由で接続するクライアント IP アドレスの場合、その IP アドレスが loose_bypass_thread_pool_ips で構成されていれば、スレッドプールの制限は適用されません。

説明

適用バージョン: リビジョンバージョンが 8.0.1.1.19 以降の MySQL 8.0.1

loose_thread_pool_high_priority_users

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

例:

user1, user2
説明
  • 適用対象:

    • リビジョンバージョンが 8.0.1.1.19 以降の MySQL 8.0.1

    • リビジョンバージョンが 8.0.2.2.12 以降の MySQL 8.0.2

  • このパラメーターを構成した後、新しいデータベース接続にのみ有効になります。

  • 優先度の高いアカウントを構成しすぎないでください。

loose_thread_pool_mark_ddl_thread_timeout_sec

スレッドプール内の DDL スレッドのタイムアウトしきい値を指定します。この時間が経過すると、DDL スレッドはタイムアウトとしてマークされ、システムはリクエストを処理するために新しいスレッドを作成します。

値の範囲: 0 から 864000。デフォルト値: 600。単位: 秒。

説明

適用バージョン: リビジョンバージョンが 8.0.1.1.19 以降の MySQL 8.0.1

loose_thread_pool_mark_ddl_thread_timeout_immediately

スレッドプールの負荷が高く、低優先度キューが積み上げられている場合に、DDL スレッドをすぐにタイムアウトとしてマークするかどうかを指定します。DDL スレッドがタイムアウトとしてマークされると、システムはリクエストを処理するために新しいスレッドを作成します。このパラメーターは、頻繁なバッチ DDL 操作を必要とするビジネスシナリオに適しています。有効値:

  • ON: 有効。

  • OFF (デフォルト): この機能を無効にします。

説明

適用バージョン: リビジョンバージョンが 8.0.1.1.19 以降の 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读写测试