【 TiDB 版本】
- v7.1.3
【遇到的问题】
1、有一个业务表逻辑比较简单,并发读的概率不高,就是先 redis上锁 然后查询是否有数据,有数据就update 没数据就 insert。但是日志经常报错锁冲突 Key is locked (will clean up) primary_lock
2、这个表的结构如下,主键由三个字段组成:
CREATE TABLE `test` (
`type` tinyint(3) unsigned NOT NULL,
`post_id` int(10) unsigned NOT NULL,
`device_type` tinyint(3) unsigned NOT NULL,
`pv` int(10) unsigned NOT NULL,
PRIMARY KEY (`type`,`post_id`,`device_type`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin'
3、查看 TIKV_REGION_STATUS 表看到 region 总共有 55 个,但是 PRIMARY 类型的 region 只有1个,怀疑是不是因为这里面的 region 统计信息不准确导致经常出现 primary_lock 的情况