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索引頁

磨礪技術珠磯,踐行數據之道,追求卓越價值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM