📣

TiDB Cloud Serverless 现已更名为
Starter
!此页面由 AI 自动翻译,英文原文请见
此处。

SHARD_ROW_ID_BITS

本文介绍了 SHARD_ROW_ID_BITS 表属性,该属性用于设置隐式 _tidb_rowid 分片后的分片位数。

概念

对于没有聚簇主键或没有主键的表,TiDB 会使用隐式自增行 ID。当执行大量 INSERT 操作时,数据会写入到单个 Region,导致写入热点问题。

为缓解热点问题,你可以配置 SHARD_ROW_ID_BITS。这样行 ID 会被打散,数据会写入到多个不同的 Region。

  • SHARD_ROW_ID_BITS = 4 表示 16 个分片
  • SHARD_ROW_ID_BITS = 6 表示 64 个分片
  • SHARD_ROW_ID_BITS = 0 表示默认的 1 个分片

当你设置 SHARD_ROW_ID_BITS = S 时,_tidb_rowid 的结构如下:

符号位分片位自增位
1 位S63-S
  • 自增位的值存储在 TiKV 中,并按顺序分配。每次分配一个值,下一个值递增 1。自增位保证了 _tidb_rowid 列的值在全局范围内唯一。当自增位的值被耗尽(即达到最大值时),后续的自动分配会失败,并报错 Failed to read auto-increment value from storage engine
  • _tidb_rowid 的取值范围:最终生成值的最大位数 = 分片位数 + 自增位数,因此最大值为 (2^63)-1

关于用法的详细信息,请参见 热点问题排查指南

示例

CREATE TABLE t ( id INT PRIMARY KEY NONCLUSTERED ) SHARD_ROW_ID_BITS = 4;
ALTER TABLE t SHARD_ROW_ID_BITS = 4;

文档内容是否有帮助?