tidb添加索引导致全库不能查询

一个好的问题描述有利于社区小伙伴更快帮你定位到问题,高效解决你的问题

【TiDB 使用环境】测试环境
【TiDB 版本】
【部署方式】机器部署
【操作系统/CPU 架构/芯片详情】欧拉操作系统 ,x86架构
【机器部署详情】
【集群数据量】
【集群节点数】
【问题复现路径】
【遇到的问题:问题现象及影响】当我给数据库中某张表上添加索引时,库里的所有查询都要等到索引添加完才能返回结果,就连系统表查询:select * from INFORMATION_SCHEMA.PROCESSLIST也是要等到索引添加完才返回结果,添加索引的语句是:CREATE INDEX idx_table_name_no ON table_name (no); 官方不是说ddl在线添加二级索引不会影响正常的增删改查么?有没有遇到相似问题的小伙伴,问题是怎么解决的?还是哪里配置没开启?

集群hang住了? 看下系统资源是不是有打满的呢

TiDB 的在线 DDL 功能依赖特定配置项启用,若配置缺失或错误,会退化为 “离线 DDL”,直接锁表导致所有操作阻塞:
核心配置项:tidb_ddl_enable_online_ddl(全局变量),默认值应为 ON(开启状态),若被手动改为 OFF,创建索引时会采用离线方式,全程持有表锁,阻塞所有读写。

  • 补充配置:tidb_ddl_reorg_worker_cnttidb_ddl_reorg_batch_size 影响 DDL 执行效率,但不影响 “在线” 特性,仅当主配置关闭时才会导致阻塞。

是不是数据量大,导致等待时间太久了

没找到这个tidb_ddl_enable_online_ddl参数

只有一千万左右

资源没打满

DDL操作默认会加元数据锁

业务开展过程中不建议增加索引,这是一个不太好的习惯

可以尝试用AB表替换的方式

是只影响这个表吗? 还是所有表都有影响?

看着像所有表

TiDB 通过 etcd 的选举功能从多个 TiDB 节点中选举出一个节点来担任 Owner 的宿主节点,当这个Owner 的宿主节点上在执行创建索引这种物理ddl任务时,此节点上执行增删改查会被阻塞,其它节点上可正常执行,生产上建议大家配置 run-ddl参数,将业务连接的tidb节点和运维使用的tidb节点区分开,避免生产上添加索引等操作时出现业务阻塞的问题

TiDB 版本是多少呢?

8.5.4,最新版本

在加索引期间,查一下是否有锁呢

不应该,我用的7.5版本,试过大表,小表,都没有这种现象

tidb_enable_metadata_lock参数是什么值?

最新版应该没问题

参数值是1