![]()
在 TiDB Dashboard 中,**事务的监控既需要关注 `start_ts`,也需要关注 `commit_ts`**,两者在不同场景下提供关键信息:
---
### **1. `start_ts` 的作用**
- **定义**:事务开始的逻辑时间戳,由 PD(Placement Driver)分配,唯一标识事务的起始点。
- **监控意义**:
- **事务启动时间**:通过 `start_ts` 可追踪事务何时开始执行。
- **事务持续时间**:结合 `commit_ts`,计算 `commit_ts - start_ts` 可得到事务执行耗时,用于识别长事务。
- **锁冲突诊断**:若事务长时间未提交(`commit_ts` 未生成),需检查 `start_ts` 对应的锁状态(是否被阻塞或超时)。
---
### **2. `commit_ts` 的作用**
- **定义**:事务提交的逻辑时间戳,表示事务的完成时间。
- **监控意义**:
- **事务提交时间**:确认事务何时被成功提交。
- **数据可见性**:读操作基于 `commit_ts` 判断数据版本是否可见。
- **延迟分析**:通过 `commit_ts` 可计算事务提交延迟,优化系统性能。
---
### **3. 实际监控场景示例**
#### **场景 1:长事务检测**
- **现象**:事务 A 的 `start_ts=100`,但长时间未生成 `commit_ts`。
- **分析**:
- 查看 TiDB Dashboard 的 **Slow Queries** 或 **Transaction Details**,确认事务是否卡在 Prewrite 或 Commit 阶段。
- 检查 Lock 列中是否存在未释放的锁(可能因次级键冲突或节点故障导致)。
- **工具使用**:
```sql
-- 通过 SQL 查询未提交的事务
SELECT * FROM information_schema.cluster_tidb_trx WHERE start_ts = 100;
```
#### **场景 2:提交延迟优化**
- **现象**:事务的 `start_ts` 和 `commit_ts` 差值较大(例如 `commit_ts - start_ts = 500ms`)。
- **分析**:
- 检查网络延迟或 TiKV 节点的负载(通过 **TiDB Dashboard → Metrics → KV Duration**)。
- 确认是否有热点 Region 或锁竞争(通过 **Key Visualizer** 或 **Locks** 面板)。
---
### **4. TiDB Dashboard 中的查看方法**
1. **事务详情页**:
- 路径:**TiDB Dashboard → SQL Statements → Transaction Details**。
- 显示字段:`start_ts`、`commit_ts`、事务状态(提交中/已提交)、涉及 Region 和耗时。
2. **慢查询分析**:
- 路径:**TiDB Dashboard → Slow Queries**。
- 筛选条件:按 `start_ts` 或 `commit_ts` 过滤长事务。
3. **锁冲突监控**:
- 路径:**TiDB Dashboard → Key Visualizer** 或 **Locks**。
- 观察锁持有时间,结合 `start_ts` 判断事务是否因锁冲突未提交。
---
### **5. 总结**
- **`start_ts`**:用于追踪事务的启动时间、执行时长和锁状态,是诊断未提交事务的核心依据。
- **`commit_ts`**:用于确认事务完成时间、计算提交延迟,并保障数据可见性。
- **二者结合**:在 TiDB Dashboard 中,需同时关注这两个时间戳:
- 若 `start_ts` 存在但无 `commit_ts` → 事务未提交,需检查锁或节点状态。
- 若 `commit_ts - start_ts` 过大 → 需优化事务逻辑或排查系统瓶颈。
在 TiDB 的监控体系中,**TiKV-Details** 页面确实包含事务相关的监控指标,但这些指标分散在多个子模块中,而非集中在一个名为“事务监控”的独立面板。以下是详细说明和操作指南:
---
### **1. TiKV-Details 中与事务相关的监控模块**
#### **1.1 Grpc 模块**
- **路径**:`TiKV-Details` → `Grpc`
- **关键指标**:
- **Prewrite/Commit 请求的延迟和 QPS**
- `grpc_msg_duration_seconds{type="kv_prewrite"}`
- `grpc_msg_duration_seconds{type="kv_commit"}`
- **请求失败率**:
- `grpc_msg_fail{type="kv_prewrite"}`
- `grpc_msg_fail{type="kv_commit"}`
- **作用**:
监控 Prewrite 和 Commit 阶段的性能,定位事务延迟或失败问题。
---
#### **1.2 Scheduler 模块**
- **路径**:`TiKV-Details` → `Scheduler`
- **关键指标**:
- **锁冲突和重试**:
- `scheduler_too_busy`(调度器过载)
- `scheduler_leader_read_lease_expired`(锁冲突导致调度失败)
- **事务提交的排队时间**:
- `scheduler_command_duration_seconds{type="commit"}`
- **作用**:
分析事务调度中的锁竞争和资源瓶颈。
---
#### **1.3 Lock Manager 模块**
- **路径**:`TiKV-Details` → `Lock Manager`
- **关键指标**:
- **锁等待时间**:`lock_wait_time_seconds`
- **锁清理操作**:`lock_manager_handle_resolve`
- **死锁检测**:`deadlock_detect_duration`
- **作用**:
诊断锁冲突、死锁及锁清理效率。
---
#### **1.4 Storage 模块**
- **路径**:`TiKV-Details` → `Storage`
- **关键指标**:
- **异步写入延迟**:`storage_async_write_duration_seconds`
- **事务快照读取延迟**:`storage_snapshot_duration_seconds`
- **作用**:
监控存储层的事务处理性能,如写入和读取延迟。
---
### **2. 如何通过监控定位事务问题**
#### **场景 1:事务提交延迟高**
- **操作步骤**:
1. 检查 `Grpc` → `kv_commit` 的延迟指标。
2. 若延迟高,进一步查看 `Scheduler` → `scheduler_command_duration_seconds{type="commit"}`,确认是否因调度排队导致延迟。
3. 结合 `Lock Manager` 的锁等待时间,判断是否因锁冲突导致提交阻塞。
---
#### **场景 2:锁冲突频繁**
- **操作步骤**:
1. 查看 `Lock Manager` → `lock_wait_time_seconds`,确认锁等待时间是否异常。
2. 检查 `Scheduler` → `scheduler_too_busy`,判断调度器是否因锁冲突过载。
3. 通过 SQL 查询具体锁信息:
```sql
SELECT * FROM information_schema.data_lock_waits;
```
---
#### **场景 3:事务预写失败**
- **操作步骤**:
1. 查看 `Grpc` → `kv_prewrite` 的失败率。
2. 检查 `Storage` → `storage_async_write_duration_seconds`,确认是否因存储层写入超时导致失败。
3. 排查热点 Region:通过 `TiKV-Details` → `Hotspot` 模块分析写入负载。
---
### **3. 常见误解与配置问题**
#### **3.1 误解:TiKV-Details 没有事务监控**
- **原因**:事务监控指标分散在多个模块(Grpc、Scheduler、Lock Manager 等),而非独立面板。
- **解决方法**:按上述路径定位具体指标。
#### **3.2 监控数据缺失**
- **可能原因**:
- Prometheus 未正确采集 TiKV 指标(检查 `targets` 页面)。
- TiKV 版本过旧,不支持某些监控项(建议升级到最新版本)。
---
### **4. 补充工具:TiDB Dashboard**
若需更高层级的事务分析(如查看具体事务的 `start_ts` 和 `commit_ts`),需使用 **TiDB Dashboard**:
- **路径**:`TiDB Dashboard` → `SQL Statements` → `Transaction Details`
- **功能**:
- 列出所有活跃事务的 `start_ts` 和状态。
- 显示事务的 SQL 语句、涉及 Region 和耗时。
---
### **5. 总结**
- **TiKV-Details 的事务监控指标**:分布在 Grpc、Scheduler、Lock Manager、Storage 等模块,需按场景组合使用。
- **关键指标**:
- Prewrite/Commit 延迟(Grpc 模块)
- 锁冲突和等待时间(Lock Manager 模块)
- 事务调度效率(Scheduler 模块)
- **高级分析**:结合 TiDB Dashboard 查看事务详情,定位具体 SQL 或锁问题。