TiFlash统计分析很慢

mysql> set @@tidb_isolation_read_engines='tiflash,tidb'; set @@tidb_allow_mpp=1;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> desc SELECT   /*+ read_from_storage(tiflash[a]) */   COUNT(DISTINCT(a.md5_doc_id)) AS "countd(post_cnt)" FROM   poc.`document_ndc_all` a   JOIN poc.dim_fid_sentid b ON a.md5_doc_id = b.md5_doc_id WHERE   pub_date_time BETWEEN '2021-02-22'   AND '2021-05-25'   AND b.folder_id IN ('108487', '100508', '100510');
+--------------------------------------------+----------+-------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------+
| id                                         | estRows  | task              | access object | operator info                                                                                                                          |
+--------------------------------------------+----------+-------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------+
| HashAgg_36                                 | 1.00     | root              |               | funcs:count(distinct poc.document_ndc_all.md5_doc_id)->Column#42                                                                       |
| └─TableReader_38                           | 1.00     | root              |               | data:ExchangeSender_37                                                                                                                 |
|   └─ExchangeSender_37                      | 1.00     | batchCop[tiflash] |               | ExchangeType: PassThrough                                                                                                              |
|     └─HashAgg_13                           | 1.00     | batchCop[tiflash] |               | group by:poc.document_ndc_all.md5_doc_id,                                                                                              |
|       └─Projection_34                      | 37.46    | batchCop[tiflash] |               | poc.document_ndc_all.md5_doc_id                                                                                                        |
|         └─HashJoin_35                      | 37.46    | batchCop[tiflash] |               | inner join, equal:[eq(poc.dim_fid_sentid.md5_doc_id, poc.document_ndc_all.md5_doc_id)]                                                 |
|           ├─ExchangeReceiver_22(Build)     | 29.97    | batchCop[tiflash] |               |                                                                                                                                        |
|           │ └─ExchangeSender_21            | 29.97    | batchCop[tiflash] |               | ExchangeType: Broadcast                                                                                                                |
|           │   └─Selection_20               | 29.97    | batchCop[tiflash] |               | in(poc.dim_fid_sentid.folder_id, 108487, 100508, 100510), not(isnull(poc.dim_fid_sentid.md5_doc_id))                                   |
|           │     └─TableFullScan_19         | 10000.00 | batchCop[tiflash] | table:b       | keep order:false, stats:pseudo                                                                                                         |
|           └─Selection_24(Probe)            | 250.00   | batchCop[tiflash] |               | ge(poc.document_ndc_all.pub_date_time, 2021-02-22 00:00:00.000000), le(poc.document_ndc_all.pub_date_time, 2021-05-25 00:00:00.000000) |
|             └─TableFullScan_23             | 10000.00 | batchCop[tiflash] | table:a       | keep order:false, stats:pseudo                                                                                                         |
+--------------------------------------------+----------+-------------------+---------------+----------------------------------------------------------------------------------------------------------------------------------------+
12 rows in set (0.00 sec)

可以走 MPP执行了,应该很快,你试试看看

1 个赞

可以了,是因为什么,统计信息太旧?为啥会这样呢,另外这个sql4.0.13时执行20s,5.0.2 mpp执行15s,感觉并没有提升太多,这个count distinct还能优化吗?

4.0.13 是 50s 吧?

看这个,上面的一个图:

1 个赞

有几点疑问啊:
1.耗时主要是在distinct,还能优化吗
2.为什么执行analyze table后才可以,执行这个之后,也不用强制tiflash,bdo自己选择了tiflash和mpp,但是为什么之前不行?
3.以后是否所有的新表都要执行该操作?
@fzhedu @yilong

1 个赞

这个图后面的信息可以提供么?目前的截图只能看到是 tidb 侧的 agg 耗时,可以通过调大 final agg 的并发度,上面的对话有提到。

这个图后面的应该是提供不了了,版本已经升级了

您说的final agg 是这个吗: tidb_distsql_scan_concurrency

为什么表的统计信息呢,这个是昨天通过tispark写入的,tispark写入时应该是自动更新的吧
那以后的新表都要过几天 更新一次?

而且把tidb_distsql_scan_concurency调大到80后,默认走了tiflash,没有mpp


image

不是那个,reset 一下那个参数,然后设置这个 tidb_hashagg_final_concurrency= 30.

一般 表时候自动更新统计数据的,不知道你的系统有没有设置特殊的参数来禁止自动更新。

  1. 调整 set tidb_hashagg_final_concurrency=30
  2. 没有 analyze table 之前,数据量就很小,就不用上tiflash 的 MPP 运行,这个是查询优化器决定的;
  3. 如果急着用,都要手动更新,因为自动更新可能晚点才触发。

1.测试了下,那个参数默认和调到30,50,都没效果,还是13-15s
2.没有analyze table 之前,数据量就很少是什么意思,没analyze table之前表就很大啊,document_ndc_all 1.5亿,dim_fid_sentid 3.5亿。。。

  1. 这个集群是使用什么安装的? tiup 吗? 麻烦执行下 tiup cluster display, 或者描述下拓扑,多谢。
  2. 你期望的时间是多少? 之前有再其他系统的时间对比吗?

你可以看到上面的计划,estrows 是查询优化器得到的统计信息,没有analyze 之前都很小,误导了查询优化器做作决策,更新之后就可以了

  1. 是使用tiup部署的,拓扑如下:
    ,3节点 tiflash、3节点 tikv,3节点pd+tidb

2.期望的时间,针对这个sql最好是10s内把,对比了clickhouse是6s,我们是clickhouse不支持更新,想切到tidb,但是最少需要保证查询性能不能损失太多

嗯嗯,estrows是优化器得到的预计信息,但是这个信息不是tispark写入的时候更新的吗,为啥没更新了呢,那是不是以后我们每个表再写入后都要先来这么一下才可以呢

但是不得不说,有些sql,5.0.2 mpp确实比4.0.13要强很多

从上面 15.4s 的那个计划看,tiflash mpp部分只跑了 1.38s,其他主要耗时在 tidb 侧。所以考虑调整 tidb 的参数。 show variables like “%concurrency%”; 看看你那边并发度的设置是多少

1 个赞

对,主要就是tidb侧,我把tidb_executor_concurrency和tidb_hashagg_final_concurrency两个都调到30、50,都没有明显变化,还是13-15s
image

1 个赞

https://docs.pingcap.com/zh/tidb/stable/statistics#自动更新 请对照官方文件自查一下