磨礪技術珠磯,踐行數據之道,追求卓越價值
回到上一級頁面: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索引頁
磨礪技術珠磯,踐行數據之道,追求卓越價值