搜索

pdf文档 TiDB 2.1.7

141.29 KB 9 页 0 下载 67 浏览 0 评论 0 收藏
所属分类: 数据库 / TiDB
语言 格式 评分
英语
.pdf
3
摘要
文档分析了TiDB 2.1.7及其后续版本在分布式事务一致性、自动重试机制、表创建问题以及复制区域管理方面的缺陷。测试发现,TiDB在默认配置下无法提供快照隔离,存在读偏移、丢失更新等问题。通过禁用自动重试机制,TiDB在3.0.0-rc.2版本中实现了快照隔离。文档还建议用户在初始化集群时确保区域完全复制,并使用适当的配置以避免数据丢失和事务异常。
AI总结
### 总结 #### 1. **TiDB 的架构与特性** TiDB 是一个分布式、自动分片的 SQL 数据库,基于 Google 的 Percolator 模型设计。其架构包含三个主要组件: - **Placement Driver (PD)**:负责时间戳分配和分区协调。 - **TiKV**:分布式键值存储,支持自动分区和副本管理。 - **TiDB**:提供 MySQL 兼容的 SQL 层,支持分布式事务。 TiDB 的时间戳分配依赖于 `CLOCK_MONOTONIC_RAW`,通过 Raft 协议保证单调性。尽管 PD 会预留时间戳批次以提高吞吐量,但时钟偏移可能导致非单调时间戳。 #### 2. **一致性问题** - **事务隔离**:TiDB 宣称支持可重复读(Repeatable Read),但实际上其一致性模型更接近快照隔离(Snapshot Isolation)。然而,TiDB 的实现存在以下问题: - 可重复读(Repeatable Read)弱于快照隔离,允许幻读(Phantoms)和其他异常(如读偏斜、写偏斜)。 - 默认情况下,TiDB 的自动重试机制会导致读偏斜(G-single)和写偏斜(G2)。 - **测试结果**:在 Jepsen 测试中,TiDB 2.1.7 至 3.0.0-beta.1 版本默认配置下无法满足快照隔离的定义,允许幻读和写偏斜,且存在数据丢失(Lost Updates)。 #### 3. **主要问题与修复** - **启动问题**:TiKV 和 TiDB 在启动时对 Placement Driver(PD)的依赖较脆弱,可能导致进程崩溃。部分问题在 3.0.0-rc.2 中修复。 - **表创建延迟**:新表可能在创建后未立即生效,导致插入操作失败。此问题在后续版本中修复。 - **副本不足**:新集群默认初始副本数为 1,可能导致数据未完全复制,单点故障时数据丢失。可通过等待副本完全同步或设置初始化标志解决。 - **读偏斜与写偏斜**:自动重试机制导致事务异常,例如读偏斜(G-single)和写偏斜(G2)。默认情况下,`tidb_retry_limit` 和 `tidb_disable_txn_auto_retry` 会启用重试机制。 #### 4. **测试与验证** - **测试工具**:使用 Jepsen 测试套件,涵盖银行测试、长分支测试、单调性测试、线性化测试和顺序性测试。 - **测试结果**:TiDB 在默认配置下无法通过快照隔离测试,但在禁用自动重试机制后(如 `tidb_retry_limit = 0` 或 `tidb_disable_txn_auto_retry = ON`),部分版本可通过测试。 - **时钟问题**:尽管 TiDB 理论上依赖单调时钟,但测试未观察到时钟偏移导致的异常。 #### 5. **推荐与改进建议** - **升级版本**:建议升级到 3.0.0 或更高版本,因为后续版本已禁用默认重试机制,并修复部分启动和副本问题。 - **禁用自动重试**:通过配置 `tidb_disable_txn_auto_retry` 和 `tidb_retry_limit` 禁用自动重试,避免事务异常。 - **使用 `SELECT ... FOR UPDATE`**:虽然不能完全防止写偏斜,但可减少重试机制下的事务冲突。 - **初始化检查**:在新集群中启动 TiDB 前,确保副本已完全同步。 - **监控时钟偏移**:尽管未观察到时钟偏移导致的异常,仍建议监控节点时钟状态。 #### 6. **未来工作** - **改进重试机制**:探索更安全的自动重试方法。 - **深入测试**:进一步验证时钟偏移和动态成员变化对一致性的影响。 - **完善文档**:明确事务隔离级别和重试机制的实现细节,避免用户误解。 ### 关键问题总结 - **默认配置不一致**:TiDB 2.1.7 至 3.0.0-beta.1 默认配置下无法保证快照隔离。 - **自动重试导致异常**:重试机制导致读偏斜、写偏斜和数据丢失。 - **启动与副本问题**:新集群和进程启动时存在脆弱性,可能导致数据丢失或服务不可用。 通过禁用自动重试机制、升级版本和配置优化,TiDB 可以在生产环境中实现更高的数据一致性和可靠性。
P1
P2
P3
P4
P5
P6
P7
P8
P9
下载文档到本地,方便使用
文档评分
请文明评论,理性发言.