tencent cloud

TDSQL-C for MySQL

動向とお知らせ
製品アップデート
製品お知らせ
初心者ガイド
製品概要
プロダクト概要
製品の強み
適用シーン
製品アーキテクチャ
製品仕様
インスタンスタイプ
製品機能一覧
データベースのバージョン
リージョンとアベイラビリティゾーン
基本概念
利用制限
利用ガイドの推奨事項
自社開発カーネル
カーネル概要
カーネルバージョンのアップデート情報
カーネル最適化バージョン
機能特性
パフォーマンス関連機能
セキュリティカテゴリの機能
安定性機能
分析エンジン特性
カーネル問題のチェックと修復
購入ガイド
課金概要
製品価格
クラスタを作成する
構成変更説明
未払いについての説明
継続支払いの説明
返金ポリシー
従量課金から年/月単位サブスクリプションへの変換
従量課金からServerlessへの変換
付加価値サービスの課金説明
料金請求書の確認
クイックスタート
データベース監査
概要
監査インスタンス一覧
監査サービスを有効化する
監査ログの確認
ログ配信
事後アラーム設定
監査ルールの変更
監査サービスを変更する
監査サービスを停止する
監査ルールテンプレート
監査タスクの照会
サブユーザーへのデータベース監査利用権限付与
Serverlessサービス
Serverless入門
サーバーレス版クラスタの作成と管理
伸縮性スケーリング管理ツール
Serverlessリソースパック
マルチAZデプロイ
設定を変更する
よくあるご質問
Serverlessコスト見積ツール
操作ガイド
操作概要
コンソールでのクラスタページビューの切り替え
データベース接続
インスタンス管理
設定を変更する
インスタンス形態管理
クラスタ管理
読み取り専用インスタンス管理 
データベースプロキシ
アカウント管理
DMC
DMC(データベース管理ツール)
パラメータ設定
マルチAZデプロイ
グローバルデータベース
バックアップとリストア
操作ログ
データマイグレーション
パラレルクエリ
列ストレージインデックス CSI
分析エンジン
データベースセキュリティと暗号化
モニタリングとアラーム
SQLの基本操作
以下のコマンドを実行して、TDSQL-C for MySQLに接続してログインします
Tag
実践チュートリアル
TDSQL-C for MySQL データベース監査の等級保護実践
非InnoDBテーブル問題のワンクリック移行検出処理方法
DTSによるデータベースバージョンのアップグレード MySQL 5.7から8.0へ
TDSQL-C for MySQL 使用規範
新版コンソール
データベースプロキシの複数接続アドレスによる複数ROグループの実現
データベースプロキシのメリット
ストレージの課金モードの選び方
DTSによるリモートディザスタリカバリの構築
クラスタ用VPCの作成
データ復旧の方法
CPU使用率の高騰問題の解決方法
サブユーザーへの監視データ閲覧権限付与方法
ホワイトペーパー
セキュリティホワイトペーパー
性能ホワイトペーパー
トラブルシューティング
接続関連
性能関連
よくあるご質問
基本概念
購入と課金
サポートされるフォーマット
接続とネットワーク
機能特性
コンソールの操作
データベーステーブル
パフォーマンスとログ
データベース監査
TDSQL-C for MySQLとTencentDB for MySQLの違い
関連契約
SLA
利用規約
TDSQL-C ポリシー
プライバシーポリシー
データ処理と安全プロトコル
汎用参考
標準と認証
用語一覧
お問い合わせ

動的スレッドプール

PDF
フォーカスモード
フォントサイズ
最終更新日: 2025-12-30 16:14:39

機能説明

TDSQL-C for MySQLは、コンピュートとストレージの分離設計思想を採用し、パブリッククラウド環境におけるビジネス成長に応じたクラスタの弾力的な拡張という必須要件を満たします。データベースのコンピュートノード(Database Engine Server)はメタデータのみを保存し、データファイルやRedo Logなどはリモートのストレージノード(Database Storage Server)に保存されます。各コンピュートノード間ではRedo Log関連のメタデータ情報の同期のみで済むため、プライマリノードとリードレプリカノード間のレプリケーション遅延が大幅に低減されます。さらに、プライマリノードに障害が発生した場合、迅速に新しいノードを起動してシームレスな置換を実現します。 スレッドプール(Thread_pool)は一定数のワーカースレッドで接続リクエストを処理するため、OLTPワークロードのシナリオに適しています。ただし、スロークエリ傾向のリクエストでは、ワーカースレッドが高遅延操作でブロックされ、新規リクエストへの応答が遅延し、従来のone-thread-per-connection(Per_thread)モードよりもシステムスループットが低下する課題があります。 Per_threadモードとThread_poolモードにはそれぞれ長所短所があり、システムは業務タイプに応じて柔軟に切り替える必要があります。残念ながら、現在の両モードの切り替えにはサーバーの再起動が必須です。通常、モード切り替え需要は業務ピーク時に発生するため、強制再起動は業務に深刻な影響を与えます。 Per_threadモードとThread_poolモードの柔軟な切り替えを実現するため、TDSQL-C for MySQLはスレッドプール動的切り替え機能を最適化しました。つまり、データベースサービスを再起動せずにスレッドプールを動的に有効化または無効化できます。

サポートバージョン

カーネルバージョン TDSQL-C for MySQL 5.7 2.0.23/2.1.9 以降。
カーネルバージョンはTDSQL-C for MySQL 8.0の3.1.10以上です。

適用シーン

性能が重視され、業務タイプに応じてデータベースの動作モードを柔軟に調整する必要があるビジネス。

性能影響

パラメータ thread_handling の設定により、サーバーが接続スレッドに使用するスレッド処理モデルを切り替えることができます。このパラメータの値を pool-of-threads から one-thread-per-connection に切り替えるプロセス自体は、クエリの蓄積や性能への影響をもたらしません。
パラメータ thread_handling の設定により、サーバーが接続スレッドに使用するスレッド処理モデルを切り替えることができます。このパラメータの値を one-thread-per-connection から pool-of-threads に切り替えるプロセスでは、以前スレッドプールが休止状態になっているため、QPSが極めて高く持続的な高負荷がかかっている場合、一定のリクエスト蓄積が存在する可能性があります。解決策は以下の通りです:
ソリューション1:thread_pool_oversubscribeを適切に増加し、thread_pool_stall_limitを適切に減少させることで、スレッドプールを迅速に活性化します。蓄積されたSQLが処理された後、状況に応じて上記の変更を元に戻します。
ソリューション2:SQLの蓄積が発生した場合、数秒間業務トラフィックを一時停止または低減し、pool-of-threadsの活性化が完了するのを待ってから、持続的な高負荷業務トラフィックを再開します。

使用説明

thread_handling_switch_mode を追加し、スレッドプール動的切り替え機能を制御するために使用されます。選択可能な値とその意味は以下の通りです:
選択可能な値
意味
disabled
モードの動的切り替えを禁止する
stable
新規接続のみ移行
fast
新規接続と新規リクエストの両方を移行、デフォルトモード
sharp
アクティブな接続を強制終了し、ユーザーに再接続を促すことで、迅速な切り替えを実現します。
show threadpool statusに以下の状態を追加しました:
connections_moved_from_per_thread は、Per_thread から Thread_pool へ移行した接続数を表します。
connections_moved_to_per_thread は、Thread_pool から Per_thread へ移行した接続数を表します。
events_consumed は各スレッドプールワーカースレッドグループが消費したイベントの総数を示します。Thread_pool から Per_thread へ移行後、イベント総数は増加しなくなります。
average_wait_usecs_in_queue は各イベントがキュー内で平均的に待機した時間を示します。
show full processlistに以下の状態を追加しました:
Moved_to_per_thread は当該接続が Per_thread へ移行した回数を表します。
Moved_to_thread_pool は当該接続が Thread_pool へ移行した回数を表します。

パラメータ説明

スレッドプール関連パラメータの紹介:
パラメータ名
動的
タイプ
デフォルト
パラメータ値の範囲
説明
thread_pool_idle_timeout
Yes
uint
60
[1, UINT_MAX]
ワーカースレッドは、処理すべきネットワークイベントがない場合、最大でこの時間(秒単位)待機した後に破棄されます。
thread_pool_oversubscribe
Yes
uint
3
[1,1000]
1つのワーキンググループで許可される最大worker数
thread_pool_size
Yes
uint
現在のマシンのCPU数
[1,1000]
スレッドグループの数
thread_pool_stall_limit
Yes
uint
500
[10, UINT_MAX]
この時間間隔(単位:ミリ秒)ごとに、タイマースレッドがすべてのスレッドグループを巡回してチェックします。
スレッドグループにリスナーが存在せず、高優先度キューと低優先度キューが空でなく、新規のIOネットワークイベントが発生していない場合、当該スレッドグループはステール状態にあると判断されます。タイマースレッドは、当該スレッドグループの負荷を軽減するため、新しいワーカースレッドを起動または作成します。
thread_pool_max_threads
Yes
uint
100000
[1,100000]
スレッドプール内の全ワーカースレッドの総数
thread_pool_high_prio_mode
Yes, session
enum
transactions
transactions\\statement\\none
高優先度キューの動作モードは、以下の3種類を含む:
transactions:トランザクションが開始されたSQLが1つだけ存在し、かつthread_pool_high_prio_ticketsが0でない場合に限り、高優先度キューに入ります。各接続は、thread_pool_high_prio_ticketsのチケットが優先キューに割り当てられた後、通常キューに移動します。
statement:すべての接続が高優先度キューに配置されます。
none:statementとは反対に、すべての接続が低優先度キューに配置されます。
thread_pool_high_prio_tickets
Yes, session
uint
UINT_MAX
[0, UINT_MAX]
トランザクション動作モードにおいて、各接続に付与されるチケットのサイズ
threadpool_workaround_epoll_bug
Yes
bool
false
true/false
linux2.xにおけるepollのバグを回避するかどうか。このバグはlinux3で修正されています。
show threadpool statusコマンドで表示される関連ステータスの説明:
ステータス名
説明
groupid
スレッドグループID
connection_count
スレッドグループのユーザー接続数
thread_count
スレッドグループ内のワーカースレッド数
havelistener
スレッドグループに現在リスナーが存在するかどうか
active_thread_count
スレッドグループ内のアクティブなワーカー数
waiting_thread_count
スレッドグループ内の待機中ワーカー数(wait_begin を呼び出したワーカー)
waiting_threads_size
スレッドグループ内で処理すべきネットワークイベントがなく、休止状態に入り喚起を待機しているワーカー数(thread_pool_idle_timeout秒後に自動的に破棄されます)
queue_size
スレッドグループの通常優先度キュー長
high_prio_queue_size
スレッドグループの高優先度キューの長さ
get_high_prio_queue_num
スレッドグループ内の高優先度キューからイベントが取り出された総回数
get_normal_queue_num
スレッドグループ内の通常優先度キューからイベントが取り出された総回数
create_thread_num
スレッドグループ内に作成されたworkerスレッドの総数
wake_thread_num
スレッドグループ内のwaiting_threadsキューから喚起されたワーカーの総数
oversubscribed_num
スレッドグループ内のワーカーが現在のスレッドグループがオーバーサブスクライブド状態であることを検出し、休止状態に入る準備をした回数
mysql_cond_timedwait_num
スレッドグループ内のワーカーがwaiting_threadsキューに入隊した総回数
check_stall_nolistener
スレッドグループがタイマースレッドのcheck_stallチェックでリスナー不在を検出した総回数
check_stall_stall
スレッドグループがタイマースレッドのcheck_stallチェックでストール状態と判定された総回数
max_req_latency_us
スレッドグループ内のユーザー接続がキューで待機する最長時間(単位:マイクロ秒)
conns_timeout_killed
スレッドグループ内のユーザー接続がクライアントからの新規メッセージなし時間の閾値(net_wait_timeout)超過によりキルされた総回数
connections_moved_in
他のスレッドグループから当該スレッドグループに移行した接続の総数
connections_moved_out
当該スレッドグループから他のスレッドグループに移行した接続の総数
connections_moved_from_per_thread
スレッドグループにone-thread-per-connectionモードから移行した接続の総数
connections_moved_to_per_thread
当該スレッドグループからone-thread-per-connectionモードに移行した接続の総数
events_consumed
スレッドグループが処理したイベントの総数
average_wait_usecs_in_queue
スレッドグループ内の全イベントがキューで待機する平均待機時間

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック