DWS临时内存不可用报错: memory temporarily unavailable
本文分享自华为云社区《DWS临时内存不可用报错: memory temporarily unavailable》,作者:漫天。
1、定位报错的DN/CN
当出现memory temporarily unavailable报错时,首先根据报错信息确认具体是哪个cn/dn报的,如果报错信息没有类似dnxxxx_xxxx这样的信息,就是cn报的,需要去每个cn的日志里排查是哪个cn。
2、DWS813以前的版本内存报错定位
通过free -g或者top命令查看操作系统内存使用情况,确认是操作系统内存耗尽导致,还是cn/dn的内存使用达到限制,导致内存可不用报错。如果没有现场,需要查看操作系统的内存监控。
如果是cn/dn的内存使用达到限制,可以按照以下步骤定位:
步骤一:分析内存视图 pv_total_memory_detail(实例级别内存视图)
select * from pv_total_memory_detail ;
判断(1)如果dynamic_peak_memory大于max_dynamic_memory,说明是cn/dn dynamic内存使用达到上限,导致内存可不用报错。PS:要求历史上dynamic_peak_memory 没有超过max_dynamic_memory,即dynamic_peak_memory 首次超过max_dynamic_memory时,该判断方式有效。
判断(2)dynamic_used_memory接近max_dynamic_memory,大概率是cn/dn dynamic内存使用达到上限,导致内存可不用报错。
判断(3)比较dynamic_used_memory、dynamic_used_shrctx、sctpcomm_used_memory大小,如果dynamic_used_shrctx非常大,说明多线程共享的动态内存太大,如果sctpcomm_used_memory非常大,说明通信库使用的内存非常大,如果dynamic_used_shrctx和sctpcomm_used_memory都很小,说明session占用的内存最多。
步骤二:分析内存视图 pv_session_memory_detail(会话级别内存视图)和活跃会话视图 pg_stat_activity
执行如下SQL-X,查看每个session占用的内存大小:
-- 查看每个session占用的内存大小
select split_part(pv_session_memory_detail.sessid,'.',2) pid,pg_size_pretty(sum(totalsize)) total_size,count(*) context_count from pv_session_memory_detail group by pid order by sum(totalsize) desc;
如果SQL-X查询结果中,某个session占用内存特别高,说明该session上执行的SQL占用内存过高,可以找到对应的SQL,杀掉该语句并进行整改:
-- 查看语句占用内存大小
select b.state, a.sessid, b.query_id, substr(b.query,1,80) as query, sum(totalsize) as totalsize, sum(freesize), sum(usedsize) from pv_session_memory_detail a, pg_stat_activity b where split_part(a.sessid,'.',2) = b.pid group by state,sessid,query_id,query order by totalsize desc limit 100;
-- 到对应的CN节点查杀对应的线程
select pg_terminate_backend(pid);
如果SQL-X查询结果中,每个session占用内存都不大,但session总量大,大概是空闲线程太多导致dynamic内存较高。
-- 查看idle线程数量
SELECT count(*) FROM pg_stat_activity WHERE state='idle';
-- 查看各个线程状态的内存使用
select b.state, sum(totalsize) as totalsize, sum(freesize) as freesize, sum(usedsize) as usedsize from pv_session_memory_detail a, pg_stat_activity b where split_part(a.sessid,'.',2) = b.pid group by b.state order by totalsize desc limit 100;
-- 查询各个应用的内存使用
select b.application_name, sum(totalsize) as totalsize, sum(freesize) as freesize, sum(usedsize) as usedsize from pv_session_memory_detail a, pg_stat_activity b where split_part(a.sessid,'.',2) = b.pid group by b.application_name order by totalsize desc limit 100;
-- 查询各个用户的内存使用
select b.usename, sum(totalsize) as totalsize from pv_session_memory_detail a, pg_stat_activity b where split_part(a.sessid,'.',2) = b.pid group by b.usename order by totalsize desc limit 30;
-- 查看各类型等待线程的数量
select wait_status,wait_event,count(*) from pg_thread_wait_status group by 1,2 order by 3 desc;
如果是空闲用户线程导致dynamic内存高,可以临时清理下空闲用户线程:
gsql -d postgres -p 25308 -c "clean connection to all for database xxx;"
如果是空闲stream线程导致dynamic内存高,可以将参数max_stream_pool改小(stream线程池的作用是缓存stream线程,stream线程是用来进行dn之间数据的传输,一般多表join的时候stream线程会较多),减小max_stream_pool的影响是短查询的性能会降低,对复杂查询几乎没影响。
3、DWS813及以后的版本内存报错定位
可以使用813以前版本的定位方式,也可以使用下面的方式。
步骤一:查看报错日志
813及以上版本会打印出debug的信息,可以通过搜关键字abnormal来找到当时使用最高的语句,找到thread id,再查找thread id 找到对应query id
步骤二:查看topsql
上一步可以找到占用内存最大的sql,如果该sql占用内存确实很大,通过topsql查找对应的query id,从而找到对应的SQL语句,并通过unique_sql_id找到同一类型的SQL,进行分析整改。
如果不是某个sql占用内存太高导致,分析方法和813以前的版本一样。
另外,813及以后的版本可以使用如下方式清理空闲用户线程:
-- 清理空闲用户线程,每次清1/4
-- 显示清理了多少,还剩多少
select * from pgxc_clean_free_conn;
DWS临时内存不可用报错: memory temporarily unavailable的更多相关文章
- myeclipse 内存不够用报错PermGen space 和 An internal error has occurred.
最近项目中又增加了新的模块,项目的代码又多了不少.运行的时候总是报如下错误 Exception in thread "http-apr-80-exec-6" java.lang.O ...
- 内核不中断前提下,Gaussdb(DWS)内存报错排查方法
摘要:本文主要讲解如何在内核保证操作不能中断采取的特殊处理,理论上用户执行的sql使用的内存(dynamic_used_memory) 是不会大范围的超过max_dynamic_memory的内存的 ...
- 华为云GaussDB(DWS)内存知识点,你知道吗?
前言 在日常数据库的使用中,难免会遇到一些内存问题.此次博文主要向大家分享一些华为云数仓GaussDB(DWS)内存的基本框架以及基本视图的使用,以便遇到内存问题后可以有一个基本的判断. 注意,本篇博 ...
- animate is not a function(zepto 使用报错)[转]
animate is not a function(zepto 使用报错) 1.为什么使用zepto写animate报错? 因为zepto默认构建包含: Core, Ajax, Event, Form ...
- [bug]WCF 内存入口检查失败 Memory gates checking failed
bug描述 异常信息:内存入口检查失败,因为可用内存(xxx 字节)少于总内存的 xx%.因此,该服务不可用于传入的请求.若要解决此问题,请减少计算机上的负载,或调整 serviceHostingEn ...
- .net core中Grpc使用报错:The remote certificate is invalid according to the validation procedure.
因为Grpc采用HTTP/2作为通信协议,默认采用LTS/SSL加密方式传输,比如使用.net core启动一个服务端(被调用方)时: public static IHostBuilder Creat ...
- [原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler
[原创]推荐一款强大的.NET程序内存分析工具.NET Memory Profiler 1 官方网站:http://memprofiler.com/2 下载地址:http://memprofiler. ...
- [转] - linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错
linux下使用write\send发送数据报 EAGAIN : Resource temporarily unavailable 错 首先是我把套接字设置为异步的了,然后在使用write发送数据时采 ...
- dubbo 使用zookeeper 出现 Dubbo客户端调用报错NullPointerException
现在将网上的方法总结一下 方法一:.https://blog.csdn.net/u011294519/article/details/81810631 dubbo-provider.xml:提供者先扫 ...
- 内存分析工具-MAT(Memory Analyzer Tool)
内存分析工具-MAT(Memory Analyzer Tool) 首先查看如下代码,main函数中有一个成员变量map,map里被循环放入对象Hanson,hanson持有姓名和age还有friend ...
随机推荐
- 在 Rust 中 gRPC 使用的 protobuf 实现条件编译服务器和客户端(tonic)
前言 Rust 中 gRPC 最优秀的库是 tonic.tonic-build 的默认生成方式是生成一个带有数据类型和客户端与服务端源码,而对于分层应用,客户端尽可能不要知道服务端的代码,同时服务端也 ...
- 【信创】 JED on 鲲鹏(ARM) 调优步骤与成果
项目背景 基于国家对信创项目的大力推进,为了自主可控的技术发展,基础组件将逐步由国产组件替代,因此从数据库入手,将弹性库JED部署在 国产华为鲲鹏机器上(基于ARM架构)进行调优,与Intel (X8 ...
- oracle命令3 冷备份
用户管理的备份:备份脚本要自己写:备份哪些文件要自己选:恢复时要复制那些文件自己判断:恢复需要的日志,自己找: 备份,需要备份保存关键SCN信息的文件:一次完成的备份包括:控制文件,数据文件,日志文件 ...
- 使用卷积神经网络训练手写数字识别模型(CNN)
https://www.cnblogs.com/zylyehuo/ 效果展示 目录结构 README.md # Basic MNIST Example pip install -r requireme ...
- Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法
Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,此处测试代码如下,这里使用add方法: 1 public class main { 2 public static vo ...
- js数据结构--数组
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- Web SSH 的原理与在 ASP.NET Core SignalR 中的实现
前言 有个项目,需要在前端有个管理终端可以 SSH 到主控机的终端,如果不考虑用户使用 vim 等需要在控制台内现实界面的软件的话,其实使用 Process 类型去启动相应程序就够了.而这次的需求则需 ...
- PXE批量网络装机
PXE高效批量网络装机 系统装机的三种引导方式 1.硬盘 2.光驱(u盘) 3.网络启动 pxe 系统安装过程 加载boot loader Boot Loader 是在操作系统内核运行之前运行的一段小 ...
- C++ 入门防爆零教程(上册)
## C++ 入门防爆零教程(上册) ###### C++ Introductory Explosion Proof Zero Tutorial(Volume $1$) 编写者:美公鸡(洛谷账号:b ...
- 【免费】小傅哥 DDD 开发小册
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥. 如果在面试的时候,面试官问你DDD是什么,你怎么解释?是不是感 ...