李斯特 发表于 2016-11-21 10:05:09

PostgreSQL内存使用增长观察

  磨砺技术珠矶,践行数据之道,追求卓越价值
  回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页
  [作者 高健@博客园luckyjackgao@gmail.com]
  说是内存增长,其实未必是。但是客户有时候喜欢用free命令来查看,为何更好地了解,进行以下试验。
  运行PostgreSQL前:



# free -m
total       used       free   shared    buffers   cached
Mem:          1125      660      464          0         26      363
-/+ buffers/cache:      270      854
Swap:         2015          0       2015
#
  启动PostgreSQL后:



# free -m
total       used       free   shared    buffers   cached
Mem:          1125      672      452          0         27      374
-/+ buffers/cache:      271      853
Swap:         2015          0       2015
#
  
  然后,在同一台机器上开启一个psql之后:



# free -m
total       used       free   shared    buffers   cached
Mem:          1125      682      442          0         28      377
-/+ buffers/cache:      276      848
Swap:         2015          0       2015
#
  一次插入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=#


# free -m
total       used       free   shared    buffers   cached
Mem:          1125       1031         93          0         29      723
-/+ buffers/cache:      278      846
Swap:         2015          0       2015
#
  插入100M数据看看:



postgres=# insert into test01 (select * from test01 limit 102400);
INSERT 0 102400
postgres=#


# free -m
total       used       free   shared    buffers   cached
Mem:          1125       1113         11          0         27      803
-/+ buffers/cache:      282      842
Swap:         2015          0       2015
#
  此时,单纯看free部分的内存快没有了。
  再重复一次,插入100M数据,free内存反而有所增加



postgres=# insert into test01 (select * from test01 limit 102400);
INSERT 0 102400
postgres=#


# free -m
total       used       free   shared    buffers   cached
Mem:          1125       1048         76          0         13      750
-/+ buffers/cache:      284      840
Swap:         2015          0       2015
#
  
  再折腾几次,多次连续插入100M数据后:



# free -m
total       used       free   shared    buffers   cached
Mem:          1125       1115          9          0          1      762
-/+ buffers/cache:      352      772
Swap:         2015          0       2015
#
  还不过瘾,再来一次插入1200M数据:
  仍然艰难地转下去了:



postgres=# insert into test01 (select * from test01);
INSERT 0 1228800
postgres=#


# free -m
total       used       free   shared    buffers   cached
Mem:          1125       1113         12          0          1      820
-/+ buffers/cache:      290      834
Swap:         2015          0       2015
#
  重新启动来看看:
  现在,数据已经有2400M了,再次插入,会如何?要知道我的shared_buffers很小,才32MB:
  由于插入数据量过大,导致系统崩溃,发生OOM错误。
  [作者 高健@博客园luckyjackgao@gmail.com]
  回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页
  磨砺技术珠矶,践行数据之道,追求卓越价值
页: [1]
查看完整版本: PostgreSQL内存使用增长观察