首页 > 数据库 >如何分析PG数据库内存告警

如何分析PG数据库内存告警

时间:2023-03-19 18:35:28浏览次数:44  
标签:分析 数据库 PG SQL 告警 OS 内存

导读 PG数据库遇到内存问题要立即进行分析的场景并不多,因为大多数PG数据库的内存使用率过高的报警并不意味着内存使用情况异常,内存真的不够用了。因为PG数据库是使用DOUBLE BUFFERING机制的,大量的内存很可能被BUFFER/CACHE占用了。

如何分析PG数据库内存告警如何分析PG数据库内存告警

​前几天写了CPU分析与IO分析的文章,本来昨天想再凑一个内存分析的,不过因为昨天一大早就去拜访客户了,所以今天补上。今天早上本来和优诺的傲寒约好了去他那里取取经,听听他对智能化运维的看法,不过因为一些其他安排临时取消了,十分遗憾。

PG数据库遇到内存问题要立即进行分析的场景并不多,因为大多数PG数据库的内存使用率过高的报警并不意味着内存使用情况异常,内存真的不够用了。因为PG数据库是使用DOUBLE BUFFERING机制的,大量的内存很可能被BUFFER/CACHE占用了。

如何分析PG数据库内存告警如何分析PG数据库内存告警

上面的free命令可以看到32G内存使用了15G多,但是free只剩下599M了,BUFF/CACHE占了15G多。不过如果我们看available,有9G多,当前这个PG服务器的内存是充足的。从这个例子上看到,我们看fee命令的结果的时候,不应该看free,看available更为准确。

如何分析PG数据库内存告警如何分析PG数据库内存告警

/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层面查找。

如何分析PG数据库内存告警如何分析PG数据库内存告警

ps aux –sort -rss |head -20命令可以查出rss使用最高的20个进程。然后找出存在问题的进程,用smem做进一步分析。

如何分析PG数据库内存告警如何分析PG数据库内存告警

如果找到了存在问题的进程,可以用smem进一步去做分析。其中USS是进程私有内存,PSS是私有内存+共享内存的总和

如何分析PG数据库内存告警如何分析PG数据库内存告警

如果在OS层面找到了存在问题的进程,那么可以使用上面的语句去查找其PG会话的信息,进一步进行定位。一般情况下,PG会话占用较多的内存可能是做VACUUM、ANALYZE、排序,表连接、内存临时表等操作。

如果不存在某个进程使用内存过多,而是大量的进程都占用差不多的内存,那么很可能是数据库并发执行某类SQL,使用了排序,表连接等临时内存分配。这时候就要去分析数据库的性能是否存在问题,导致了某类SQL或者某条SQL并发执行量较大。亦或是某条SQL的执行计划出现了错误,导致执行时间过长,并发执行量过大,占用了大量物理内存。www.linuxprobe.com

标签:分析,数据库,PG,SQL,告警,OS,内存
From: https://www.cnblogs.com/linuxprobe19/p/17211084.html

相关文章

  • SQL Server 2022 新特性 - 内存授予反馈:持久性和百分比授予
    内存授予反馈(MGF)是SQLServer中的一项现有功能,SQLServer2022中提供了两项重要改进:反馈持久性和百分比授予反馈。这两个功能增强了内存授予反馈的好处,因为它已经存在......
  • 如何更换内存条
    title:如何更换内存条date:2023-03-1812:00:00categories:小技能tags:内存条内存拆机如何更换内存条三分钟教你给笔记本升级安装内存条,惠普745G5升级......
  • 熟悉JVM吗?为什么新生代内存需要有两个Survivor区?
    在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区?为什么要有Survivor区如果没有Survivor,Eden区每进行一次MinorGC,存活的对象就会被送到老年代。老年代很快被......
  • 谈谈面试必问的Java内存区域(运行时数据区域)和内存模型(JMM)
    Java内存区域和内存模型是不一样的东西,内存区域是指JVM运行时将数据分区域存储,强调对内存空间的划分。而内存模型(JavaMemoryModel,简称JMM)是定义了线程和主内存之间......
  • 内存淘汰策略
    Redis内存满了怎么办?Redis的内存到达maxmemory了之后会开启内存淘汰策略一个键是过期的,那么它到了过期时间之后是马上从内存中被删除呢?不是,而是指定时间扫描一次,以减轻c......
  • Linux进程通信 | 共享内存
    一、共享内存是什么在Linux系统中,共享内存是一种IPC(进程间通信)方式,它可以让多个进程在物理内存中共享一段内存区域。这种共享内存区域被映射到多个进程的虚拟地址空间中,......
  • 关于float和double类型数据在单片机内存中如何存储和转换
    关于float和double类型数据在单片机内存中如何存储和转换1、单精度浮点型float,双精度浮点型double数据在内存中的存储模型(1)下图为单精度浮点型数据float的存储模型,符号位......
  • Docker Mysql限制内存
    买了个阿里云的1G单核的服务器,运行了Docker装了数据库占用内存2/3的内存,然后再跑个Java小型程序直接死机,无奈只能减小mysql内存解决后效果:查询了网上资料总结解决方案:......
  • 用ThinkPHP 编写上传图片 JPG转PDF代码
    好的,以下是使用ThinkPHP编写上传图片和将JPG转PDF的代码示例。首先需要在config.php文件中配置上传图片的相关参数: //配置上传路径'upload_path'=>'./uploads/',/......
  • golang使用缓存库go-cache的测试用例-短期内存缓存数据类似memcache/redis-【唯一客服
    golang中使用go-cache是非常普遍的,比如,我在对接微信客服接口的时候,获取access_token,默认获取一次有两个小时的有效期这个时候,我就可以使用go-cache来缓存access_token了......