ใใใฏใPostgresใฎๆๅผทใฎ้็บ่ ใฎ1ไบบใงใใAndresFreundใซใใๆ็จฟใฎๅคงใพใใช็ฟป่จณใงใใ้็บ่ ใๅผทใใจใใไบๅฎใซๅ ใใฆใใใฎ่จไบใฏ้ๅธธใซ่ๅณๆทฑใใใฎใงใใใLinuxOSใใฉใฎใใใซๆฉ่ฝใใใใฎ่ฉณ็ดฐใๆใใใซใใฆใใพใใ
ใฐใชใใๅพใฎๆฅ็ถใใกใขใชใไฝฟใใใใใจใใไธปๅผตใ่ใใฎใฏใใใใใใจใงใใใใใฏใใฏใฉใคใขใณใๆฅ็ถใๅฆ็ใใใใใฎใใญใปในใขใใซใใๅๆฅ็ถใๅฅใ ใฎในใฌใใใงๆไพใใใๅฅใฎใขใใซใจๆฏ่ผใใใจใใซใใ่จๅใใใพใใ
็งใซ้ขใใฆใฏใใใใง่ญฐ่ซใใใใจใใใใใใใใพใใใใใซใใใใคใใฎๆนๅใ่กใใใกใขใชไฝฟ็จ้ใๆธใใใใจใใงใใพใใ
ใกใขใชใชใผใใผใใใใซ้ขใใใใฎๆธๅฟตใฏใtopใpsใชใฉใฎใฆใผใใฃใชใใฃใไฝฟ็จใใฆใกใขใชๆถ่ฒป้ใๆธฌๅฎใใๆใ็ฐกๅใชๆนๆณใใใชใใ ใพใใใฆใใใจใใ1ใคใฎไธ่ฌ็ใช็็ฑใซใใใใฎใ ใจๆใใพใใ
ๅฎ้ใๆฐใใๆฅ็ถใใจใซไฝฟ็จใใใใกใขใชใใฉใฎใใใซๅขๅ ใใใใๆธฌๅฎใใใใจใฏ็นใซๅฐ้ฃใงใใ
ใใฎๆ็จฟใงใฏใLinuxใงๅฎ่กใใใฆใใPostgresใซใคใใฆ่ชฌๆใใพใใ็งใๆใ็ต้จใ็ฉใใ ใฎใฏใใฎๆนๅใงใใ
็ถ่กใใๅใซใๆญฃ็ขบใงๆญฃ็ขบใชๆธฌๅฎใงใฏใ1ใคใฎๆฅ็ถใฎใชใผใใผใใใใ2MiBๆชๆบใงใใใใจใๅผท่ชฟใใใใจๆใใพใ๏ผๆ็จฟใฎๆๅพใซใใ็ต่ซใๅ็ งใใฆใใ ใใ๏ผใ
ไธ่ฆ
, , ( ). (huge pages), . . , Postgres:
andres@awork3:~$ psql
postgres[2003213][1]=# SELECT pg_backend_pid();
โโโโโโโโโโโโโโโโโโ
โ pg_backend_pid โ
โโโโโโโโโโโโโโโโโโค
โ 2003213 โ
โโโโโโโโโโโโโโโโโโ
(1 row)
andres@awork3:~/src/postgresql$ ps -q 2003213 -eo pid,rss
PID RSS
2003213 16944
16MiB.
!?! ,
. , pgprewarm, (shared buffers):
postgres[2003213][1]=# SHOW shared_buffers ;
โโโโโโโโโโโโโโโโโโ
โ shared_buffers โ
โโโโโโโโโโโโโโโโโโค
โ 16GB โ
โโโโโโโโโโโโโโโโโโ
(1 row)
postgres[2003213][1]=# SELECT SUM(pg_prewarm(oid, 'buffer')) FROM pg_class WHERE relfilenode <> 0;
โโโโโโโโโโ
โ sum โ
โโโโโโโโโโค
โ 383341 โ
โโโโโโโโโโ
andres@awork3:~$ ps -q 2003213 -eo pid,rss
PID RSS
2003213 3169144
3GB. , , . , :
postgres[2003213][1]=# SELECT pg_size_pretty(SUM(pg_relation_size(oid))) FROM pg_class WHERE relfilenode <> 0;
โโโโโโโโโโโโโโโโโโ
โ pg_size_pretty โ
โโโโโโโโโโโโโโโโโโค
โ 2995 MB โ
โโโโโโโโโโโโโโโโโโ
(1 row)
, , :
postgres[3244960][1]=# SELECT sum(abalance) FROM pgbench_accounts ;
โโโโโโโ
โ sum โ
โโโโโโโค
โ 0 โ
โโโโโโโ
(1 row)
andres@awork3:~/src/postgresql$ ps -q 3244960 -eo pid,rss
PID RSS
3244960 2700372
, Postgres 3GB 2.7GB . , huge_pages=off, ps (shred - ) , . .
- 4KiB, , 2MiB.
huge_pages=on, . , " ":
andres@awork3:~$ ps -q 3245907 -eo pid,rss PID RSS 3245907 7612
, 7MiB. (page table) , - , 512 (4KiB * 512 = 2MiB).
:
postgres[3245843][1]=# ;SELECT SUM(pg_prewarm(oid, 'buffer')) FROM pg_class WHERE relfilenode <> 0;
โฆ
postgres[3245851][1]=# SELECT sum(abalance) FROM pgbench_accounts ;
โฆ
andres@awork3:~$ ps -q 3245907,3245974 -eo pid,rss
PID RSS
3245907 12260
3245974 8936
, 12MiB 9MiB , 3GiB 2.7GiB.
.
, Linux , , : RSS ps top.
4.5, /proc/$pid/status :
VmRSS . (VmRSS = RssAnon + RssFile + RssShmem)
RssAnon .
RssFile .
RssShmem ( SysV shm, tmpfs )
andres@awork3:~$ grep -E '^(Rss|HugetlbPages)' /proc/3247901/status
RssAnon: 2476 kB
RssFile: 5072 kB
RssShmem: 8520 kB
HugetlbPages: 0 kB
postgres[3247901][1]=# SELECT SUM(pg_prewarm(oid, 'buffer')) FROM pg_class WHERE relfilenode <> 0;
andres@awork3:~$ ps -q 3247901 -eo pid,rss
PID RSS
3247901 3167164
andres@awork3:~$ grep -E '^(Rss|HugetlbPages)' /proc/3247901/status
RssAnon: 3148 kB
RssFile: 9212 kB
RssShmem: 3154804 kB
HugetlbPages: 0 kB
RssAnon "" , .. . RssFile , postgres. RssShmem .
ps - - .
, huge_pages=on:
andres@awork3:~$ grep -E '^(Rss|HugetlbPages)' /proc/3248101/status
RssAnon: 2476 kB
RssFile: 4664 kB
RssShmem: 0 kB
HugetlbPages: 778240 kB
postgres[3248101][1]=# SELECT SUM(pg_prewarm(oid, 'buffer')) FROM pg_class WHERE relfilenode <> 0;
andres@awork3:~$ grep -E '^(Rss|HugetlbPages)' /proc/3248101/status
RssAnon: 3136 kB
RssFile: 8756 kB
RssShmem: 0 kB
HugetlbPages: 3846144 kB
, . :
, RssFile - (Postgres mmap() - ). .
, RssAnon . ps , postgres ( postmaster). Linux ( fork()), Copy-on-Write , .
, . , 4.14 ( ) /proc/$pid/smaps_rollup . Pss " " ( smaps_rollups Pss ). , .
postgres[2004042][1]=# SELECT SUM(pg_prewarm(oid, 'buffer')) FROM pg_class WHERE relfilenode <> 0;
โโโโโโโโโโ
โ sum โ
โโโโโโโโโโค
โ 383341 โ
โโโโโโโโโโ
(1 row)
postgres[2004042][1]=# SHOW huge_pages ;
โโโโโโโโโโโโโโ
โ huge_pages โ
โโโโโโโโโโโโโโค
โ off โ
โโโโโโโโโโโโโโ
(1 row)
andres@awork3:~$ grep ^Pss /proc/2004042/smaps_rollup
Pss: 3113967 kB
Pss_Anon: 2153 kB
Pss_File: 3128 kB
Pss_Shmem: 3108684 kB
Pss_Anon , Pss_File , Pss_Shmem ( ) .
, . pgbench (scale 1000, -S -M prepared -c 1024) :
postgres[2004042][1]=# SELECT count(*) FROM pg_stat_activity ;
โโโโโโโโโ
โ count โ
โโโโโโโโโค
โ 1030 โ
โโโโโโโโโ
(1 row)
postgres[2004042][1]=# SELECT pid FROM pg_stat_activity WHERE application_name = 'pgbench' ORDER BY random() LIMIT 1;
โโโโโโโโโโโ
โ pid โ
โโโโโโโโโโโค
โ 3249913 โ
โโโโโโโโโโโ
(1 row)
andres@awork3:~$ grep ^Pss /proc/3249913/smaps_rollup
Pss: 4055 kB
Pss_Anon: 1185 kB
Pss_File: 6 kB
Pss_Shmem: 2863 kB
huge_pages=on:
andres@awork3:~$ grep ^Pss /proc/2007379/smaps_rollup Pss: 1179 kB Pss_Anon: 1173 kB Pss_File: 6 kB Pss_Shmem: 0 kB
Pss , . , . `/proc/$pid/status`.
, , VmPTE ( ) , Vm* , VmStk copy-on-write.
, huge_pages=off:
andres@awork3:~$ grep ^VmPTE /proc/2004042/status VmPTE: 6480 kB
huge_pages=on:
VmPTE: 132 kB
- , , .
ใใใใฎๆธฌๅฎใซๅบใฅใใฆใใใชใๅ็ดใช่ชญใฟๅใๅฐ็จOLTPใญใผใใๅฎ่กใใใใญใปในใซใฏใVmPTEใซPss_Anonใๅซใใใจใhuge_pages =ใชใใง็ด7.6MiBใhuge_pages =ใชใณใง็ด1.3MiBใฎใชใผใใผใใใใใใใจๆณๅใงใใพใใ
ใใ็จฎใฎใ่ฆใใชใใใชใผใใผใใใใใใใใใกๅ ใฎๅคง้ใฎใใผใฟใชใฉใใใใจๆณๅใใฆใใๆฅ็ถใชใผใใผใใใใฏ2MiBๆชๆบใงใใใจใใไปฅๅใฎในใใผใใกใณใใซๆปใใจๆใใพใใ
็ฟป่จณ่ ใใใฎ่ฃ่ถณใPostgres 14ใงใฏใPostgres่ชไฝใฎ่ฆณ็นใใ็พๅจใฎใใญใปในใซใใ่ฉณ็ดฐใชใกใขใชไฝฟ็จ็ใ็คบใๆฐใใpg_backend_memory_contextsใใฅใผใๅฐๅ ฅใใใฆใใพใใ