文档

Hologres管控台的监控指标

更新时间:

本文为您介绍Hologres各监控指标的含义。通过了解这些监控指标,您可以根据业务需求选择适合的指标,实时查看当前实例的资源使用情况和SQL语句的执行情况,及时识别系统报错并处理实例异常。

Hologres管理控制台提供的监控指标如下:

需要您注意的是:

  • 目前Hologres V0.8版本,无连接数(个)指标。

  • 目前Hologres V0.9.27以下版本,如果当前实例中表数量超过1000时,由于指标量太大,实时导入RPS(记录/秒)指标可能会存在丢失指标或者指标值过低的情况,影响准确率。

说明

您可以调用云监控的API接口获取Hologres监控指标的监控信息,详情请参见调用方式

管控台监控汇报原理

Hologres管控台监控页面提供实例级别、Query运行级别以及实例监控度等维度的指标信息,可以通过查看到当前实例的资源使用情况、SQL的执行情况,随时对实例管理与监控,识别系统瓶颈,及时处理实例异常情况。自2023年9月开始,管控台监控服务底层技术升级,升级后的监控指标汇报原理如下:

  • 1天内间隔按照1分钟聚合

  • 5天内间隔按照5分钟聚合

  • 10天内间隔按10分钟聚合

  • 15天内间隔按照15分钟聚合

  • 30天内间隔按照30分钟聚合

CPU使用率(%)

CPU使用率包含实例CPU使用率和Worker节点CPU使用率。

  • 实例CPU使用率

    实例CPU指实例整体的CPU使用率,代表实例的计算负载情况。

    • 在没有查询的时候,后台常驻进程或者异步执行的Compaction都可能占用CPU,因此实例无查询负载时,有少量CPU使用率是正常现象。

    • Hologres因其设计原理可以充分发挥多核并行计算的能力,通常来说单个查询可以迅速将CPU使用率提高到100%,这说明计算资源得到了充分利用。

    • 当实例CPU使用率长期接近100%时(例如CPU使用率连续3小时满载100%,或者连续12小时达到90%以上等),说明实例负载非常高,这通常意味着CPU资源成为了系统的瓶颈,需要分析具体的业务场景和查询,以判断原因。可以从以下几方面判断:

      • 是否有比较大的离线数据导入(INSERT),且数据规模还在日渐增长。

      • 是否有高QPS的查询或写入,共同用满了CPU。

      • 是否有上述或上述场景以外的混合负载。

    • 如果确定是业务场景需要,将资源用满,可以对实例进行扩容,以适应更复杂的查询或更大的数据量。

  • Worker节点CPU使用率

    Worker节点CPU指实例内每个Worker的CPU使用率,代表每个Worker的计算负载情况。Hologres根据实例规格,提供不同的Worker节点数,详情见实例规格概述

    说明

    2022年7月新增监控指标。

    • 当前指标只有Hologres V1.1及以上版本支持显示。

    • 当实例内所有Worker节点CPU使用率都长期接近100%时,说明实例的负载非常高,需要根据业务情况合理的优化资源使用或者扩容。

    • 当实例只有部分Worker节点CPU水位比较高,部分Worker节点CPU水位较低,说明Worker资源有倾斜,常见倾斜原因以及排查方法请参见监控指标常见问题

内存使用率(%)

内存使用率包含实例内存使用率和Worker节点内存使用率。

  • 实例内存使用率

    实例内存使用率代表实例整体的内存综合使用率。

    • Hologres的内存资源采用预留模式,在没有查询的时候,也会有数据表的元数据、索引、数据缓存等加载到内存中,以便加快检索和计算,此时内存使用率不为零是正常情况。理论上,在无查询的情况,内存使用率达到30%-40%左右都属于正常情况。

    • 当内存使用率稳定增长,长期接近80%时,通常意味着内存资源可能成为了系统的瓶颈,可能会影响实例的稳定性或性能。

    • 可以根据业务综合判断是元数据、缓存、计算中谁占用了较高的内存,从而做相应的优化。详情可以参见OOM常见问题排查指南

  • Worker节点内存使用率

    Worker节点内存使用率指实例内每个Worker的内存使用率,代表每个内存的计算负载情况。Hologres根据实例规格,提供不同的Worker节点数,详情见实例规格概述

    说明

    2022年7月新增监控指标。

    • 当前指标只有1.1及以上版本支持显示。

    • 当实例內所有Worker节点的内存水位都长期接近80%时,说明实例的负载非常高,需要根据业务情况合理的优化资源或者扩容。

    • 当实例只有部分Worker节点内存水位比较高,部分Worker节点内存水位较低,说明Worker资源有倾斜,常见倾斜原因以及排查方法请参见监控指标常见问题

实例内存分布使用率(%)

内存会分为几个部分,包括系统(system)、元数据(meta)、缓存(cache)、计算(query)、后端进程(background)等。从Hologres V2.0.15版本开始,支持实例内存分布使用率的监控指标,可以通过该指标,查看内存的分布情况,从而根据内存的分布情况针对性优化。主要包括以下几个指标:

  • System:系统内存,指系统组件运行时占用的内存,包括Holohub、Gateway、Frontend、FE等,其中FE会包括FE Master和FE Query,因此system内存也会跟随query的运行而波动。

  • Cache:缓存占用的内存,缓存的内存主要包括:

    • SQL相关的缓存,比如result cache、block cache等,与SQL有关,如果SQL有命中缓存(例如通过explain analyze查看Physical read bytes字段,数据越小说明缓存命中越大),将会提升查询性能。但SQL的缓存也有一定的上限。

    • Meta缓存,包括表的Schema Meta、文件的Meta等,为了Query的高效执行,Hologres的存储引擎会预先将Meta相关的数据加载进缓存中,从而减少Meta的冷访问,提升查询性能。

    • 缓存有固定大小,一搬占用实例总内存的30%左右。当实例没有查询时,缓存也有一定的占用,主要是Meta占用的缓存。

  • Meta:元数据、文件等占用的内存,元数据的内存使用采用Lazy Open模式,即频繁被访问的元数据会常驻内存中,未被访问的元数据则不会放在内存中,以此来减少元数据对内存的占用。一般建议meta占用的内存维持在总内存的30%以内。如果meta的内存较高,说明实例中访问的文件数较多,或者分区表较多,可以通过表统计信息查看与分析对实例中的表做相关治理。

  • Query:代表执行SQL时消耗的内存,与Query的复杂度、并发度等正相关。主要包括Fixed Plan、HQE、SQE等执行SQL消耗的内存。

    • Query计算的内存会采用弹性机制,即单个Worker最低使用20 GB,最高使用根据实例的总空闲内存浮动,如果其他分类中内存占用较多,会导致计算部分弹性的内存越少。

    • 如果Query占用的内存较多,甚至出现了OOM的现象,说明Query较复杂或者并发度较高,建议对Query调优或者对实例扩容,以避免实例高水位运行,详情请参见优化内部表的性能

  • Background:后台任务占用的内存,包括Compaction、Flush等任务,一般Background消耗的内存较少,约在5%以内。但如果对表修改了索引、有比较大的写入或更新等,Background的内存占用将会上升,随任务的结束而下降。

  • Memtable:内存表占用的内存,在Hologres中Memtable(内存表)主要用于存储有实时写入、更新、删除等操作完成之后的表数据。一般Mentable的内存占用在5%以内。

实例存储用量(字节)

实例存储用量指实例存储的数据占用逻辑磁盘的大小,是所有DB存储用量的总和。1GiB=1024MiB=1024*1024kiB。Hologres存储用量可以持续增加,没有硬限制。

  • 包年包月付费模式下购买的实例存储用量用完后,超出部分会自动转为按量计费,不会影响系统稳定性与使用。建议您超出存储资源之后及时对存储进行升级配置,或者及时清理无用的数据,避免造成不必要的更昂贵的存储费用。

  • 通过如下SQL语句,可以分析各个数据库、内部表的存储占用大小。

    说明

    pg_relation_size和pg_database_size的结果单位是Byte,pg_size_pretty的结果单位是KB、MB或者GB,根据数据量大小自动做转换。在PG的单位转换标准中,1GB=1024MB=1024*1024KB。

    select pg_database_size('dbname');       -- 查看DB存储大小
    select pg_relation_size('tablename');    -- 查看表存储大小
    
    -- 查看所有表按照存储占用大小排序
    select relname as "Table",
           pg_relation_size(relname)/1024/1024/1024 as "Size(GB)"
    from pg_tables
    where schemaname = 'public'
    order by pg_relation_size(relname)/1024/1024/1024;

连接数(个)

连接数包括实例连接数和Worker节点连接数。Hologres根据实例的规格,设置不同的默认总连接数,详情见实例规格概述

  • 实例连接数

    实例连接数包括实例的使用连接数(个)和FE节点连接数最高使用率(%),其中:

    • 实例连接数(个):代表实例中已经使用的总SQL连接数,包括active、idle等各种状态的JDBC/PSQL等连接。

    • FE节点连接数最高使用率(%):代表使用率最高的FE(Frontend)节点的使用率,汇报每个Frontend节点的最大值,即Max(frontend_connection_used_rate),这样可以更加方便的知道是否使用的连接数即将超过某个Frontend节点的最大连接数,造成无法连接的情况。

      说明

      2022年7月新增监控指标。

      • 多个Frontend节点之间采用轮询策略(Round Robin),新建连接依次与不同Frontend节点建立物理连接。

      • 如果您发现连接数过多,甚至达到超出max_connections的地步,或者遇到如下错误之一,说明系统的连接数已达上限,意味着您需要检查您的应用是否存在连接数泄漏情况并参考连接数管理进行连接的释放。

        产生FATAL: sorry, too many clients already connection limit exceeded for superusers报错。
        
        产生FATAL: remaining connection slots are reserved for non-replication superuser connections报错。
  • FE节点连接数

    FE节点连接数代表实例中每个 Frontend(FE)节点的连接使用个数,包括active、idle等各种状态的JDBC/PSQL等连接。

    说明

    2022年7月新增监控指标。

    • 当前指标只有1.1及以上版本支持显示。

    • 每个FE节点的总连接数上限默认是128个,总数参考实例规格概述

    • 当每个FE节点的连接数长期接近最大值时,说明实例的连接数使用较多,可以根据业务情况查看是空闲连接还是业务连接,请参见连接数管理,并根据业务情况及时清理空闲连接或者扩容获取更多的连接。

    • 当部分Worker节点连接数较高,部分Worker节点的连接数较低时,说明实例的连接负载不均,通过连接数管理查看空闲连接,并及时清理,以缓解连接负载不均的情况。

QPS(个/秒)

QPS指平均每秒执行SELECT、INSERT、UPDATE或DELETE 4种SQL语句的次数。

  • 该指标每20秒上报一次,如果20秒内仅执行了一条SQL语句,则SQL语句的QPS将在该20秒的数据点显示1/20=0.05。

  • 如果是insert do update,则记为update,如果是insert do nothing,则记为insert

Query延迟(毫秒)

Query延迟指执行SELECT、INSERT、UPDATE或DELETE 4种SQL语句的平均延迟(即响应时间)。您可以通过查看慢Query日志分析Query延迟,更多内容请参见慢Query日志查看与分析。如果是insert do update,则记为update,如果是insert do nothing,则记为insert

实时导入RPS(记录/秒)

实时导入RPS指每秒通过SQL语句或FixedPlan方式导入或更新的数据记录条数。仅在主实例中显示该指标。

Insert RPS表示使用外部表批量导入、使用COPY语句批量导入或Hologres表间插入数据的导入速率。

Update RPS表示通过执行更新或删除SQL语句,每秒更新或删除的记录条数。如果是insert do update,则记为update,如果是insert do nothing,则记为insert

SDK RPS表示通过FixedPlan方式写入Hologres的每秒数据写入或更新的条数。SDK方式包括:

IO吞吐(字节)

IO吞吐指Hologres实例的IO吞吐量。该指标描述实例的读写数据量,反映实例的读写繁忙程度。您可以从IO层面了解实例的压力情况和负载变化,及时诊断问题。

正在运行Query持续时长

正在运行Query时长指实例中正在运行的Query持续时长,默认汇报当前时刻运行时长最长的Query。

说明

2022年7月新增监控指标。

  • 当前指标只有1.1及以上版本支持显示。

  • Hologres是分布式系统,根据实例的规格不同会有不同的Worker节点。Query运行时会在不同的Worker节点随机分发。正在运行的Query持续时长会根据每个Worker节点上Query运行时长,汇报当前时刻运行时长最长的Query,例如当前时刻不同Worker节点分别有10min,5min,30s的Query正在运行,此时正在运行的Query持续时长将会显示为10min。

  • 可以根据Query的运行时长,并结合活跃Query或者慢Query日志判断Query运行时长是否合理,详情请参见Query管理慢Query日志查看与分析。根据文档排查并解决Query运行时间较长的问题,及早解决死锁、卡住等问题。

说明

管控台的指标是20s汇报一次,因此指标中正在运行的持续时长 x轴开始时间与Query真正开始的时间有误差,所以该指标仅作为异常情况问题排查的辅助指标,即通过该指标快速定位到实例有运行时长较长的Query,作为自运维的辅助指标,不提供精确Query运行时间。

失败Query数(次/秒)

失败Query数代表实例內平均每秒SQL语句失败的次数,包括SELECT、INSERT、UPDATE和DELETE、OTHER共5种SQL语句。

说明

2022年7月新增监控指标。

  • 指标每20s汇报一次,如果20s内只有一个SQL语句执行,那么SQL语句QPS将在该20s的数据点会显示1/20=0.05。

  • 根据失败的Query类型和次数,在慢Query日志中查找失败的Query并分析原因,以提高系统的可用性,详情请参见慢Query日志查看与分析

主从实例同步延迟(毫秒)

Hologres提供共享存储的多子实例高可用部署,一个主实例可以配置4个子实例,详细使用见主从实例读写分离部署(共享存储)。主从实例同步延迟代表从实例读取主实例数据时的延迟(毫秒)。

说明

2022年7月新增监控指标。

  • 仅Hologres V1.1及以上版本支持配置主从实例,仅子实例显示该指标,主实例默认不显示。

  • 只有在子实例绑定了主实例之后,该指标会显示数据(0ms),当主实例有数据写入时,子实例的同步延迟会出现数据波动。

  • 一般情况下,主从实例的同步延迟毫秒级,当实例偶尔出现延迟抖动时,一般情况为主实例在做DDL等元数据修改的操作,可忽略。若长期延迟较大(大于1秒),一般情况为实例水位较高,资源不足,可以结合CPU、内存等水位情况综合评估,并适当扩容以减少延迟。实例重启或者升级期间,同步延迟可能增加到分钟级别,并会自动恢复。

常见问题诊断

文档汇总了使用监控指标中的常见问题,可以帮助业务快速诊断、定位问题,以及对应的解决办法,提升自运维能力,详情见监控指标常见问题

  • 本页导读 (1)
文档反馈