PostgreSQL記憶體使用增長觀察

2021-09-22 10:56:50 字數 3726 閱讀 2344

說是記憶體增長,其實未必是。但是客戶有時候喜歡用free命令來檢視,為何更好地了解,進行以下試驗。

執行postgresql前:

[root@server ~]# free -m

total used free shared buffers cached

mem:

1125

660464026

363-/+ buffers/cache: 270

854swap:

2015

02015

[root@server ~]#

啟動postgresql後:

[root@server ~]# free -m

total used free shared buffers cached

mem:

1125

672452027

374-/+ buffers/cache: 271

853swap:

2015

02015

[root@server ~]#

然後,在同一臺機器上開啟乙個psql之後:

[root@server ~]# free -m

total used free shared buffers cached

mem:

1125

682442028

377-/+ buffers/cache: 276

848swap:

2015

02015

[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

1031930

29723

-/+ buffers/cache: 278

846swap:

2015

02015

[root@server ~]#

插入100m資料看看:

postgres=# insert into test01 (select * from test01 limit 102400

);insert

0102400

postgres=#

[root@server ~]# free -m

total used free shared buffers cached

mem:

1125

1113110

27803

-/+ buffers/cache: 282

842swap:

2015

02015

[root@server ~]#

此時,單純看free部分的記憶體快沒有了。

再重複一次,插入100m資料,free記憶體反而有所增加

postgres=# insert

into test01 (select

*from test01 limit 102400

);insert

0102400

postgres

=#

[root@server ~]# free -m

total used

free

shared buffers cached

mem:

1125

1048760

13750

-/+ buffers/cache: 284

840swap:

2015

02015

[root@server ~]#

再折騰幾次,多次連續插入100m資料後:

[root@server ~]# free -m

total used

free

shared buffers cached

mem:

1125

111590

1762

-/+ buffers/cache: 352

772swap:

2015

02015

[root@server ~]#

還不過癮,再來一次插入1200m資料:

仍然艱難地轉下去了:

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 位元組...