排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
PG数据库内存告警了怎么分析
PG数据库内存告警了怎么分析
白鳝的洞穴
2023-02-10
531
前几天写了CPU分析与IO分析的文章,本来昨天想再凑一个内存分析的,不过因为昨天一大早就去拜访客户了,所以今天补上。今天早上本来和优诺的傲寒约好了去他那里取取经,听听他对智能化运维的看法,不过因为一些其他安排临时取消了,十分遗憾。
PG数据库遇到内存问题要立即进行分析的场景并不多,因为大多数PG数据库的内存使用率过高的报警并不意味着内存使用情况异常,内存真的不够用了。因为PG数据库是使用DOUBLE BUFFERING机制的,大量的内存很可能被BUFFER/CACHE占用了。
上面的free命令可以看到32G内存使用了15G多,但是free只剩下599M了,BUFF/CACHE占了15G多。不过如果我们看available,有9G多,当前这个PG服务器的内存是充足的。从这个例子上看到,我们看fee命令的结果的时候,不应该看free,看available更为准确。
/proc/meminfo可以更详细的看到OS的内存情况,我们可以关注红框里的几个数字。Dirty是FILE CACHE中尚未写入磁盘的脏数据,是无法快速丢弃的内存,如果这个指标持续较高,那么说明OS的回写机制或者磁盘存在性能问题,是需要关注的。PageTalbes如果比较大,对于PG数据库来说,很可能是配置了较大的shared_buffers,但是没有启用HugePages,这样除了会影响PG数据库访问内存的性能外,还会占据大量的不必要的内存。AnonHugePages指标大于零说明没有关闭透明大页,而且已经使用了透明大页,对于PG、Oracle等数据库来说,透明大页的缺点大于优点,会引起内存碎片,建议关闭。另外需要关注的是SWAP的使用率,如果FREE内存很大,但是SWAP使用率超过20%,很可能是OS的NUMA内存方面的配置存在问题,没有全局分配内存。
遇到PG数据库的空闲内存不足的问题,首先通过这些机制分析OS内存是否真的存在风险,如果没有发现明显的风险,暂时就不需要做进一步的分析了。如果真的存在风险,我们还可以继续在OS层面查找。
ps aux –sort -rss |head -20命令可以查出rss使用最高的20个进程。然后找出存在问题的进程,用smem做进一步分析。
如果找到了存在问题的进程,可以用smem进一步去做分析。其中USS是进程私有内存,PSS是私有内存+共享内存的总和。
如果在OS层面找到了存在问题的进程,那么可以使用上面的语句去查找其PG会话的信息,进一步进行定位。一般情况下,PG会话占用较多的内存可能是做VACUUM、ANALYZE、排序,表连接、内存临时表等操作。
如果不存在某个进程使用内存过多,而是大量的进程都占用差不多的内存,那么很可能是数据库并发执行某类SQL,使用了排序,表连接等临时内存分配。这时候就要去分析数据库的性能是否存在问题,导致了某类SQL或者某条SQL并发执行量较大。亦或是某条SQL的执行计划出现了错误,导致执行时间过长,并发执行量过大,占用了大量物理内存。
数据库
内存碎片
文章转载自
白鳝的洞穴
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨