PostgreSQL内存使用增长观察
磨砺技术珠矶,践行数据之道,追求卓越价值
回到上一级页面:PostgreSQL内部结构与源代码研究索引页 回到顶级页面:PostgreSQL索引页
[作者 高健@博客园 luckyjackgao@gmail.com]
说是内存增长,其实未必是。但是客户有时候喜欢用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错误。
[作者 高健@博客园 luckyjackgao@gmail.com]
回到上一级页面:PostgreSQL内部结构与源代码研究索引页 回到顶级页面:PostgreSQL索引页
磨砺技术珠矶,践行数据之道,追求卓越价值