首页 文章 精选 留言 我的

精选列表

搜索[gaussdb],共668篇文章
优秀的个人博客,低调大师

GaussDB火焰图分析

目录 问题描述 问题现象 告警 业务影响 原因分析 处理方法 问题描述 CPU利用率是衡量系统负载和健康度的重要指标之一,系统在运行过程中时常发生CPU利用率高的情况。在分析性能问题时,可通过火焰图查看CPU耗时,了解瓶颈在哪里。 问题现象 部分sql执行速度不符合预期。 告警 慢sql告警。 cpu使用率高告警。 数据库整体运行慢。 业务影响 业务性能差。 原因分析 函数存在性能问题。 处理方法 所需工具:stackcollapse-perf.pl、flamegraph.pl。注意权限修改。 登录主DN节点,查看耗CPU高的进程,查看进程号。 top 参数说明: %us (usr/user):用户空间占用CPU的百分比。 %sy (system):内核空间占用CPU的百分比。 %ni (nice):改变过优先级的进程占用CPU的百分比。 %id (idle):空闲CPU百分比。 %wa (iowait):IO等待占用CPU的百分比(实际CPU并未工作)。 %hi (hardware interrupts):硬中断(Hardware IRQ)占用CPU的百分比。 %si (software interrupts):软中断(Software Interrupts)占用CPU的百分比。 %st (steal):Hypervisor偷取的CPU的百分比。 执行perf 命令(performance 的缩写),它是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(stack)。 通常,它的执行频率是 99Hz(每秒99次),如果99次都返回同一个函数名,那就说明 CPU 这一秒钟都在执行同一个函数,可能存在性能问题。 perf record -e cpu-clock -g -p 28591 <主DN进程号> -- sleep 60<持续60s> Ctrl+c结束执行后,在当前目录下会生成采样数据perf.data(执行时长1分钟即可)。 用perf script工具对perf.data进行解析: perf script -i perf.data &> perf.unfold 将perf.unfold中的符号进行折叠: ./stackcollapse-perf.pl perf.unfold &> perf.folded 最后生成svg图: ./flamegraph.pl perf.folded > cn.svg y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。 x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。 火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。 颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

优秀的个人博客,低调大师

GaussDB WDR报告分析

标题 问题描述 问题现象 告警 业务影响 原因分析 处理方法 步骤 1 步骤 2 步骤 3 步骤 4 步骤 6 步骤 7 步骤 8 步骤9 步骤 10 步骤 11 步骤 12 问题描述 CPU使用率高。 问题现象 出现CPU使用率超过阈值,CPU使用率快速上涨或短时间持续较高水平等现象。 告警 CPU使用率告警。 业务影响 CPU使用率高集群响应变慢。 原因分析 期间业务压力增大导致。 出现CPU耗时较多的SQL。 处理方法 步骤 1 查看监控是某个节点的CPU高还是集群整体CPU高,如果是整体CPU高生成集群级别wdr报告,如果是某个节点则生成节点级wdr报告。 步骤 2 首先查看当前已有的wdr报告快照。 select * from snapshot.snapshot order by start_ts desc; 步骤 3 生成wdr报告需要两个snapshot_id,根据需要对比的两个时间段选取对应的snapshot_id,调整输出格式,gsql界面输入: \a \t \o + 生成文件名(html文件) 步骤 4 如果是要生成节点级的报告则执行: select generate_wdr_report(snapshot_id1, snapshot_id2, ‘all’, ‘node’, 节点名称) 如果要生成集群级别报告则执行 select generate_wdr_report(snapshot_id1, snapshot_id2, ‘all’, ‘cluster’) 其中snapshot_id1和snapshot_id2按照时间从小到大的顺序写入上面分析出来的要生成报告的两个id,节点名称可以通过登录到问题节点执行show pgxc_node_name获取。 对应节点级别报告主要关注Top 10 Events by Total Wait Time和SQL ordered by CPU Time部分,集群级别主要关注SQL ordered by CPU Time部分,在wdr报告中搜索即可。 步骤 6 CPU使用率较低期间的wdr报告和较高期间的wdr报告个一份,这里已节点级别为例,集群级别只需要按照SQL ordered by CPU Time部分分析,分析方式一样。 步骤 7 Top 10 Events by Total Wait Time部分包含两个快照期间的主要等待事件,可以进行大致分析是否存在大量CPU耗时较高的等待事件例如文件数据读取,快照期间主要等待事件,如果通过对比发现CPU高期间的文件读事件明显变多,则说明此期间SQL执行读取数据上上涨导致的CPU耗时上涨。如果是各项等待事件都有一定幅度上涨则可能是集群压力上涨导致,具体是那一部分SQL则需要分析SQL ordered by CPU Time部分。 步骤 8 对比两份报告SQL ordered by CPU Time部分的CPU Time(us)差异,一般对比前10个即可,这里介绍一下此部分的主要构成。 Unique SQL Id:对应unique_sql_id,可以通过此id去数据库查询使用此模板的SQL的其他数据,例如通过summary_statement查询总体语句的调用情况。 Node Name:节点名称。 User Name:用户名。 CPU Time(us):两个快照期间的CPU耗时Calls:两个快照期间的语句调用次数。 Min Elapse Time(us):SQL在内核内的最小运行时间,注意这是整体的最小解析时间不是此快照期间的最小。 Max Elapse Time(us):SQL在内核内的最大运行时间,注意这是整体的最大解析时间不是此快照期间的最小。 Total Elapse Time(us):两个快照期间此语句的SQL在内核内的总运行时间时间。 Avg Elapse Time(us):两个快照期间此语句的SQL在内核内的平均运行时间时间。 Returned Rows:两个快照期间此语句的SELECT返回的结果集行数。 Tuples Read:两个快照期间访问的元组数量。 Tuples Affected:两个快照期间Insert/Update/Delete行数。 Logical Read:两个快照期间的逻辑读数。 Physical Read:两个快照期间的物理读数。 Data IO Time(us):两个快照期间IO上的时间花费。 Sort Count:两个快照期间的排序执行的次数。 Sort Time(us):两个快照期间的排序执行的时间。 Sort Mem Used(KB):两个快照期间的排序过程中使用的work memory大小(单位:KB)。 Sort Spill Count:两个快照期间的排序过程中,若发生落盘,写文件的次数。 Sort Spill Size(KB):两个快照期间的排序过程中,若发生落盘,使用的文件大小(单位:KB)。 Hash Count:两个快照期间的hash执行的次数。 Hash Time(us):两个快照期间的hash执行的时间(单位:微秒)。 Hash Mem Used(KB):两个快照期间的hash过程中使用的work memory大小(单位:KB)。 Hash Spill Count:两个快照期间的hash过程中,若发生落盘,写文件的次数。 Hash Spill Size(KB):两个快照期间的hash过程中,若发生落盘,使用的文件大小(单位:KB)。 SQL Text:这里显示的SQL语句只有一部分,完整的SQL需要点击Unique SQL Id跳转到完整SQL处。 步骤9 如果发现CPU高期间报告的CPU Time(us)前面几个的SQL明显不同且CPU耗时较大,则原因可能为CPU高耗时SQL调用量上涨导致,如果需要分析为什么此SQL的CPU耗时高则可以参考步骤11。 步骤 10 如果两个报告前10个Unique SQL Id对比几乎相同,此时看SQL对应的CPU耗时和ncalls,如果calls上涨则说明是业务压力增大导致的CPU上涨,如果calls没有上涨,则需要分析为什么同一条SQL在此阶段的CPU耗时上涨,跳转步骤11。 步骤 11 在语句和调用次数没有变化的情况下,如果是查询语句看此SQL模板的Returned Rows和Physical Read,如果数量有明显增长则说明此SQL读写的数据量增大导致的CPU压力上涨,一般有两种情况,部分特殊值的情况下扫描数据量大或者计划发生改变导致扫描数据量变大。如果是写语句则可以看Tuples Affected是否有明显增加,一般读取数据比较耗CPU,如果是语句本身影响的主要围绕数据读取方面进行对比。 步骤 12 如果两个快照的数据几乎相同,可以通过火焰图或者长事务做进一步分析。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册