SHARD_ROW_ID_BITS
本文介绍 SHARD_ROW_ID_BITS 表属性,用于设置隐式 _tidb_rowid 分片后分片的位数。
概念
对于没有聚簇主键或没有主键的表,TiDB 会使用自动生成的 _tidb_rowid 作为隐式自增行 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 的结构如下:
- 自增位的值存储在 TiKV 中,并按顺序分配。每次分配一个值,下一个值递增 1。当自增位的值被耗尽(即达到最大值时),后续的自动分配会失败,并报错
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;