說是記憶體增長,其實未必是。但是客戶有時候喜歡用free命令來檢視,為何更好地了解,進行以下試驗。
執行postgresql前:
[root@server ~]# free -m啟動postgresql後:total used free shared buffers cached
mem:
1125
660464026
363-/+ buffers/cache: 270
854swap:
2015
02015
[root@server ~]#
[root@server ~]# free -m然後,在同一臺機器上開啟乙個psql之後:total used free shared buffers cached
mem:
1125
672452027
374-/+ buffers/cache: 271
853swap:
2015
02015
[root@server ~]#
[root@server ~]# free -m一次插入100m資料:total used free shared buffers cached
mem:
1125
682442028
377-/+ buffers/cache: 276
848swap:
2015
02015
[root@server ~]#
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(*) fromtest01;
count
--------
307200(1
row)
postgres=#
[root@server ~]# free -m插入100m資料看看:total used free shared buffers cached
mem:
1125
1031930
29723
-/+ buffers/cache: 278
846swap:
2015
02015
[root@server ~]#
postgres=# insert into test01 (select * from test01 limit 102400);insert
0102400
postgres=#
[root@server ~]# free -m此時,單純看free部分的記憶體快沒有了。total used free shared buffers cached
mem:
1125
1113110
27803
-/+ buffers/cache: 282
842swap:
2015
02015
[root@server ~]#
再重複一次,插入100m資料,free記憶體反而有所增加
postgres=# insertinto test01 (select
*from test01 limit 102400
);insert
0102400
postgres
=#
[root@server ~]# free -m再折騰幾次,多次連續插入100m資料後:total used
free
shared buffers cached
mem:
1125
1048760
13750
-/+ buffers/cache: 284
840swap:
2015
02015
[root@server ~]#
[root@server ~]# free -m還不過癮,再來一次插入1200m資料:total used
free
shared buffers cached
mem:
1125
111590
1762
-/+ buffers/cache: 352
772swap:
2015
02015
[root@server ~]#
仍然艱難地轉下去了:
postgres=# insert into test01 (select *from test01);insert
01228800
postgres=#
[root@server ~]# free -m重新啟動來看看:total used
free
shared buffers cached
mem:
1125
1113120
1820
-/+ buffers/cache: 290
834swap:
2015
02015
[root@server ~]#
現在,資料已經有2400m了,再次插入,會如何?要知道我的shared_buffers很小,才32mb:
由於插入資料量過大,導致系統崩潰,發生oom錯誤。
Postgresql主鍵自增
主鍵約束只是唯一約束和非空約束的組合。所以,下面兩個表定義是等價的 create table products product no integer unique not null,name text,price numeric create table products product no in...
PostgreSQL記憶體結構
postgresql在啟動後會生成一塊共享記憶體,共享記憶體包括資料塊緩衝區 wal日誌緩衝區以及clog緩衝區。除此之外,共享記憶體還包含程序資訊 統計資訊 鎖資訊 日誌資訊等。相關引數 shared buffers 設定資料庫伺服器將使用的共享記憶體緩衝區大小,通常都會把此值設定的大一些,這樣可...
PostgreSQL 配置記憶體引數
對於任何資料庫軟體,記憶體配置項都是很重要的配置項。在 postgresql 主要有以下幾個記憶體配置引數。shared buffers integer 型別,設定資料庫伺服器將使用的共享記憶體緩衝區數量,此緩衝區為緩衝資料塊所用。此緩衝區是放在共享記憶體中的。每個緩衝區大小的典型值是 8k 位元組...