强制走主键索引报错

【 TiDB 使用环境】生产环境
【 TiDB 版本】v4.0.13
【遇到的问题:问题现象及影响】

有一组备库,数据和主库一致。和备库执行同样的SQL,没有报错。

希望各位大佬提供排查思路。

再补充一下,是个别表不能走主键索引,不是所有表。

image


还是存在报错。 还有就是我在问题哪里也说了,有一组备,数据是一致的,但是没有这样的报错问题

报错文字版的发一下

把force index(primary)去掉试下

这种情况可能是由于以下原因导致的:

  1. 强制走主键索引:当您在 SQL 语句中使用 FORCE INDEX 或者其他方式强制使用主键索引时,TiDB 可能会对该操作进行检查,以确保使用主键索引是合理的。如果检查失败,可能会导致错误的发生。
  2. 备库与主库的配置不一致:备库和主库的配置可能存在差异,例如索引设置、参数配置等。这些差异可能导致在备库上强制使用主键索引时出现错误。

为了解决这个问题,您可以尝试以下步骤:

  1. 检查备库的配置:确保备库和主库的配置文件(如 tidb.toml)保持一致,特别是与索引相关的配置项。比较主库和备库的配置文件,查看是否存在差异。
  2. 检查备库的版本:确保备库和主库的 TiDB 版本一致。如果版本不一致,可能会导致备库在执行某些操作时出现错误。
  3. 检查备库的数据一致性:使用 TiDB 的工具(如 pt-table-checksum 或者 sync_diff_inspector)检查备库和主库的数据一致性。确保备库的数据与主库完全一致。

ERROR 1815 (HY000): Internal : Can’t find a proper physical plan for this query

没报错

现在的情况是主库报错了,但是备库没有报错。

换个其他索引看看知否一样的报错

是不是有tiflash副本,清理掉这个tiflash副本试试

收集统计信息看看

根据您提供的信息,当执行某个查询时,出现了错误 ERROR 1815 (HY000): Internal : Can't find a proper physical plan for this query

这个错误通常表示 TiDB 在执行查询时无法找到适合的物理执行计划。物理执行计划是指 TiDB 在执行查询时选择的具体执行方式,包括选择哪些索引、使用哪种连接方式等。

这个问题可能是由以下原因导致的:

  1. 查询复杂度过高:如果查询涉及多个表、多个连接条件或者复杂的过滤条件,TiDB 可能会在选择物理执行计划时遇到困难。这种情况下,您可以尝试优化查询,例如通过添加索引、拆分查询或者调整查询条件来降低查询复杂度。

  2. 统计信息不准确:TiDB 使用统计信息来估计查询的成本,并选择最优的物理执行计划。如果统计信息不准确或者过时,TiDB 可能会选择不合适的执行计划。您可以尝试更新统计信息,使用 ANALYZE TABLE 命令来收集最新的统计信息。

  3. TiDB 版本问题:某些 TiDB 版本可能存在执行计划选择的 bug 或者限制。您可以尝试升级到最新的 TiDB 版本,以获取更好的执行计划选择。

为了解决这个问题,您可以尝试以下步骤:

  1. 优化查询:检查查询语句,尝试优化查询的复杂度,例如添加索引、拆分查询或者调整查询条件。

  2. 更新统计信息:使用 ANALYZE TABLE 命令来更新表的统计信息,以确保 TiDB 使用最新的统计信息进行执行计划选择。

  3. 升级 TiDB 版本:如果您正在使用较旧的 TiDB 版本,尝试升级到最新的版本,以获取更好的执行计划选择和 bug 修复。

如果问题仍然存在,建议您提供更多的上下文信息、具体的查询语句和表结构,以便进行更详细的分析和解答。

换索引不会

没有tiflash

表是聚簇表还是 非聚簇表,完整表结构 发下

参考这个看看

1 个赞