Ilya Kosmodemyansky рджреНрд╡рд╛рд░рд╛ 2014 рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ "рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде PostgreSQL рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред"
рдкреЛрд╕реНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдХреЗ рдореВрд▓рднреВрдд рдкрд╣рд▓реВ рд╣реИрдВ, рдЬреЛ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред
рдбрд┐рд╕реНрдХ, рдореЗрдореЛрд░реА, рдореВрд▓реНрдп, рдкреНрд░реЛрд╕реЗрд╕рд░ - рдЗрд╕ рдХреНрд░рдо рдореЗрдВ, рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдорд╢реАрди рдЦрд░реАрджрддреЗ рд╣реИрдВ, рд╕рд░реНрд╡рд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЖрдкрд╕ рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреНрдпреЛрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ?
рд░рд┐рдкреЛрд░реНрдЯ рдмрддрд╛рдПрдЧреА рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рд╕реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ, PostgreSQL рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ PostgreSQL рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдХреНрдпрд╛ рд╣реИрдВред
рд╣рд╛рд░реНрдбрд╡реЗрдпрд░, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрд╕реАрдХреНрдпреВрдПрд▓: рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реЗрдЯрдЕрдк рдХреИрд╕реЗ рдФрд░ рдХреНрдпреЛрдВ рдЪреБрдирдирд╛ рд╣реИ, рдЕрдЧрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдХреМрди рд╕реА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рдмрд╕реЗ рдорд╣рдВрдЧреА RAID рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдмреЗрдХрд╛рд░ рдХрд░ рд╕рдХрддреА рд╣реИрдВред рдмреИрдЯрд░реА рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЖрдХрд░реНрд╖рдХ рдпрд╛рддреНрд░рд╛, рдЧрдВрджреЗ рдФрд░ рд╕рд╛рдл рдкреГрд╖реНрда, рдЕрдЪреНрдЫреЗ рдФрд░ рдмреБрд░реЗ рдПрд╕рдПрд╕рдбреА, рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдЧрд░рд╛рдиреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдФрд░ рдмреБрд░реЗ рд╕рдкрдиреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ред

рдореЗрд░рд╛ рдирд╛рдо рдЗрд▓реНрдпрд╛ рдХреЛрд╕реНрдореЛрдбреЗрдорд╛рдиреНрд╕реНрдХреА рд╣реИред рдореИрдВ PostgreSQL-Consulting рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ Postgres, рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
, Postgres, . - Write Ahead log, IO PostgreSQL, . , , -, PostgreSQL.

:
?
PostgreSQL?
, .
. ? , ?
PostgreSQL.
. PostgreSQL , .

- -, . , , , . , .
- , Write Ahead Log, . Write Ahead Log, . Write Ahead Log .
- тАУ checkpoint, WAL , .

PostgreSQL :
PostgreSQL autovacuum. , . PostgreSQL demon autovacuum. тАУ . , .
PostgreSQL pg_clog. . PostgreSQL pg_clog. OLTP, . , , RAM-. RAM-. RAM- , , PostgreSQL . . , .
tmp, , тАУ . , , , . ., . - work_mem ( , PostgreSQL) , . , , explain analyze тАУ , . .

, тАУ checkpoints, , . ┬лpik┬╗ тАФ . .
? Oracle, Log Writer DBwriter, , , PostgreSQL fsync. .
Fsync тАУ UNIX. fsync , - . . , checkpoints, .

? PostgreSQL shared_buffers, , . . . , , . : update, insert tuple , .

checkpoint ? , , WAL, .
, . WAL COMMIT , .
WAL , , checkpoint. . Checkpoint , WAL fsync .
shared_buffers , , shared_buffers, . - .

, . , , , . . iostat.
? . , , , shared buffers. . - , .
checkpoint, pdflush . IO . , 100 % . , fsync , . , , . , select , .
pg_stat_bgwriter, , checkpoint , checkpoints . . .

pg_stat_bgwriter. , , . , . - - . , , . , , - .
, . , - .
, , . , , , PostgreSQL. . - , , . , - , , . . . .

, ?
hardware. - , - .
-, RAID-. RAID-? RAID- тАУ , , . , , 100 / , , , . CPU.
CPU, , software RAID , , .
RAID- . . . . . , .
? . , fsync , . fsync , . , . , , , , , fsync checkpoints . , RAID, .
RAID , . . . - . - RAID , , . megaraid perc, - , . , . . .
, HP RAID-, . , , , , . , . . , , . .
RAID . . . write back cache. io mode direct. тАУ , PostgreSQL fsyng .
Disk Write Cache Mode. , . SSD , , , , , , .

, , SAS. . seek , . . , .
SSD. SSD , . , SSD . SSD, SATA , , . , .
SSD only , PostgreSQL . , SSD , Write Ahead Log, temp, , SSD, WAL тАУ SSD. SSD. . , . , . .
RAID, , , , 10, - 5- 6-. , -, RAID . , -, , . Stripe , . stripe , .
, . , , , - , . RAID тАУ . SATA - , off, , , .
, , , , , тАУ . , , . . , .

. ?
-, c noatime , , . , . barrier, xfs ext4 .
? , , , inodes, inodes . , , . Linux scall, . , inodes, .
128 GB shared buffers, RAID-. . . , Debian , , .
, , zfs, , partition , partition . , , . . . . production xfs ext4 Linux, .

, . . . , . .
- , : vm.dirty_ratio=20 vm.dirty_background_ratio=10. .
? Pdflush, , , 10 20 % . . , 128 GB , 20 % . RAID тАУ 1-2 GB, . , 512 MB. , . , , pdflush , .
( Linux PostgreSQL : vm.dirty_background_ratio 5% ~ 25% .)
vm.dirty_bytes. . - , . , . , .
RAID, , , , - . .

postgresql.conf, checkpoints , .
Wal_buffers тАУ , PostgreSQL. - , , checkpoint. , , , - -.
, flush , checkpoint segment - - . 256. - 1000 checkpoints, , . , checkpoint, , 48 MB , 4 GB. RAID-.
checkpoints -, - . checkpoint_timeout . , -, . checkpoints . pg_stat_bgwriter 0, , checkpoints.
. . Checkpoints -, - . , - , , . checkpoint , , -.
, checkpoint_completion_target, 0,7-0,9. checkpoint, . . . , checkpoints, checkpoint, - .
0,1, , 10 % , checkpoints, . - , .

, ?
PostgreSQL , pg_test_fsync. , , hardware iops, checkpoints PostgreSQL, - .
( ), , . , - . , . , -, . . .
, , , .
. , . . . hardware , , .

hack, . , .
checkpoint PostgreSQL bgwriter, . . . .
? checkpoint . . Bgwriter , , . . , .
checkpoint . bgwriter . checkpoint.
, . , , . . 10 000, 1 000 10. . , checkpoint bgwriter. checkpoints update, insert, , . , .

? PostgreSQL тАУ autovacuum. autovacuum . , autovacuum , , . , . .
, . : 40 MB select 30 - . PostgreSQL, .
. , autovacuum, .
Autovacuum . ? : autovacuum_vacuum_scale_factor autovacuum_analyze_scale_factor. 20 %. 0,02? , . 20 % . , PostgreSQL updates, insert tuple delete. Delete тАУ delete, . tuple , autovacuum .
20 % . , , . . overhead , . , , , , ddl, autovacuum. .
- . , 0,001-0,01. . . 0,001 , autovacuum . (: autovacuum_vacuum_scale_factor autovacuum_analyze_scale_factor 5% тАФ https://habr.com/ru/post/501516/) autovacuum , . . . , autovacuum , . overhead - . ., autovacuums .
? autovacuum. , . . 98-100 % , , , , . , 0,1 % autovacuum. , , . . , , . , autovacuum, , 20-30-50 %. autovacuum, , . , тАУ 10-20, , work_mem , autovacuums .
autovacuum_analyze_scale_factor. , analyze. , , 32- . , 50 % , . , 0,02-0,03-0,04. , demon , , , .
, autovacuum ?
, , delete, tuple . xmax, . . transaction id, tuple .
* , autovacuum ?
, . , тАУ . , , pg_catalog, . , pg_catalogтАЩ . . .. . , , . , , .
! - PostgreSQL ? , KVM VirtIO ?
PostgreSQL , - - latency . , , , checkpoint . IO .
, , , , . , , - . , . - LibvitIO. - . . , .
, . . . , fsync. fsync datasync?
. pg_test_fsync , fsync , . postgresql.conf , . .
. . , SSD, HDD write cache. - ? write cache writes .
. , , , . - , , , .
, , , , RAID . , . - storages. . , - , .
. . - pgtune , . . RAIDs . ., - ? . . , RAID - , .
. . , , . , shared buffers - , work_mem , . . , . PostgreSQL , , , , , , linux- . Linux PostgreSQL . , PostgreSQL wizard тАУ , . -: , . , , .
PostgreSQL BSD? ?
. FreeBSD , , Linux . тАУ huge pages. Huge pages BSD . PostgreSQL, 9.4 , Linux. . . , , overhead . , workload. sync . , 3.3 , . PostgreSQL MySQL. , .
, BSD, , , . , - Oracle IBM . . . FreeBSD . , BSD .
, , ? read only , ?
inserts , . , , , . , , insert, , . , , , - time base inventory, timestampтАЩ. , , , , -, .
, , - , - , - .
read only , , SSD, SASтАЩ, SSD tablespace. , , tablespace SSD, , SSD. random page cost . . selects. .
?
рдХрд╣рд╛рдиреА рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рднрд╛рдЬрди рддрд╛рд▓рд┐рдХрд╛ рд╣реИред рдФрд░ рдЖрдк рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ 3-4 рд╕рдкреНрддрд╛рд╣ рддрдХ рдЧрд░реНрдо рд░рдЦрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХреА рдХрд┐рддрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рднреА рдЕрдЧрд▓реЗ рд╣реИрдВ, рдПрдХ рдмрдбрд╝реЗ рд╡рд┐рднрд╛рдЬрди рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ I / O рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рдХрд░реЗрдВред рдпрд╛ рдЖрдк рдЗрд╕ рдЕрдВрддрд┐рдо рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдбрдВрдк рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рджреВрд╕рд░реА рдорд╢реАрди рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рдУрдПрд▓рдЯреАрдкреА рд▓реЛрдб рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдореБрдЦреНрдп рдЖрдзрд╛рд░ рдкрд░ рддрд╕реНрд╡реАрд░ рдХреЛ рдЦрд░рд╛рдм рди рдХрд░реЗрдВред