从COLUMNS表获取数据明显慢于mariadb

【TiDB 版本】

v5.0

【问题描述】

如下sql,在tidb执行速度,明显慢于mariadb
SELECT
COLUMN_NAME
FROM
information_schema.COLUMNS
WHERE
table_name = ‘test’ and TABLE_SCHEMA =‘test’ AND DATA_TYPE in (‘date’,‘datetime’,‘time’)

image

image

image

在160W数据下,执行速度需要 6s。

相同SQL 在 mariadb 5.7.17,600W数据下,只需 0.5s 。

想知道tidb这块是有优化手段嘛?


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

感谢反馈,这张表的查询还在持续优化中,建议提供一下该查询的 SQL 的执行计划。另外我什么场景下需要频繁查询该表操作 ?

感谢回复。

有个业务功能存在动态创建表的情况,求快想在information_schema获取字段信息。

SELECT
COLUMN_NAME
FROM
information_schema. COLUMNS
WHERE
table_name = ‘test’ and TABLE_SCHEMA =‘test’ AND DATA_TYPE in (‘date’,‘datetime’,‘time’)

该sql执行计划如下:

Projection_4 8000.00 root Column#4
└─Selection_5 8000.00 root eq(Column#2, “test”), eq(Column#3, “test”), in(Column#8, “date”, “datetime”, “time”)
└─MemTableScan_6 10000.00 root table:COLUMNS

explain analyze sql 不是 explain ,麻烦反馈下结果,另外请执行多次,看看是否每次的时间都差不多,多谢。

explain analyze 结果如下:

再一次查询呢? 在同一个session 连续查询两次的时间消耗一样吗?

连续查询两次,时间消耗基本一样

多谢,麻烦帮忙确认下具体哪个版本? v5.0.0 还是 v5.0.1? 下次麻烦写清楚

好的,是 v5.0.0

想问一下,这种查询 columns 表的次数频繁吗?

就业务功能来说还是比较频繁。不过查columns只是deadline下的快速实现方案。

了解,感谢反馈,这个问题的状态处于分析中,有进展的话,这边会跟帖回复~~

好的,感谢。

后面有更新会继续跟帖,感谢关注 :handshake: ~

curl -G http://{TiDBIP}:10080/debug/zip?seconds=30" > profile.zip
ip地址为tidb服务器的ip,端口为tidb_status_port的端口
麻烦帮忙取一下火焰图吧。 先查询,查询的过程中执行提取,多谢。可以多查询几次。

目前测试环境数据量下来了,平均查询时间在2s左右。

抱歉火焰图不会生成。 :sweat:

profile.zip (758.8 KB)

TiDB 的 information_schema.columns 这张表是个虚拟表,当尝试去获取他的时候,tidb 才会去根据数据构造这张表。在数据量特别大的时候会出现比较慢的情况。
从火焰图来看,目前是符合这个情况的。

1 个赞

get 感谢回复

:handshake:

您好,想请问下,我之前在查询informationschema.tables时速度很慢,但执行show tables from dbname又特别快,想请问下,难道show tables不是去informationschema.tables查询表信息吗