循序渐进丨openGauss / MogDB 数据库内存占用相关SQL

news2024/11/28 8:46:21

一、内存总体分布

数据库总体内存使用分布

select * from gs_total_memory_detail;

当dynamic_used_memory大于max_dynamic_memory就会报内存不足;如果此时dynamic_used_memory小于max_dynamic_memory,而dynamic_peak_memory大于max_dynamic_memory表明曾经出现内存不足的情况;如果是other_used_memory较大,则只能通过更换Debug版本进一步定位。

如果dynamic_used_shrctx较大,则查询gs_shared_memory_detail视图,观察是哪个MemoryContext使用内存较多;如果dynamic_used_shrctx不大,则查询gs_session_memory_detail视图, 观察是哪个MemoryContext使用内存较多。

openGauss=# select * from gs_total_memory_detail; nodename |       memorytype        | memorymbytes----------+-------------------------+-------------- primary  | max_process_memory      |        12288   GUC参数设置的进程可使用内存大小
 primary  | process_used_memory     |          466   进程实际使用的内存大小,同操作系统res
 primary  | max_dynamic_memory      |         8088   MemoryContext能够使用的内存大小
 primary  | dynamic_used_memory     |          606   MemoryContext实际使用的内存大小
 primary  | dynamic_peak_memory     |          617   MemoryContext使用的内存峰值
 primary  | dynamic_used_shrctx     |          331   SharedMemoryContext能够使用的内存大小
 primary  | dynamic_peak_shrctx     |          331   SharedMemoryContext实际使用的内存大小
 primary  | max_backend_memory      |          348   SharedMemoryContext使用的内存峰值
 primary  | backend_used_memory     |            1
 primary  | max_shared_memory       |         3339   shared_buffers + 元数据
 primary  | shared_used_memory      |          136   进程使用的共享内存大小
 primary  | max_cstore_memory       |          512   cstore_buffers
 primary  | cstore_used_memory      |            0
 primary  | max_sctpcomm_memory     |            0
 primary  | sctpcomm_used_memory    |            0
 primary  | sctpcomm_peak_memory    |            0 
 primary  | other_used_memory       |            0    
 primary  | gpu_max_dynamic_memory  |            0   
 process_used_memory - dynamic_used_memory - shared_used_memory - cstore_used_memory
 primary  | gpu_dynamic_used_memory |            0
 primary | gpu_dynamic_peak_memory | 0
 primary | pooler_conn_memory | 0
 primary | pooler_freeconn_memory | 0
 primary | storage_compress_memory | 0
 primary | udf_reserved_memory | 0
 (24 rows)

图片

二、共享内存分布

共享内存的内存分布

 SELECT  contextname,      pg_size_pretty(sum(totalsize)) totalmem,      pg_size_pretty(sum(usedsize)) usedmem,      count(*) countFROM gs_shared_memory_detailGROUP BY contextnameORDER BY totalmem DESC limit 20;

图片

三、session级别,连接内存等

1.查看连接数分布

select state,count(*) from pg_stat_activity group by state;

图片

2.各状态连接占用总内存情况

SELECT  state,      pg_size_pretty(sum(totalsize))FROM gs_session_memory_detail m, pg_stat_activity aWHERE substring_inner(sessid, position('.'IN sessid)+1)=a.sessionidgroup by state;

图片

3.session内存使用详情

SELECT  contextname,      pg_size_pretty(sum(totalsize)),      pg_size_pretty(sum(freesize))FROM gs_session_memory_detailGROUP BY contextnameORDER BY sum(totalsize) DESC limit 10;

图片

4.session中cacheplan内存占用情况

SELECT  sessid,      pg_size_pretty(sum(totalsize)) sess_cacheplan_sum,      pg_size_pretty(sum(usedsize)) sess_cacheplan_used,      count(*) countFROM gs_session_memory_detailWHERE contextname LIKE '%CachedPlan%'GROUP BY sessidORDER BY 2 DESC limit 20;

图片

5.session中syscache占用情况​​​​​​​

SELECT  sessid,      contextname,      pg_size_pretty(sum(totalsize)) sess_cacheplan_sum,      pg_size_pretty(sum(usedsize)) sess_cacheplan_used, count(*) countFROM gs_session_memory_detailWHERE contextname LIKE '%SessionCacheMemory%'GROUP BY sessid, contextnameORDER BY 2 DESC limit 20;

图片

6.根据线程资源的使用情况定位session连接

如下方式是先根据系统资源定位线程,然后根据线程找到对应 openGauss / MogDB 数据库里的连接。

(1)想要根据资源占用找连接,建议用top命令查看线程id:

top -H -p 数据库进程id

查看到对应耗费资源较多的线程后,根据lwtid字段,找到对应的数据库连接:​​​​​​​

SELECT  pid,      lwtid,      state,      now() - query_start query_duration,      wait_event, queryFROM pg_stat_activity a, dbe_perf.thread_wait_status sWHERE a.pid=s.tid    AND lwtid=xxx;

图片

(2)也可用ps命令找到线程id,不过不方便看资源:

ps -T -p 数据库进程id

如果针对访问数据库的连接,可以筛选条件加上worker。因为一般访问 openGauss / MogDB 的时候,连接的线程名为worker。

 ps -T -p 进程id|grep worker

然后再通过上述SQL查询线程对应的连接。

图片

也可参考线程lwtid,详情参考https://www.modb.pro/db/448030

7.内存类型和query结合​​​​​​​

SELECT  substring_inner(sessid, position('.'
IN sessid)+1) AS sessid, sesstype, contextname, level, parent, pg_size_pretty(sum(totalsize)) AS totalsize, pg_size_pretty(sum(freesize)) AS freesize, pg_size_pretty(sum(usedsize)) AS usedsize, query
FROM gs_session_memory_detail m, pg_stat_activity a
WHERE substring_inner(sessid, position('.'
IN sessid)+1)=a.sessionid
GROUP BY sessid, sesstype, contextname, level, parent, query
ORDER BY totalsize desc;
 

图片

8.查找占用内存较多的连接​​​​​​​

SELECT  a.pid,      a.application_name,      a.client_addr,      a.datname,      a.usename,      pg_size_pretty(sum(usedsize)) AS usedsize,      pg_size_pretty(sum(totalsize)) AS totalsize, a.state, a.queryFROM gs_session_memory_detail s, pg_stat_activity aWHERE substring_inner(sessid, position('.'IN sessid) +1)= a.sessionid    AND usename <> 'omm'    AND pid !=pg_backend_pid()GROUP BY pid, application_name, client_addr, datname, usename, state, queryORDER BY sum(totalsize) desc;

图片

四、内存追踪功能(慎用)

openGauss 提供一个内存追踪的功能,可以追踪当前正在使用的内存上下文的申请位置,能够比较方便地用来定位内存泄漏的问题。其主要由下面两个函数组成。

DBE_PERF.track_memory_context(cxtname text): 开关。入参为需要追踪的上下文名称。
DBE_PERF.track_memory_context_derail(): 查看正在追踪的上下文的细节。

用完后DBE_PERF.track_memory_context(cxtname text)函数需要空值入参,关闭内存追踪功能。

使用示例如下:​​​​​​​

//根据内存视图中查到比较大的、可能存在内存泄漏的context,开启内存追踪,并重新执行相关作业openGauss=# select dbe_perf.track_memory_context('SessionCacheMemoryContext'); track_memory_context---------------------- t(1 row)//查看上下文的申请信息,能看到是在哪个文件的哪一行申请了多少长度。openGauss=# select * from dbe_perf.track_memory_context_detail();       context_name        |    file     | line | size---------------------------+-------------+------+------ SessionCacheMemoryContext | list.cpp    |  104 |   16 SessionCacheMemoryContext | tupdesc.cpp |   62 |  496 SessionCacheMemoryContext | list.cpp    |  107 |   24(3 rows)//关闭内存追踪功能。openGauss=# select dbe_perf.  track_memory_context(''); track_memory_context----------------------(1 row)

图片

关于作者

阎书利,云和恩墨数据库技术顾问,PostgreSQL ACE,《快速掌握 PostgreSQL 版本新特性》一书副主编,中国PG分会认证讲师,PGfans 2021年度MVP,Gauss松鼠会2021年度优秀会员,拥有PGCM、OCP(MySQL)等十多项数据库认证,目前主要从事于 PostgreSQL、openGauss、MogDB 的运维以及数据库迁移改造工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227634.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于vite和vue3、 eslint、prettier、stylelint、husky规范

前言 在现代的前端开发中&#xff0c;代码规范非常重要。它可以提高团队的协作效率&#xff0c;减少代码错误&#xff0c;使代码更易于维护。为了实现代码规范化&#xff0c;我们可以使用一些工具来辅助我们的开发流程&#xff0c;包括eslint、prettier、stylelint、husky&am…

MYSQL-SQL-03-DQL(Data Query Language,数据查询语言)(单表查询)

DQL&#xff08;数据查询语言&#xff09; DQL英文全称是Data Query Language(数据查询语言)&#xff0c;数据查询语言&#xff0c;用来查询数据库中表的记录。 查询关键字: SELECT 在一个正常的业务系统中&#xff0c;查询操作的频次是要远高于增删改的&#xff0c;当我们去访…

宇音天下最新力作 | VTX356语音识别合成芯片问世

北京宇音天下科技有限公司&#xff0c;依托在语音技术领域的丰富经验和技术积累&#xff0c;成功推出了一款具有里程碑意义的语音识别合成芯片——VTX356。这款芯片的问世&#xff0c;不仅彰显了公司在智能语音处理领域的专业实力&#xff0c;也预示着智能家居、车载电子、智能…

开始菜单增强工具 StartAllBack v3.7.10.4910 直装激活版

StartAllBack中文版(StartIsBack)是一款Win11开始菜单增强工具&#xff0c;可以为Windows11恢复经典样式的Windows7主题风格开始菜单和任务栏&#xff0c;功能包括了&#xff1a;自定义开始菜单样式和操作&#xff0c;个性化任务栏及资源管理器等。 详细功能 √ 全面更新中文语…

java中Scanner的nextLine和next方法

思考&#xff0c;输入1 2 3 4 5加上enter&#xff0c;输出什么 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int[][] m new int[2][2];for (int i 0; i < 2; i) {for (int j 0; j < 2;…

DataX数据同步

背景&#xff1a; 业务需求中&#xff0c;经常会有同步各种系统或者数仓的数据到自己的库进行使用。比如从oracle同步到自己的mysql&#xff0c;自己写代码如果数据量大需要考虑多线程并发等。最近使用了阿里的Datax项目&#xff0c;操作简单并高效。 Datax Datax概述&支…

如何使用的是github提供的Azure OpenAI服务

使用的是github提供的Azure OpenAI的服务gpt-4o 说明&#xff1a;使用的是github提供的Azure OpenAI的服务&#xff0c;可以无限薅羊毛。开源地址 进入&#xff1a; 地址 进入后点击 右上角“Get API key”按钮 点击“Get developer key” 选择Beta版本“Generate new to…

高可用HA软件

高可用HA&#xff08;High Availability&#xff09;软件在分布式系统架构设计中至关重要&#xff0c;它们能够减少系统停机时间&#xff0c;确保应用程序持久、不间断地提供服务。以下是四款常用的高可用HA软件介绍&#xff1a; Keepalived Keepalived起初是为LVS&#xff08;…

Python小白学习教程从入门到入坑------第十八课 异常模块与包【上】(语法基础)

一、异常 在Python中&#xff0c;异常&#xff08;Exception&#xff09;是一种用于处理在程序运行时可能发生的错误情况的机制 异常允许程序在检测到错误时不是简单地崩溃&#xff0c;而是能够优雅地处理这些错误&#xff0c;可能包括记录错误信息、清理资源、或者向用户提…

如何使用非官方的根组件

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性3. 示例代码4. 内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经介绍过GetMaterialApp组…

Python(pandas库3)

函数 随机抽样 语法&#xff1a; n&#xff1a;要抽取的行数 frac&#xff1a;抽取的比例&#xff0c;比如 frac0.5&#xff0c;代表抽取总体数据的50% axis&#xff1a;示在哪个方向上抽取数据(axis1 表示列/axis0 表示行) 案例&#xff1a; 输出结果都为随机抽取。 空…

Qt/C++ 调用迅雷开放下载引擎(ThunderOpenSDK)下载数据资源

目录导读 前言ThunderOpenSDK 简介参考 xiaomi_Thunder_Cloud 示例ThunderOpenSDK 下载问题 前言 在对以前老版本的exe执行程序进行研究学习的时候&#xff0c;发现以前的软件是使用的ThunderOpenSDK这个迅雷开放下载引擎进行的项目数据下载&#xff0c;于是在网上搜索一番找到…

Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍

背景 allWebDesktop控件是一款方便用户在线打开各类文档的OA办公控件。它设计比较轻巧&#xff0c;充分利用计算机程序资源打开文档&#xff0c;并将程序窗口嵌入到allWebDesktop控件区域内&#xff0c;从而实现浏览器内打开各类文档效果。 allWebPlugin中间件是一款为用户提供…

【工具】Charles对360浏览器抓包抓包

Charles 和 switchy sharp 配合&#xff0c;可以对 Chrome 进行抓包也可以配合对360安全浏览器抓包。 本文以Windows 电脑中的配置为例&#xff0c;介绍如何实现抓包。&#xff08;Mac中操作基本一致&#xff09; 1.安装Charles 可根据自己的电脑下载对应的版本&#xff1a;…

【C++初阶】模版入门看这一篇就够了

文章目录 1. 泛型编程2. 函数模板2. 1 函数模板概念2. 2 函数模板格式2. 3 函数模板的原理2. 4 函数模板的实例化2. 5 模板参数的匹配原则2. 6 补充&#xff1a;使用调试功能观察函数调用 3. 类模板3 .1 类模板的定义格式3. 2 类模板的实例化 1. 泛型编程 在C语言中&#xff0…

【JavaEE初阶】网络原理—关于TCP协议值滑动窗口与流量控制,进来看看吧!!!

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP协议的重要的机制“连接的建立和断开”~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1…

5. STM32之TIM实验--输出比较(PWM输出,电机,四轴飞行器,智能车,机器人)--(实验5:PWM驱动直流电机)

作者:Whappy,日期:2024.10.29,决战STM32 直流电机的控制就比较简单了,只有数据线和地线,正接正转,反接反转,为了方便,本实验采用H桥电路来控制电机的正反转,H桥电路也很简单,就是4个MOS管构成的2路推挽输出电路. 注:基本上大功率器件,单片机基本上是无法驱动的,都是要靠一部分…

家用wifi的ip地址固定吗?换wifi就是换ip地址吗

在探讨家用WiFi的IP地址是否固定&#xff0c;以及换WiFi是否就意味着换IP地址这两个问题时&#xff0c;我们首先需要明确几个关键概念&#xff1a;IP地址、家用WiFi网络、以及它们之间的相互作用。 一、家用WiFi的IP地址固定性 家用WiFi环境中的IP地址通常涉及两类&#xff1a…

Python——自动化发送邮件

在数字化时代&#xff0c;电子邮件是商务沟通和个人联络的重要工具。自动化邮件发送可以节省时间&#xff0c;提高效率。Python&#xff0c;作为一种强大且灵活的编程语言&#xff0c;提供了多种库来支持邮件的自动化发送。本文将详细介绍如何使用Python的smtplib和email库来编…

DRC-20开发指南:新一代区块链代币标准

区块链技术自比特币诞生以来&#xff0c;迅速发展成为全球科技与金融领域的创新中心。随着区块链技术的普及&#xff0c;数字代币作为一种新兴的数字资产类别&#xff0c;逐渐为更多人所熟知。从ERC-20到BRC-20&#xff0c;代币标准的演进一直在推动着区块链生态系统的创新与发…