本記事では、OceanBaseデータベースの一部のバックグラウンドスレッドを挙げ、それぞれの基本的な機能について簡潔に説明します。ほとんどの場合、ユーザーはバックグラウンドスレッドの実装詳細について気にする必要はありません。
バックグラウンドスレッド
OceanBaseデータベースのバージョンアップデートに伴い、バックグラウンドスレッドは継続的に最適化および効率向上が図られる可能性があります。そのため、バージョンアップグレードの過程で一部のバックグラウンドスレッドが消失または統合されることがあります。また、バージョンの更新に伴い、新しいバックグラウンドスレッドが追加される場合もあります。
スレッド名 |
所属モジュール |
スレッド数 |
機能 |
|---|---|---|---|
| TsMgr | Trx | 1 | ローカルGTSキャッシュのリフレッシュに使用されます。 |
| WeakReadSvr | Trx | 1 | ローカルサーバーレベルスタンバイ機の読み取りタイムスタンプを計算するために使用されます。 |
| HAGtsSource | Trx | 1 | ha_gtsのリフレッシュに使用されます。リフレッシュ頻度はパラメータgts_refresh_intervalで制御されます。 |
| GCPartAdpt | Trx | 1 | all_tenant_gc_partition_infoテーブルを定期的にチェックし、パーティションのGC状況を取得します。これはGCおよびトランザクション2PCの進行に使用されます。 |
| PartWorker | Trx | 1 | ローカルのすべてのパーティションを走査し、以下の操作を実行します:
|
| LockWaitMgr | Trx | 1 | ホットスポット行シナリオにおいて、ロック待ちキューが特別な状況下でウェイクされることを保証するために使用されます。例えば、ステートメントのタイムアウトやセッションがKillされた場合などです。 |
| ClogAdapter | Trx | 8 | トランザクション層での非同期clogコミットに使用されます。 |
| ObTransService | Trx | 6 | 主に以下の機能を担当します:
|
| GCCollector | storage | 1 | ローカルのすべてのパーティションがGC可能かどうかを定期的にチェックし、可能であればGCアクションをトリガーします。 |
| RebuildSche | storage | 1 | Rebuildが必要なパーティションタスクを定期的に駆動します。 |
| PurgeWorker | storage | 1 | バックグラウンドMemTableのマーク削除操作に使用されます。 |
| DAG | storage | 16 | Dagのワーカースレッドであり、パーティションのダンプ、マージ、移行などのタスク実行に使用されます。 |
| DagScheduler | storage | 1 | Dagのスケジューリングスレッドです。 |
| STableChecksumUp | storage | 1 | SSTable Checksumを一括コミットするタスクです。 |
| PartitionScheduler | storage | 2 | ダンプとメジャーコンパクションタスクのスケジューリングを行います。 |
| MemstoreGC | storage | 1 | ダンプのウォームアップ完了後のFrozen MemStoreを回収します。 |
| ObStoreFile | storage | 1 | 不良ブロックとマクロブロックの回収をチェックします。 |
| PartSerCb | storage | 40 | パーティションリーダーの就任・解任タスク処理用(20スレッド)。 |
| ObPartitionSplit Worker | storage | 1 | パーティション分割のバックグラウンドタスクを処理します。 |
| FreezeTimer | storage | 1 | MemStoreメモリをチェックし、フリーズをトリガーします。 |
| RebuildTask | storage | 1 | Dレプリカからデータを取得するためのスケジューリングを行います。 |
| IndexSche | storage | 1 | インデックス作成タスクのスケジューリングを行います。 |
| FreInfoReload | storage | 1 | 内部テーブル内のMajor Freeze関連情報を同期します。 |
| TableMgrGC | storage | 1 | MemTableを回収し、メモリを解放します。 |
| BackupInfoUpdate | storage | 1 | Backup関連データを定期的にフラッシュするために使用されます。 |
| LogDiskMon | storage | 1 | システムのマルチディスク状態を検出するために使用されます。 |
| KVCacheWash | storage | 1 | KV Cacheのメモリクリーニングに使用されます。検出周期はパラメータ _cache_wash_interval で制御され、デフォルトは 200ms、値の範囲は [1ms,1m] です。 |
| KVCacheRep | storage | 1 | Cacheのメモリ断片化を整理し、メモリを回収します。検出周期はパラメータ _cache_wash_interval で制御され、デフォルトは 200ms、値の範囲は [1ms,1m] です。 |
| RSMonitor | RS | 1 | 現在のRSの状態を監視するために使用されます。 |
| CacheCalculator | RS | 1 | location_cacheとschema_cacheのためのメモリを予約するために使用されます。 |
| ObDailyMergeScheduler | RS | 1 | 日次マージをスケジュールするために使用されます。 |
| ObEmptyServerChecker | RS | 1 | OBServerノード上にレプリカが存在しないかどうかを検出するために使用されます。 |
| ObFetchPrimaryDDLOperator | RS | 1 | スタンバイデータベースがプライマリデータベースのシステムテナントSchemaを論理的に同期するために使用されます。 |
| ObFreezeInfoUpdater | RS | 1 | 凍結進捗を推進し、スナップショットポイントおよび回収ポイントを管理します。 |
| ObGlobalIndexBuilder | RS | 1 | グローバルインデックスの構築をスケジュールします。 |
| ObGlobalMaxDecidedTransVersionMgr | RS | 1 | グローバル最大トランザクションバージョン番号を統計します。 |
| ObLeaderCoordinator | RS | 1 | クラスタ内のレプリカリーダーの分布を管理します。 |
| ObLogArchiveScheduler | RS | 1 | ログアーカイブを担当します。 |
| ObMajorFreezeLauncher | RS | 1 | 日次定時マージを開始するために使用されます。 |
| ObPartitionSpliter | RS | 1 | パーティションマージをスケジュールするために使用されます。 |
| ObRebalanceTaskMgr | RS | 1 | ロードバランシングタスクの実行をスケジュールするために使用されます。 |
| ObRootBackup | RS | 1 | バックアップタスクをスケジュールするために使用されます。 |
| ObRootBalancer | RS | 1 | ロードバランシングタスクを生成するために使用されます。 |
| ObRsGtsMonitor | RS | 1 | GTSインスタンスの分布状況を監視し、GTSレプリカの分布に基づいて、移行またはGTSレプリカの補完タスクを生成します。 |
| ObRsGtsTaskMgr | RS | 1 | GTSレプリカタスクを実行するスレッドです。 |
| ObHeartbeatChecker | RS | 1 | OBServerノード間のハートビート状態をチェックします。 |
| ObStandbyClusterSchemaProcessor | RS | 1 | スタンバイデータベースのレプリカからプライマリデータベースのユーザーテナントSchemaを同期します。 |
| ObRestoreScheduler | RS | 1 | 復元プロセスのスケジューリングを担当します。 |
| ObWorkQueue | RS | 4 | RSの非同期タスクを実行します。スレッド数は構成パラメータrootservice_async_task_thread_countで制御され、値の範囲は[1,10]です。 |
| ObAsyncTaskQueue | RS | 16 | インデックス構築タスクを実行します。 |
| ObSwitchTaskQueue | RS | 6 | 物理スタンバイデータベースでのプライマリ/スタンバイ切り替えタスクキューです。スレッド数は構成パラメータswitchover_process_thread_countで制御され、値の範囲は[1, 1000]です。 |
| LocalityReload | RS | 1 | Locality情報を定期的にリフレッシュします。 |
| RSqlPool | RS | 1 | スタンバイデータベースがプライマリデータベースのRoot Serverリストを定期的にメンテナンスするために使用されます。 |
| ServerTracerTimer | RS | 1 | 他のサーバー状態とのメンテナンスを行うためのタイマータスクです。 |
| LogEngine | CLOG | 1 | clogディスク容量使用状況を統計監視し、clogファイルの回収操作を実行します。 |
| CLGWR | CLOG | 1 | clogアイテムのディスク書き込みを担当します。 |
| ClogHisRep | CLOG | 3 | パーティションのオンライン/オフライン時に、clog History内部テーブルを更新します。 |
| BatchSubmitCtx | CLOG | 1 | 第一段階最適化のトランザクションを分割するために使用されます。 |
| LogScanRunnable | CLOG | 4 | OBServerノード起動時に、すべてのclogファイルをスキャンします。 |
| LogStateDri | CLOG | 1 | clogモジュールのプライマリ/スタンバイロール切り替え、レプリカ連鎖状態のチェックを担当します。 |
| ObElectionGCThread | election | 1 | Electionオブジェクトメモリの回収を担当します。 |
| Blacklist | CLOG | 1 | ネットワークが通信先サーバーと接続されているかどうかを検出します。 |
| BRPC | CLOG | 5 | バックグラウンドでbatch_rpc集約パケットの送信を実行します。 |
| CLOGReqMinor | CLOG | 1 | clogディスク容量に応じてMinor Freezeをトリガーし、clogの回収を加速します。 |
| LineCache | CLOG | 1 | 歴史データの同期を最適化するために使用されます。Liboblogシナリオで使用されます。 |
| EXTLogWash | CLOG | 1 | 周波数:100ms。 |
| CLogFileGC | CLOG | 1 | clogファイルを定期的に回収するために使用されます。 |
| CKPTLogRep | CLOG | 1 | ログレプリカのチェックポイント操作に使用されます。 |
| RebuildRetry | CLOG | 1 | パーティションの再構築タスクの再試行に使用されます。 |
| ReplayEngine | CLOG | 物理コア | スタンバイマシンのclog再生に使用されます。 |
| PxPoolTh | SQL | 0 | 並列実行のスレッドプールです。 |
| sql_mem_timer | SQL | 1 | 自動メモリ管理に使用されます。 |
| OmtNodeBalancer | common | 1 | マルチテナント情報のバックグラウンド更新を担当します。 |
| MultiTenant | common | 1 | リソーススケジューリングに使用されるマルチテナントCPU比率の更新を担当します。 |
| SignalHandle | common | 1 | シグナル処理スレッドです。 |
| LeaseUpdate | common | 3 | RSと各サーバー間のリース監視を担当します。 |
| RsDDL | common | 1 | RSのDDLを担当します。 |
| MysqlIO | common | 12 | MySQLの接続処理スレッドです。 |
| all_meta_table | common | 8 | PGまたはパーティション状態のレポートに使用されます。 |
| all_pg_partition_ meta_table | common | 8 | PG内部パーティションの状態レポートに使用されます。 |
| TimerMonitor | common | 1 | 内部タイマースレッドの動作を監視し、実行時間が異常なタスクに対してアラートを発報します。 |
| ConfigMgr | common | 1 | パラメータのリフレッシュに使用されます。 |
| OB_ALOG | common | 1 | システム非同期ログのディスク書き込みに使用されます。 |
| ELE_ALOG | election | 1 | 選挙モジュールの非同期ログのディスク書き込みに使用されます。 |