索引失效

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
tidb5.1.1 生产环境

【概述】 场景 + 问题概述
测试环境同样的sql可以走索引,但是生产环境不走索引

【背景】 做过哪些操作
生产环境上通过delete 语句做过数据删除,每次执行删除5万条左右

【现象】 业务和数据库现象

【问题】 当前遇到的问题
生产环境查询不走索引,索引失效




【业务影响】
查询超时
【TiDB 版本】
5.1.1
【应用软件及版本】

【附件】 相关日志及配置信息

  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息

监控(https://metricstool.pingcap.com/)

  • TiDB-Overview Grafana监控
  • TiDB Grafana 监控
  • TiKV Grafana 监控
  • PD Grafana 监控
  • 对应模块日志(包含问题前后 1 小时日志)

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

生产环境走了全表扫描了,先手工分析一下表再试试。

两个环境的该表的数据量分别是多少?

怎么操作?老哥

:joy: 你就查一下条数呗

测试环境100多条数据同样的表结构和sql走索引。
生产环境8万多条数据不走索引,以前应该是走的。因为没有超时问题,一天前我手动用delete from table limit 50000 分多次删除了将近30万数据现在就客户反应超时了

我回复错了,我新给你回复了,你看新的

怎么操作老哥

ANALYZE [INCREMENTAL] TABLE TableName [PARTITION PartitionNameList] [IndexNameList] [WITH NUM BUCKETS];

生产环境建议业务窗口期再操作,或者等没啥业务的时候再操作。

可以analyze这个表,然后重新试试,可能是表的统计信息不准导致的

急,写不来,能不能指导下

analyze table sell_order_item;

好的,现在我再去执行sql,可以走索引了。现在我有两个疑问,我为什么会出现这个问题,这个analyze表不会自动吗,如果会自动,那我间隔时间绝对有将近48小时了距离删除操作

出现这个问题,就是因为删除了大量数据之后,没有及时analyze,导致统计信息不准确,就影响了执行计划的选择。analyze会自动,但是也有参数限制了,可以看看这里有自动收集的说明 统计信息简介 | PingCAP Docs
觉得默认值不正确,可以适当更改这几个值

好,我去好好看看这里的文档,先多谢了

我看了我的默认值是一样的没有变动, stats-lease这个不知道怎么看,那说明我是应该能自动更新的,那为什么一天多时间都没更新,而需要我手动去更新呢

stats-lease 参数是在样本文件的server_configs中设置的,如果没设置,默认是3s。
SHOW STATS_HEALTHY where healthy < 50 and healthy != 0;
查一下有没有范围内的表,如果没有就表示其他表已经analyze,那你可以调整tidb_auto_analyze_ratio为0.8
或者你可以在dashboard中搜索一下有没有关键字analyze,看看tidb有没有自动analyze

嗯,我检查了所有的参数配置和系统变量都是默认的。SHOW STATS_HEALTHY也执行了没有数据。我好奇我删了好几张表数据就这张没有自动analyze。还有我不理解tidb_auto_analyze_ratio改成0.8,因为我看文档这是变更行数和总行数的百分比,我本来就没有自动analyze,这个数值再改大的话急更加不会自动analyze了。
还有一点我在看文档看到这个ANALYZE 配置持久化,,感觉这个和自动analyze是一回事啊,他们俩的区别是啥

大量数据之后,没有及时analyze,导致统计信息不准确,就影响了执行计划的选择。
执行计划在物理计划阶段是基于代价的这个时候依赖统计信息

建议业务窗口期再做批处理