暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GBase 8a MPP性能分析-单机日志

原创 LinuxPerf 2022-09-26
719

GBase 8a MPP 在性能分析中,单机性能分析是比较重要的一部分,通常,可以通过单机trace进行一些性能分析工作:

         1)通过获取SQL在不同node上每步的详细执行时间,可以通过对比找出差异,比如计算的数据量,聚集算法的选择,buffer的大小等等。

     2)了解SQL执行过程中各阶段的耗时,从而对耗时较长的部分进行重点优化。

     3)对内存使用,IO使用有一个相对量化的数据。

通过以下命令设置单机日志级别:

    设置全局参数,需重新登录session生效:set global gbase_sql_trace=on;set global gbase_sql_trace_level=3;

         设置session参数,仅在当前session生效:set gbase_sql_trace=on;set gbase_sql_trace_level=3;

当执行SQL后,node会生成所有SQL执行的详细过程。日志位置一般在node安装目录下,比如:/opt/gnode/log/gbase_root_xxx_xxx.trc

         以下是一个query的例子,通常日志内容比较多,我们可以先过滤一些关键字来查看:

grep -i ‘END\|Done’ xxx.trc

以下是一段过滤后的日志:

2022-04-13 15:00:21.751 [M:  35G,  48B,D:   0B] [DC:     0,     0] END Serial Aggregation. (time used: 0.000s)

2022-04-13 15:00:21.756 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:00:22.173 [M:  35G,   0B,D:   0B] [DC:   763,     0] END Scan. (time used: 0.417s)

2022-04-13 15:00:22.173 [M:  35G,   0B,D:   0B] [DC:   763,     0] END Join(time used: 0.000s)

2022-04-13 15:00:22.173 [M:  35G,   0B,D:   0B] [DC:   763,     0] END Scan(after join)(time used: 0.000s)

2022-04-13 15:00:22.173 [M:  35G,  48B,D:   0B] [DC:   763,     0] END Serial Aggregation. (time used: 0.000s)

2022-04-13 15:00:22.202 [M:  35G,  48B,D:   0B] [DC:     0,     0] END Serial Aggregation. (time used: 0.001s)

2022-04-13 15:00:22.205 [M:  35G,  48B,D:   0B] [DC:     0,     0] END Serial Aggregation. (time used: 0.000s)

2022-04-13 15:00:22.208 [M:  35G,  48B,D:   0B] [DC:     0,     0] END Serial Aggregation. (time used: 0.001s)

2022-04-13 15:00:22.211 [M:  35G,  48B,D:   0B] [DC:     0,     0] END Serial Aggregation. (time used: 0.000s)

2022-04-13 15:00:22.283 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:00:22.284 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan. (time used: 0.000s)

2022-04-13 15:00:22.284 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Join(time used: 0.000s)

2022-04-13 15:00:22.284 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan(after join)(time used: 0.000s)

2022-04-13 15:00:22.304 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:00:22.721 [M:  35G,   0B,D:   0B] [DC:   763,     0] END Scan. (time used: 0.416s)

2022-04-13 15:00:22.721 [M:  35G,   0B,D:   0B] [DC:   763,     0] END Join(time used: 0.000s)

2022-04-13 15:00:22.721 [M:  35G,   0B,D:   0B] [DC:   763,     0] END Scan(after join)(time used: 0.000s)

2022-04-13 15:00:22.960 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:00:22.961 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan. (time used: 0.000s)

2022-04-13 15:00:22.961 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Join(time used: 0.000s)

2022-04-13 15:00:22.961 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan(after join)(time used: 0.000s)

2022-04-13 15:00:22.975 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:00:22.975 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan. (time used: 0.000s)

2022-04-13 15:00:38.225 [M:  35G,1.74G,D:   0B] [DC: 22928,   166] END hybrid hash join: partition(-1/1): (time used: 14.988s)

2022-04-13 15:00:38.424 [M:  35G,   0B,D:   0B] [DC: 22928,   166] cnd(0) Done(time used: 15.444s)

2022-04-13 15:00:48.347 [M:  35G,7.22G,D:   0B] [DC: 51579,   166] END hybrid hash join: partition(-1/1): (time used: 8.897s)

2022-04-13 15:00:51.458 [M:  35G, 327M,D: 622M] [DC: 51579,   166] cnd(1) Done(time used: 13.034s)

2022-04-13 15:00:51.458 [M:  35G, 327M,D: 622M] [DC: 51579,   166] END Join(time used: 28.479s)

2022-04-13 15:00:51.458 [M:  35G, 327M,D: 622M] [DC: 51579,   166] END Scan(after join)(time used: 0.000s)

2022-04-13 15:01:08.806 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:01:08.806 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan. (time used: 0.000s)

2022-04-13 15:01:08.806 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Join(time used: 0.000s)

2022-04-13 15:01:08.806 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan(after join)(time used: 0.000s)

2022-04-13 15:01:08.823 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:01:08.823 [M:  35G,   0B,D:   0B] [DC:     0,     0] END Scan. (time used: 0.000s)

2022-04-13 15:01:08.905 [M:  35G, 829M,D:   0B] [DC:    40,     0] END hybrid hash join: partition(-1/1): (time used: 0.073s)

2022-04-13 15:01:08.972 [M:  35G,  14M,D:  14M] [DC:    40,     0] cnd(1) Done(time used: 0.149s)

2022-04-13 15:01:11.706 [M:  36G,2.47G,D:  14M] [DC:   118,  1244] END hybrid hash join: partition(-1/1): (time used: 2.353s)

2022-04-13 15:01:13.337 [M:  36G, 171M,D: 466M] [DC:   118,  1244] cnd(0) Done(time used: 4.365s)

2022-04-13 15:01:13.337 [M:  36G, 171M,D: 466M] [DC:   118,  1244] END Join(time used: 4.514s)

2022-04-13 15:01:13.337 [M:  36G, 171M,D: 466M] [DC:   118,  1244] END Scan(after join)(time used: 0.000s)

2022-04-13 15:01:21.679 [M:  37G,   0B,D:   0B] [DC:     0,     0] | END Smart Scan. (time used: 0.000s)

2022-04-13 15:01:21.679 [M:  37G,   0B,D:   0B] [DC:     0,     0] | END Scan. (time used: 0.000s)

2022-04-13 15:01:21.679 [M:  37G,   0B,D:   0B] [DC:     0,     0] | END Join(time used: 0.000s)

2022-04-13 15:01:21.679 [M:  37G,   0B,D:   0B] [DC:     0,     0] | END Scan(after join)(time used: 0.000s)

2022-04-13 15:01:21.679 [M:  37G,  80B,D:   0B] [DC:     0,     0] END Serial Aggregation. (time used: 0.000s)

2022-04-13 15:01:21.688 [M:  37G,   0B,D:   0B] [DC:     0,     0] | END Smart Scan. (time used: 0.000s)

2022-04-13 15:01:21.689 [M:  37G,   0B,D:   0B] [DC:     0,     0] | END Scan. (time used: 0.000s)

2022-04-13 15:01:31.610 [M:  38G,7.54G,D:   0B] [DC:  6180,  2488] | END hybrid hash join: partition(-1/1): (time used: 9.526s)

2022-04-13 15:01:34.048 [M:  38G, 326M,D: 621M] [DC:  6180,  2488] | cnd(1, 0) Done(time used: 12.359s)

2022-04-13 15:01:34.048 [M:  38G, 326M,D: 621M] [DC:  6180,  2488] | END Join(time used: 12.359s)

2022-04-13 15:01:34.048 [M:  38G, 326M,D: 621M] [DC:  6180,  2488] | END Scan(after join)(time used: 0.000s)

2022-04-13 15:01:52.929 [M:  46G,1.57G,D: 621M] [DC:1821233,  8708] | Parallel Materialization Done. (time used: 18.881s)

2022-04-13 15:01:53.144 [M:  46G, 326M,D: 621M] [DC:1821629,  8708] End parallel splitting for aggregation (split_type = 2)(time used: 0.001s)

2022-04-13 15:01:55.876 [M:  46G, 326M,D: 621M] [DC:1825382,  8708] END Parallel Aggregation. (time used: 2.945s)

2022-04-13 15:01:56.916 [M:  41G,   0B,D:   0B] [DC:     0,     0] END Smart Scan. (time used: 0.000s)

2022-04-13 15:01:56.916 [M:  41G,   0B,D:   0B] [DC:     0,     0] END Scan. (time used: 0.000s)

2022-04-13 15:01:56.916 [M:  41G,   0B,D:   0B] [DC:     0,     0] END Join(time used: 0.000s)

2022-04-13 15:01:56.916 [M:  41G,   0B,D:   0B] [DC:     0,     0] END Scan(after join)(time used: 0.000s)

2022-04-13 15:01:56.916 [M:  41G,  80B,D:   0B] [DC:     0,     0] END Serial Aggregation. (time used: 0.000s)

2022-04-13 15:01:56.922 [M:  41G, 128B,D:   0B] [DC:     6,     3] END Serial Aggregation. (time used: 0.004s)

2022-04-13 15:01:56.930 [M:  41G,  17K,D:   0B] [DC:     3,     3] END Sort. (time used: 0.001s)

 

通过以上信息可以获取到一些关键步骤的耗时:

1)cnd0 hash join 15s

2)cnd1 hash join 13s

3)hash join 4.5s

4)hash join 12.3s

5)Materialization 18.8s

6)Parallel Aggregation 3s

其中在parallel Materialization内存占用 46G,DC读取缓存命中1821233个,磁盘读取8708个,是系统负载最重的阶段。

2022-04-13 15:01:52.929 [M:  46G,1.57G,D: 621M] [DC:1821233,  8708] | Parallel Materialization Done. (time used: 18.881s)

可以对该trace文件阅读,查看在parallelMaterialization阶段是否存在性能问题:

2022-04-13 15:01:34.048 [M:  38G, 326M,D: 621M] [DC:  6180,  2488] | BEGIN Materialization(81498863 rows, page size: 16777216)

2022-04-13 15:01:34.430 [M:  38G,1.25G,D: 621M] [DC:  6180,  2488] | Parallel materialization prepared

2022-04-13 15:01:36.144 [M:  42G,1.25G,D: 621M] [DC:109751,  8708] | ( 0)Materialization 0 to 393215 already

2022-04-13 15:01:36.144 [M:  42G,1.25G,D: 621M] [DC:109751,  8708] | ( 0)Materialization 0 to 393215 already

……

2022-04-13 15:01:36.405 [M:  42G,1.57G,D: 621M] [DC:110639,  8708] | Parallel materialization 0 to 15728639 already

2022-04-13 15:01:36.405 [M:  42G,1.57G,D: 621M] [DC:110639,  8708] | 1/6 round(s) materialization done

单机会根据需要Materialization的行数,以及buffer 大小,来计算每轮可以物化的行数,在该环境上,81498863行数据换算成DC大概是1244个(每65536行一个DC),parallel参数是40,根据trace显示,每线程可以物化的行数是393216行,换成DC是6个DC,40并行,每次可以处理240DC。那么理论上,1244个DC大概需要6轮就能完成,最后一轮只需要处理44个DC。从日志看1/6 round耗时大概是2s(从prepared到第一轮结束),预计materizlization大概是10-12s左右,跟实际18.8s有较大出入,所有需要再次查看后面的materialization日志,到底在干什么。

2022-04-13 15:01:36.546 [M:  42G,1.57G,D: 621M] [DC:126181,  8708] | Parallel materialization 15728640 to 15794175 already

2022-04-13 15:01:36.546 [M:  42G,1.57G,D: 621M] [DC:126181,  8708] | 2/6 round(s) materialization done

从这一段日志看到,2/6 roud materialization只做了65535行,也就是1个DC。后面日志也大致如此,所有可以看到在parallel materialization处理阶段存在问题,本该parallel处理多个DC的情况变成了类似串行处理DC(40个parallel在处理1个DC),增加了系统开销,造成性能下降。

   以上是一个通过单机日志分析GBase 8a性能问题的例子。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论