tiflash7.5.1 Internal : Can't find a proper physical plan for this query

【 TiDB 使用环境】生产环境
【 TiDB 版本】
7.5.1
mysql> SELECT @@tidb_enforce_mpp ;
| @@tidb_enforce_mpp |
| 1 |
1 row in set (0.00 sec)

mysql> SELECT @@tidb_allow_mpp ;
| @@tidb_allow_mpp |
| 1 |
1 row in set (0.00 sec)

mysql> SELECT @@tidb_opt_enable_hash_join ;
| @@tidb_opt_enable_hash_join |
| 1 |

【复现路径】做过哪些操作出现的问题
EXPLAIN SELECT /+read_from_storage(tiflash[synrpt_tt_promotion])/
COUNT(DISTINCT promotion_id) AS ad_id,
advertiser_id
FROM
synrpt_tt_promotion
WHERE
DATE = ‘2024-05-15’
AND stat_cost > 0
GROUP BY
advertiser_id
错误代码: 1815
Internal : Can’t find a proper physical plan for this query

【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

COUNT(DISTINCT promotion_id) AS ad_id 慢查询里看到是 走tikv 我想强制走tiflash 就报错了

count(1) 正常的

其他表 的 count(distinct 也是正常的

检查一下这个表tiflash的状态

tiflash 副本是正常的

https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_allow_tiflash_cop-从-v730-版本开始引入

打开这个看看。

AND stat_cost > 0
这个字段定义是字符串 导致隐式格式转换了 stat_cost VARCHAR(10) DEFAULT NULL COMMENT ‘表示广告在投放期内的预估花费金额。当天数据可能会有波动,次日稳定’,

改成 AND stat_cost > ‘0’ 就正常了 , 但这是个bug 系统最好能修复一下 。 避免隐式转换的时候触发bug导致sql 不可用。

奇怪的是 同样的一个表 在 我线上的 yixintui 库 强制tiflash 就报错 ,我rename 到 test库之后 强制tiflash 不报错,走tikv 执行计划 。

look look

请问下 tidb_allow_tiflash_cop 设成 true 之后, 用 AND stat_cost > 0 还是会报错吗?

tidb_allow_tiflash_cop 设成 true 之后 就不报错了 执行计划也是对的

不强制tiflash 也能走tiflash 了。

good good

这个表的schema能贴一下吗?我看看能不能重现

1 个赞

方便的话可以用 plan replayer ,这样信息更完整 https://docs.pingcap.com/zh/tidb/stable/sql-plan-replayer

CREATE TABLE synrpt_tt_promotion (
advertiser_id bigint(20) NOT NULL COMMENT ‘广告账户id’,
project_id bigint(20) NOT NULL COMMENT ‘项目ID’,
promotion_id bigint(32) NOT NULL COMMENT ‘广告ID’,
date char(10) NOT NULL COMMENT ‘日期’,
hour int(2) NOT NULL COMMENT ‘小时’,
promotion_name varchar(255) DEFAULT NULL COMMENT ‘广告计划名称’,
stat_cost varchar(10) DEFAULT NULL COMMENT ‘表示广告在投放期内的预估花费金额。当天数据可能会有波动,次日稳定’,
show_cnt varchar(10) DEFAULT NULL COMMENT ‘广告展示给用户的次数。计算方式:经平台判定有效且被计费的展示次数。’,
cpm_platform varchar(10) DEFAULT NULL COMMENT ‘广告平均每一千次展现所付出的费用,计算公式是:总消耗/展示数1000。',
click_cnt varchar(10) DEFAULT NULL COMMENT ‘当用户点击广告素材时,触发点击事件,该事件被认为是一次有效的广告点击。’,
ctr varchar(10) DEFAULT NULL COMMENT '广告被点击的次数占展示次数的百分比。计算方法:点击数/展示数
100%’,

create_time datetime DEFAULT CURRENT_TIMESTAMP,
sync_time datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (advertiser_id,project_id,promotion_id,date,hour) /*T![clustered_index] NONCLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T! SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=2 */ COMMENT=‘体验版广告分时报表数据’
PARTITION BY RANGE COLUMNS(date)
(

PARTITION p20240415 VALUES LESS THAN (“2024-04-16”),
PARTITION p20240416 VALUES LESS THAN (“2024-04-17”),
PARTITION p20240417 VALUES LESS THAN (“2024-04-18”),
PARTITION p20240418 VALUES LESS THAN (“2024-04-19”),
PARTITION p20240419 VALUES LESS THAN (“2024-04-20”),
PARTITION p20240420 VALUES LESS THAN (“2024-04-21”),
PARTITION p20240421 VALUES LESS THAN (“2024-04-22”),
PARTITION p20240422 VALUES LESS THAN (“2024-04-23”),
PARTITION p20240423 VALUES LESS THAN (“2024-04-24”),
PARTITION p20240424 VALUES LESS THAN (“2024-04-25”),
PARTITION p20240425 VALUES LESS THAN (“2024-04-26”),
PARTITION p20240426 VALUES LESS THAN (“2024-04-27”),
PARTITION p20240427 VALUES LESS THAN (“2024-04-28”),
PARTITION p20240428 VALUES LESS THAN (‘2024-04-29’),
PARTITION p20240429 VALUES LESS THAN (‘2024-04-30’),
PARTITION p20240430 VALUES LESS THAN (‘2024-05-01’),
PARTITION p20240501 VALUES LESS THAN (‘2024-05-02’),
PARTITION p20240502 VALUES LESS THAN (‘2024-05-03’),
PARTITION p20240503 VALUES LESS THAN (‘2024-05-04’),
PARTITION p20240504 VALUES LESS THAN (‘2024-05-05’),
PARTITION p20240505 VALUES LESS THAN (‘2024-05-06’),
PARTITION p20240506 VALUES LESS THAN (‘2024-05-07’),
PARTITION p20240507 VALUES LESS THAN (‘2024-05-08’),
PARTITION p20240508 VALUES LESS THAN (‘2024-05-09’),
PARTITION p20240509 VALUES LESS THAN (‘2024-05-10’),
PARTITION p20240510 VALUES LESS THAN (‘2024-05-11’),
PARTITION p20240511 VALUES LESS THAN (‘2024-05-12’),
PARTITION p20240512 VALUES LESS THAN (‘2024-05-13’),
PARTITION p20240513 VALUES LESS THAN (‘2024-05-14’),
PARTITION p20240514 VALUES LESS THAN (‘2024-05-15’),
PARTITION p20240515 VALUES LESS THAN (‘2024-05-16’),
PARTITION p20240516 VALUES LESS THAN (‘2024-05-17’),
PARTITION p20240517 VALUES LESS THAN (‘2024-05-18’),
PARTITION p20240518 VALUES LESS THAN (‘2024-05-19’),
PARTITION p20240519 VALUES LESS THAN (‘2024-05-20’),
PARTITION p20240520 VALUES LESS THAN (‘2024-05-21’),
PARTITION p20240521 VALUES LESS THAN (‘2024-05-22’))

能否上传下完整的 plan replayer ,只用 schema 没有复现 。使用方式见: https://docs.pingcap.com/zh/tidb/stable/sql-plan-replayer @何明_亿玛

还是一样报错 。

image

改回 tidb_allow_tiflash_cop=1 之后 replayer.zip 198M 上传报错

replayer.zip (40.2 KB)
统计信息太大了 传不上来 去掉统计信息打包 传上来了