最近再对clickhouse hive engine进行一些调优工作。本文将总结调优过程中常用的一些工具和命令。
火焰图
火焰图 (Flame Graph) 是性能优化大师 Bredan Gregg 创建的一种性能分析图表,因为它的样子近似火焰而得名。使用火焰图能够非常快速的定位到代码中的瓶颈,它就像一个在代码之海中航行的程序员的地图,指引着性能优化的方向。下图是clickhouse的一张火焰图。
火焰图的上下表示调用关系,下层的函数调用上层的函数。每个函数对应一个等高的长条,这个长条对应着该函数的某项指标,如cpu time/real time/memory allocate.
根据不同的指标,火焰图可以分为:
-
cpu火焰图。显示代码中函数的cpu耗时,函数宽度与cpu time成正比。主要用于分析进程中的cpu瓶颈
-
real火焰图。显示代码中函数的duration耗时,函数宽度与real time成正比。与cpu火焰图结合可用于分析进程中的io瓶颈
-
mem火焰图。显示代码中函数中申请内存的大小,函数宽度与memory allocation成正比。主要用于优化进程的内存占用。
对于clickhouse来说,性能瓶颈主要在于cpu和io。因此本文着重介绍如何生成cpu和real火焰图
clickhouse-flamegraph
clickhouse-flamegraph(https://github.com/Slach/clickhouse-flamegraph)是一个命令行工具,他能够将clickhouse系统表system.trace_log中的性能指标以query_id为粒度可视化,形成对应的火焰图。
在使用clickhouse-flamegraph之前,需要
-
安装:参考官方文档,此处略
-
配置:修改clickhouse配置文件:config.xml和users.xml,参考官方文档。这样做的目的是让clickhouse在query执行过程中,对cpu time, real time, memory allocate等指标进行采样。
安装和配置完成后,如何使用clickhouse-flame-graph生成火焰图呢?
-
首先执行对应的query,
-
然后记录对应的query_id
-
运行clickhouse-flamegraph
$ clickhouse-flameg