matrixorigin / matrixorigin/matrixone
[Bug] TPCC warehouse=1000 Go GC 长暂停(500-900ms)导致 Lock wait timeout(4.2-dev / main 均偶现)
- Dominant language
- Go
- Stars
- 1.9k
- Forks
- 311
- Avg merge
- 1d 3h
- Merged PRs (30d)
- 768
Description
## Bug Report
### Summary
TPCC warehouse=1000 高负载测试中,CN 节点 Go heap 逼近 GOMEMLIMIT(25GiB),触发持续激进 GC(STW 500~900ms,CPU idle 0%),导致锁持有事务被冻结、等待方超时。4.2-dev 和 main 均偶现。
### CI 证据
**4.2-dev(07-24 失败):**
- Run: https://github.com/matrixorigin/mo-nightly-regression/actions/runs/30111505702/job/89651620249
- Namespace: `mo-branch-commit-66dad1483-20260725`
- Commit: `66dad1483`
- 4 个 FATAL 错误(07:01:07~07:01:10,3 秒内集中爆发):
- 3× TT_PAYMENT: `Lock wait timeout exceeded` (ErrorCode 1205, wait 60s)
- 1× TT_NEW_ORDER: `Lock wait timeout exceeded` (ErrorCode 1205, wait 60s)
- warehouse=1000 error rate: 0.79%
**同一 commit 07-23 通过(0 错误),说明不是代码 bug 而是资源压力偶现。**
**Main(07-25 也有类似问题):**
- Run: https://github.com/matrixorigin/mo-nightly-regression/actions/runs/30143464491
- warehouse=1000: 1 次 `context canceled`(DELIVERY_BG 事务被取消)
- 同时还有 nil map panic(单独 issue #26175)
### GC 暂停详情(4.2-dev, 07:01 UTC)
```
cn-2shgr: gc 1157: 1.5 + 898 + 0.12 ms clock, heap 14829→15451→5965 MB, 15573 MB goal
cn-24xp6: gc 1164: 0.37 + 503 + 0.080 ms clock, heap 15260→15483→4482 MB, 16114 MB goal
cn-tl7zm: gc 1184: 0.48 + 717 + 0.072 ms clock, heap 14151→14552→5540 MB, 14730 MB goal
```
- **GC pause**: 503ms ~ 898ms(stop-the-world)
- **Heap**: 14~15 GB,GOMEMLIMIT = 25 GiB(heap 占 GOMEMLIMIT 的 94%)
- **CPU idle**: 0%(GC 与业务争抢 CPU)
### 锁超时详情
所有超时发生在 **cn-tl7zm**,锁类型为 `Exclusive(row)`,目标表为 `bmsql_stock` / `bmsql_warehouse`:
| 时间 | 事务 | 等待时长 |
|---|---|---|
| 07:01:07 | TT_PAYMENT | 60.000s |
| 07:01:09 | TT_PAYMENT | 60.000s |
| 07:01:09 | TT_PAYMENT | 60.000s |
| 07:01:10 | TT_NEW_ORDER | 60.000s |
### 级联效应
锁超时后,集群出现全面资源耗尽:
- 所有 3 个 CN 之间 TCP i/o timeout
- Task runner: `sql: database is closed`, `context deadline exceeded`
- Proxy 连接清理持续失败
- DN 丢失 HAKeeper 连接
### 与 sysbench 1000w 的关系
此问题和 #26172(sysbench 1000w INSERT DUPLICATE 内存飙升)属于**同类问题**:
| | Sysbench 1000w (#26172) | TPCC warehouse=1000 |
|---|---|---|
| 负载类型 | 1000 并发 INSERT DUPLICATE | 1000 终端 TPCC 混合事务 |
| 内存特征 | 3 分钟 heap +16G 突增 | 缓慢爬升至 23.5G(逼近 GOMEMLIMIT) |
| 失败表现 | Communications link failure | Lock wait timeout |
| 根因 | 特定路径内存分配过多 | 整体内存压力 + GC 暂停 |
| 偶现频率 | 4.2-dev 50%,main 12% | 偶发(同 commit 上次通过) |
### 资源环境
| 配置 | 值 |
|---|---|
| CN 数量 | 3 |
| CN memory limit | 55 GiB |
| CN GOMEMLIMIT | **25 GiB** |
| CN memory cache size | 12 GiB |
| CN CPU limit | 14 cores |
### 优化建议
1. **降低 GOMEMLIMIT**(如 22~23 GiB)—— 让 GC 更早触发、每次暂停更短,避免 heap 顶到天花板时的拼命模式
2. **优化 TPCC 高负载路径内存** —— warehouse=1000 下 heap 到 14~15G 偏高,profile 一下分配热点
3. **提高 CN memory limit**(55G → 64G)—— 给 GOMEMLIMIT 和 cache 留更多空间
4. **缩短 lock wait timeout**(60s → 30s)—— 快速失败,减少级联风险
5. **结合 #26172 的优化** —— INSERT DUPLICATE 路径内存减少后整体内存压力也会降低
### 近期 TPCC 历史(4.2-dev)
| 日期 | 结果 | warehouse=1000 error |
|---|---|---|
| 07-24 | ❌ | 4 (lock wait timeout) |
| 07-23 | ✅ | 0 |
| 07-22 | ✅ | 0 |
| 07-21 | ✅ | 0 |
| 07-20 | ✅ | 0 |
| 07-18 | ✅ | 0 |
Contributor guide
Assessment
This issue has not been assessed yet.