PostgreSQL内存使用增长观察

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介:

说是内存增长,其实未必是。但是客户有时候喜欢用free命令来查看,为何更好地了解,进行以下试验。

运行PostgreSQL前:

[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125        660        464          0         26        363
-/+ buffers/cache:        270        854
Swap:         2015          0       2015
[root@server ~]# 

启动PostgreSQL后:

[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125        672        452          0         27        374
-/+ buffers/cache:        271        853
Swap:         2015          0       2015
[root@server ~]# 

 

然后,在同一台机器上开启一个psql之后:

[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125        682        442          0         28        377
-/+ buffers/cache:        276        848
Swap:         2015          0       2015
[root@server ~]# 

一次插入100M数据:

复制代码
postgres=# \d test01;
        Table "public.test01"
 Column |      Type       | Modifiers 
--------+-----------------+-----------
 id     | integer         | 
 val    | character(1024) | 

postgres=# \d test02;
        Table "public.test02"
 Column |      Type       | Modifiers 
--------+-----------------+-----------
 id     | integer         | 
 val    | character(1024) | 

postgres=# 
复制代码

单纯地查询已经耗费内存了:

复制代码
postgres=# select count(*) from test01;
 count  
--------
 307200
(1 row)

postgres=# 
复制代码
[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125       1031         93          0         29        723
-/+ buffers/cache:        278        846
Swap:         2015          0       2015
[root@server ~]# 

插入100M数据看看:

postgres=# insert into test01 (select * from test01 limit 102400);
INSERT 0 102400
postgres=# 
[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125       1113         11          0         27        803
-/+ buffers/cache:        282        842
Swap:         2015          0       2015
[root@server ~]# 

此时,单纯看free部分的内存快没有了。

再重复一次,插入100M数据,free内存反而有所增加

postgres=# insert into test01 (select * from test01 limit 102400);
INSERT 0 102400
postgres=# 
[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125       1048         76          0         13        750
-/+ buffers/cache:        284        840
Swap:         2015          0       2015
[root@server ~]# 

 

再折腾几次,多次连续插入100M数据后:

[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125       1115          9          0          1        762
-/+ buffers/cache:        352        772
Swap:         2015          0       2015
[root@server ~]# 

还不过瘾,再来一次插入1200M数据:

仍然艰难地转下去了:

postgres=# insert into test01 (select * from test01);
INSERT 0 1228800
postgres=# 
[root@server ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          1125       1113         12          0          1        820
-/+ buffers/cache:        290        834
Swap:         2015          0       2015
[root@server ~]# 

重新启动来看看:

现在,数据已经有2400M了,再次插入,会如何?要知道我的shared_buffers很小,才32MB:

由于插入数据量过大,导致系统崩溃,发生OOM错误。

 






本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/p/3288350.html,如需转载请自行联系原作者

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 内存表可选项 - unlogged table
标签 PostgreSQL , 内存表 , unlogged table 背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。
3124 0
|
10月前
|
SQL 存储 缓存
PostgreSQL内存上下文[翻译]
PostgreSQL内存上下文[翻译]
165 0
|
SQL 存储 分布式计算
PolarDB-X 是如何用15M内存跑1G的TPCH
本文主要对PolarDB-X计算层的内存管理进行分析,这有助于大家有PolarDB-X有更深入的理解。 PolarDB-X内存管理机制的设计,主要为了几类问题: 1. 让用户更容易控制每个查询的内存限制; 2. 预防内存使用不当,导致内存溢出进而引发OOM; 3. 避免查询间由于内存争抢出现相互饿死现象; 4. 避免AP Workload使用过多内存,严重拖慢TP Workload
834 0
PolarDB-X 是如何用15M内存跑1G的TPCH
|
SQL 缓存 监控
【巡检问题分析与最佳实践】RDS MySQL 内存使用问题
实例内存使用率和buffer pool命中率是RDS MySQL的关键指标之一,如果内存使用率过高会有OOM风险,如果buffer pool命中率低,大量的数据页无法命中buffer pool中缓存的数据页,需要从存储读取数据,造成IO吞吐增加和延迟增加。
【巡检问题分析与最佳实践】RDS MySQL 内存使用问题
|
关系型数据库 PostgreSQL 索引
PostgreSQL cheat functions - (内存上下文\planner内容\memory context等常用函数)
标签 PostgreSQL , memory context , plan , pid signal , ... 背景 https://github.com/MasaoFujii/pg_cheat_funcs Fujii Masao MasaoFujii PostgreSQL comm...
1273 0
|
监控 关系型数据库 MySQL
如何定位RDS MySQL内存使用率高?
打开performance_schema 控制台可开 打开内存监控 update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%'; 查看监控 select * from sys.
3936 0
|
新零售 关系型数据库 测试技术
PostgreSQL技术周刊第10期:PostgreSQL 调用 Rust 函数内存耗用研究
PostgreSQL(简称PG)的开发者们:云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊。
3180 0
|
关系型数据库 PostgreSQL Rust
|
18天前
|
Linux
Linux rsyslog占用内存CPU过高解决办法
该文档描述了`rsyslog`占用内存过高的问题及其解决方案。
41 4