GaussDB(DWS)内存监控解密
GaussDB(DWS)提供了监控当前CN实例内存使用状态的视图及监控整个集群内存使用状态的视图:
- 以操作系统用户omm登录CN所在主机,执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。
- 使用如下命令连接数据库。
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=#
- 查看内存使用情况。查看当前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查询共享内存上下文信息:
- GaussDB 200 内存管理演进。
V1R3 – 基于原生的pgxc内存上下文进行内存管理
V1R5 – 引入jemalloc开源库,替换glibc中的内存分配和释放,减少内存碎片
V1R5 – 引入逻辑内存管理,控制进程内存使用,避免出现系统OOM问题;多种内存上下文,满足不同场景需求
V1R6 – 引入ASAN(Address Sanitizer)开源库,在Debug版本下,定位内存泄露和内存越界问题
V1R8 – 丰富内存出错时的定位信息;引入内存随机故障机制,结合ASAN快速发现内存使用问题 -
逻辑内存管理
通过数据库进程内部记账,控制单进程内存使用的上限;
可统计进程总体使用、共享和非共享内存上下文使用及重点模块内存使用(通信库、pooler等);
可统计Session上通用内存上下文使用,通过explain performance或pgxc_wlm_session_statistics等查询;
逻辑内存的生效机制
enable_memory_limits为on,并且max_process_memory减掉存储预留内存 > 2G -
视图 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,若过大,则说明存在第三方组件的内存分配出现泄漏
- 点赞
- 收藏
- 关注作者
评论(0)