本文列举了 OceanBase 数据库的一部分后台线程,并简单解释了这些后台线程的基本功能。在大部分场景下,用户完全不需要去关注后台线程的实现细节。
后台线程
在 OceanBase 数据库的版本迭代中,有可能会对后台线程进行持续优化和效率提高,因此有些后台线程会在版本升级的过程出现消失、合并的情况;也有可能随着版本的更新,出现新的后台线程。
| 线程名 | 归属模块 | 线程数量 | 功能 |
|---|---|---|---|
| TsMgr | Trx | 1 | 用于本地 GTS Cache 的刷新。 |
| WeakReadSvr | Trx | 1 | 用于计算本地 Server 级别备机读时间戳。 |
| HAGtsSource | Trx | 1 | 用于 ha_gts 的刷新,刷新频率由配置项 gts_refresh_interval 控制。 |
| GCPartAdpt | Trx | 1 | 定期检查 all_tenant_gc_partition_info 表,获取分区的 GC 情况,用于 GC 和事务 2PC 的推进。 |
| PartWorker | Trx | 1 | 遍历本机所有的 Partition,执行以下操作:
|
| LockWaitMgr | Trx | 1 | 用于热点行场景下,等锁队列在特殊情况下的唤醒保障。例如,语句超时、Session 被Kill 等。 |
| ClogAdapter | Trx | 8 | 用于事务层异步提交 Clog。 |
| ObTransService | Trx | 6 | 主要负责以下功能:
|
| GCCollector | storage | 1 | 用于定期检查本机所有 Partition 是否能够 GC,如果可以则触发 GC 动作。 |
| RebuildSche | storage | 1 | 定期驱动需要 Rebuild 的 Partition 任务。 |
| PurgeWorker | storage | 1 | 后台 MemTable 的标记删除操作。 |
| DAG | storage | 16 | Dag 的工作线程,用于 Partition 的转储、合并、迁移等任务的执行。 |
| 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 | 执行构建索引的任务。 |
| LocalityReload | RS | 1 | 定期刷新 Locality 信息。 |
| RSqlPool | RS | 1 | 备库用来定期维护主库的 RootServer 列表。 |
| ServerTracerTimer | RS | 1 | 用来维护和其他 Server 状态的定时任务。 |
| LogEngine | CLOG | 1 | 统计监控 Clog 盘空间使用情况,执行 Clog 文件的回收操作。 |
| CLGWR | CLOG | 1 | 负责 Clog item 写盘。 |
| ClogHisRep | CLOG | 3 | 分区上下线时,更新 Clog History 内部表。 |
| BatchSubmitCtx | CLOG | 1 | 负责拆分一阶段优化的事务。 |
| LogScanRunnable | CLOG | 4 | OBServer 启动时,负责扫描所有 Clog 文件。 |
| LogStateDri | CLOG | 1 | 负责 Clog 模块主备角色切换、检查副本级联状态。 |
| ObElectionGCThread | election | 1 | 负责 Election 对象内存的回收。 |
| Blacklist | CLOG | 1 | 负责探测与通信目的端 Server 之间的网络是否联通。 |
| 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 | 用于日志副本的 C heckpoint操作。 |
| 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 与各个 Server 直接的 Llease 监控。 |
| 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 | 用于选举模块异步日志的日志落盘。 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




