一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题
【TiDB 使用环境】生产环境
【TiDB 版本】:7.5.1
【部署方式】裸金属机器部署 (x86_64)
【操作系统/CPU 架构/芯片详情】Rocky Linux release 9.1 (Blue Onyx)
【机器部署详情】 *CPU: Intel(R) Xeon(R) Gold 5317 CPU @ 3.00GHz (单路 12核24线程)
内存:250GB
磁盘: NVMe SSD
【集群数据量】50TB
【集群节点数】14
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
在处理 user_pipeline_wait_entity 表时发现严重的索引数据不一致现象。表中只有约 3 条数据,其中包含 bit(1) 类型的字段 v3。
具体现象描述:
-
执行 SELECT * FROM user_pipeline_wait_entity WHERE v3 = 0; 能正常返回 1 条数据。
-
执行 SELECT original_user_id FROM user_pipeline_wait_entity WHERE v3 = 0; 返回结果为空(Empty set)。
-
已知索引结构为 idx_v3_original_user (v3, original_user_id),此时 TiDB 选择了 IndexOnlyScan 。
-
使用 Hint /*+ IGNORE_INDEX(user_pipeline_wait_entity, idx_v3_original_user) */ 强制走全表扫描后,结果恢复正常(1条数据)。
-
通过 DROP INDEX 重新 ADD INDEX 后,问题消失。
【问题复现路径】
-
创建包含 bit(1) 字段及相关复合索引的表。
-
插入少量测试数据(包含 v3=0 的记录)。
-
通过覆盖索引字段进行查询(不回表)。
CREATE TABLEuser_pipeline_wait_entity(
idbigint(20) NOT NULL,
create_timedatetime DEFAULT NULL,
job_statusint(11) NOT NULL,
original_user_idint(11) NOT NULL,
s3pathvarchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
source_idvarchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
statusint(11) NOT NULL,
suffixvarchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
update_timedatetime DEFAULT NULL,
versionint(11) NOT NULL,
book_uploadbit(1) DEFAULT b’0’,
v3bit(1) DEFAULT b’0’,
progressvarchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
async_finishbit(1) DEFAULT NULL,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
KEYms_user_task(original_user_id),
KEYms_task3(original_user_id,status,job_status,create_time),
KEYms_task_1(job_status,update_time),
KEYms_task_user(original_user_id,v3),
KEYms_task_2(create_time,original_user_id,v3),
KEYidx_v3_original_user(v3,original_user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-
异常查询: EXPLAIN SELECT original_user_id FROM user_pipeline_wait_entity WHERE v3=0;
- 使用了 IndexReader 访问 idx_v3_original_user 索引,未回表,结果为空。
-
正常查询: EXPLAIN SELECT * FROM user_pipeline_wait_entity WHERE v3=0;
- 使用了 TableReader 进行全表扫描,结果正确。
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】
