PostgreSQL内存使用增长观察

磨砺技术珠矶,践行数据之道,追求卓越价值

回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页

[作者 高健@博客园  [email protected]]

说是内存增长,其实未必是。但是客户有时候喜欢用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错误。

 

[作者 高健@博客园  [email protected]]

回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页

磨砺技术珠矶,践行数据之道,追求卓越价值

你可能感兴趣的:(PostgreSQL)