GaussDB(DWS)内存监控解密

举报
wangjx_huawei 发表于 2021/08/30 19:58:58 2021/08/30
【摘要】 GaussDB(DWS)提供了监控当前CN实例内存使用状态的视图及监控整个集群内存使用状态的视图。

GaussDB(DWS)提供了监控当前CN实例内存使用状态的视图及监控整个集群内存使用状态的视图:

  1. 以操作系统用户omm登录CN所在主机,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
  2. 使用如下命令连接数据库。
    gsql -d postgres -p 25308

    postgres为需要连接的数据库名称,25308为CN的端口号。

    连接成功后,系统显示类似如下信息:

    gsql ((GaussDB 8.1.0 build af002019) compiled at 2020-01-10 05:43:20 commit 6995 last mr 11566 )
    Non-SSL connection (SSL connection is recommended when requiring high-security)
    Type "help" for help.
    
    postgres=#
  3. 查看内存使用情况。查看当前CN的内存使用情况。
    1
    postgres=# SELECT * FROM pg_total_memory_detail;
    

    查询pgxc_total_memory_detail视图查看整个集群的状态,必须具有sysadmin权限。
    1
    postgres=# SELECT * FROM pgxc_total_memory_detail;
    

    用户可以通过视图pg_shared_memory_detail查询共享内存上下文信息:

  4. GaussDB 200 内存管理演进。
       V1R3 – 基于原生的pgxc内存上下文进行内存管理
       V1R5 – 引入jemalloc开源库,替换glibc中的内存分配和释放,减少内存碎片
       V1R5 – 引入逻辑内存管理,控制进程内存使用,避免出现系统OOM问题;多种内存上下文,满足不同场景需求
       V1R6 – 引入ASAN(Address Sanitizer)开源库,在Debug版本下,定位内存泄露和内存越界问题
       V1R8 – 丰富内存出错时的定位信息;引入内存随机故障机制,结合ASAN快速发现内存使用问题
  5. 逻辑内存管理
    通过数据库进程内部记账,控制单进程内存使用的上限;
    可统计进程总体使用、共享和非共享内存上下文使用及重点模块内存使用(通信库、pooler等);
    可统计Session上通用内存上下文使用,通过explain performance或pgxc_wlm_session_statistics等查询;
    逻辑内存的生效机制
       enable_memory_limits为on,并且max_process_memory减掉存储预留内存 > 2G

  6. 视图 pv_total_memory_detail查询数据库进程内存使用,便于分析内存 失败后问题;各字段含义如下
       max_process_memory: 实例可用最大内存,GUC参数max_process_memory相同;OM会自动计算给出
       process_used_memory: 实例正在使用的物理内存;操作系统命令top中的RES数值相同
       max_dynamic_memory: 实例可以动态申请的最大内存大小,由 max_process_memory – max_shared_memory – max_cstore_memory计算获得
       dynamic_used_memory: 逻辑内存记账中,所有内存分配的当前数值,包括所有内存上下文和通信库动态分配的内存;
    达到max_dynamic_memory 时,报        错:memory is temporarily unavailable
       dynamic_peak_memory: 逻辑内存机制的最大数值,从节点启动至今
       dynamic_used_shrctx: 逻辑内存记账中,仅共享内存上下文内存分配的当前数值;属于dynamic_used_memory的一部分
       dynamic_peak_shrctx: 逻辑内存记账中,共享内存上下内存分配的最大数值
       max_shared_memory: 实例中共享内存预占内存的大小,包含shared_buffers,比该数值大(还有其他数据结构也是共享内存)
       shared_used_memory:实例中共享内存正在使用的大小,操作系统top的SHR数值;行存情况下,该数值较大
       max_cstore_memory/ cstore_used_memory : 实例中列存储预占/正在使用的内存,用于数据缓存,GUC参数cstore_buffers相同
       cstore_used_memory : 实例中列存储正在使用的内存,内部统计获得
       max_sctpcomm_memory: 通信库允许使用的内存大小,由GUC参数comm_usable_memory设置
       sctp_used_memory: 通信库正在使用的内存统计
       sctp_peak_memory: 通信库最大使用的内存
       other_used_memory:不在统计之内的内存,
    由 process_used_memory – dynamic_used_memory – shared_used_memory –cstore_used_memory获得;        通常不超过2G,若过大,则说明存在第三方组件的内存分配出现泄漏

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。