PostgreSQL рдбрд┐рд╕реНрдХ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд▓реНрдпрд╛ рдХреЛрд╕реНрдореЛрдбреЗрдореЗрдиреНрд╕реНрдХреА

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 рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рди рдХрд░реЗрдВред рдпрд╛ рдЖрдк рдЗрд╕ рдЕрдВрддрд┐рдо рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдбрдВрдк рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рджреВрд╕рд░реА рдорд╢реАрди рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдСрдирд▓рд╛рдЗрди рдУрдПрд▓рдЯреАрдкреА рд▓реЛрдб рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдореБрдЦреНрдп рдЖрдзрд╛рд░ рдкрд░ рддрд╕реНрд╡реАрд░ рдХреЛ рдЦрд░рд╛рдм рди рдХрд░реЗрдВред


All Articles