本記事では、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 | パーティションLeaderの就任・退任タスク処理に使用されます(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 | クラスタ内のレプリカLeader分布を管理します。 |
| 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と各サーバー間のlease監視を担当します。 |
| 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 | 選挙モジュール非同期ログのディスク書き込みに使用されます。 |