相同的数据库,TiDB集群服务器查询没有单机mysql查询快是什么原因?

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

【概述】 场景 + 问题概述
订单信息根据产品名称模糊查询

【背景】 做过哪些操作
订单信息根据产品名称模糊查询

【现象】 业务和数据库现象
相同的SQL语句,TiDB查询比Mysql要慢很多

【问题】 当前遇到的问题
查询慢,请教原因

【业务影响】

【TiDB 版本】 v5.3.0

【应用软件及版本】

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

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

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

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

业务SQL语句
SELECT
o.,
od.
,
ue.is_email,
ue.is_liar,
IF(u.auth_phone != ‘’, 1, 0) AS is_phone,
ue.is_credentials,
p.product_name,
(
SELECT
v.email
FROM
tbl_pay_email_verify v
WHERE
v.email = od.pay_account
LIMIT
1
) AS auth_pay_account,
u.auth_phone AS phone,
ui.email AS email_ext,
ut.account AS promoter,
a.alias,
od.origin_amount AS receive_point,
m.mdse_name,
odc.compensate_order_detail_id
FROM
tbl_order_detail AS od
LEFT JOIN tbl_order AS o ON o.id = od.order_id
LEFT JOIN tbl_order_promoter AS op ON op.id = od.detail_id
LEFT JOIN tbl_user AS u ON o.user_id = u.id
LEFT JOIN tbl_user_ext AS ue ON ue.user_id = u.id
LEFT JOIN tbl_user_info AS ui ON ui.user_id = u.id
LEFT JOIN tbl_user AS ut ON op.ad_uid = ut.id
LEFT JOIN tbl_product_web AS p ON p.id = od.product_id
AND p.site_id = od.site_id
LEFT JOIN tbl_product_alias AS a ON a.product_id = od.product_id
LEFT JOIN tbl_product_mdse AS pm ON pm.product_id = p.id
AND pm.site_id = p.site_id
LEFT JOIN tbl_mdse AS m ON m.id = pm.mdse_id
LEFT JOIN tbl_order_detail_compensate AS odc ON odc.order_detail_id = od.detail_id
WHERE
od.is_virtual = 1
AND od.create_time >= 1451577600
AND od.create_time <= 1644537600
AND (
p.product_name LIKE “%Football Manager 2017 Steam CD Key%”
OR a.alias LIKE “%Football Manager 2017 Steam CD Key%”
)
ORDER BY
od.create_time DESC
LIMIT
0, 15;

SQL查询执行计划 sql查询执行计划.txt (245.3 KB)

以下截图是MySQL查询结果的时间

以下截图是TIDB服务器查询结果的时间

请问需要如何优化,能使查询速度变快?谢谢

2 个赞

tidb_executor_concurrency tidb_distsql_scan_concurrency tidb_index_lookup_concurrency 这几个个环境变量调大试试,

1 个赞

生产环境,调整会不会有OOM的风险,有参数设置文档介绍吗,谢谢

1 个赞

https://docs.pingcap.com/zh/tidb/v5.2/system-variables/#tidb_executor_concurrency-从-v50-版本开始引入

2 个赞

1、麻烦把涉及的几个表的表结构提供下。
2、麻烦MySQL的执行计划也提供下。

这个要看具体情况了,不是所有的查询TiDB都比MySQL快的,MySQL就是单纯的RDBMS,TiDB的处理流程本身就要比MySQL复杂

3 个赞

项目表结构 相关表结构.txt (19.5 KB)

mysql执行计划信息 mysql执行计划.txt (2.5 KB)

2 个赞

你这执行计划格式咋是乱的?

3 个赞

看下我刚刚的截图

1 个赞

没有TiDB的执行计划么?

3 个赞

这明显不是DBA的习惯:joy:

3 个赞

tidb执行计划 tidb执行计划.txt (243.7 KB)

上面其实已经发过了,再发下吧

2 个赞

内容很多,txt文档里面能看清吗

1 个赞

tidb_executor_concurrency tidb_distsql_scan_concurrency tidb_index_lookup_concurrency,这几个参数是按tidb默认值的,没作任何修改

1 个赞

麻烦导出一下 tbl_order_detail 表的统计信息:
curl http://tidb_ip:status_port/stats/dump/db_name/table_name >table_name.json

1 个赞

tbl_order.json (1.7 MB) tbl_order_detail.json (2.1 MB)

帮忙分析下,谢谢

1 个赞

你的统计信息导入时候有异常:ERROR 1406 (22001): Data Too Long, field len 15, data len 16
请问你的TiDB 版本是 v5.3.0 是吧?是否从其它版本升级过来的呢?

1 个赞

对的,v5.3.0的版本,我们是从v5.0.1版本升级的

1 个赞

是不是这个错误信息导致的查询很慢?

1 个赞

这么多的表,会不会是网络开销比较大所致?