开发者社区> 嗯哼9925> 正文

PostgreSQL内存使用增长观察

简介:
+关注继续查看

说是内存增长,其实未必是。但是客户有时候喜欢用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,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【巡检问题分析与最佳实践】RDS MySQL 内存使用问题
实例内存使用率和buffer pool命中率是RDS MySQL的关键指标之一,如果内存使用率过高会有OOM风险,如果buffer pool命中率低,大量的数据页无法命中buffer pool中缓存的数据页,需要从存储读取数据,造成IO吞吐增加和延迟增加。
783 0
PostgreSQL 内存表可选项 - unlogged table
标签 PostgreSQL , 内存表 , unlogged table 背景 内存表,通常被用于不需要持久化,变更频繁,访问RT低的场景。 目前社区版本PostgreSQL没有内存表的功能,postgrespro提供了两个插件可以实现类似内存表的功能。
2495 0
PostgreSQL cheat functions - (内存上下文\planner内容\memory context等常用函数)
标签 PostgreSQL , memory context , plan , pid signal , ... 背景 https://github.com/MasaoFujii/pg_cheat_funcs Fujii Masao MasaoFujii PostgreSQL comm...
1174 0
如何定位RDS MySQL内存使用率高?
打开performance_schema 控制台可开 打开内存监控 update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%'; 查看监控 select * from sys.
3784 0
PostgreSQL技术周刊第10期:PostgreSQL 调用 Rust 函数内存耗用研究
PostgreSQL(简称PG)的开发者们:云栖社区已有5000位PG开发者,发布了3000+PG文章(文章列表),沉淀了700+的PG精品问答(问答列表)。 PostgreSQL技术周刊会为大家介绍最新的PG技术与动态、预告活动、最热问答、直播教程等,欢迎大家订阅PostgreSQL技术周刊。
3089 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
云服务器ECS内存增强型实例re6全新发布
立即下载
PolarDB for PostgreSQL 源码与应用实战
立即下载
PolarDB for PostgreSQL 开源必读手册
立即下载