本記事では、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 | スタンバイリポジトリのレプリカがプライマリリポジトリの一般テナントのスキーマを同期します。 |
| 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 | 他のServerの状態を維持するための定時タスクです。 |
| LogEngine | CLOG | 1 | clogディスク容量使用状況を統計監視し、clogファイルの回収操作を実行します。 |
| CLGWR | CLOG | 1 | clogアイテムの書き込みを担当します。 |
| ClogHisRep | CLOG | 3 | パーティションのオン/オフ時に、clog History内部テーブルを更新します。 |
| BatchSubmitCtx | CLOG | 1 | ステージ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 | 選挙モジュールの非同期ログのログファイルへの書き込みに使用されます。 |