个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题
【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 TABLE user_pipeline_wait_entity (
id bigint(20) NOT NULL,
create_time datetime DEFAULT NULL,
job_status int(11) NOT NULL,
original_user_id int(11) NOT NULL,
s3path varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
source_id varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
status int(11) NOT NULL,
suffix varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
update_time datetime DEFAULT NULL,
version int(11) NOT NULL,
book_upload bit(1) DEFAULT b’0’,
v3 bit(1) DEFAULT b’0’,
progress varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
async_finish bit(1) DEFAULT NULL,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
KEY ms_user_task (original_user_id),
KEY ms_task3 (original_user_id,status,job_status,create_time),
KEY ms_task_1 (job_status,update_time),
KEY ms_task_user (original_user_id,v3),
KEY ms_task_2 (create_time,original_user_id,v3),
KEY idx_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 报错的日志】
【其他附件:截图/日志/监控】