PostgreSQL如何与磁盘一起工作。伊利亚·科斯莫德米扬斯基(Ilya Kosmodemyansky)

Ilya Kosmodemyansky对2014年报告的解码:“ PostgreSQL如何与磁盘一起工作。”


当然,文章的一部分已经过时了,但是这里是使用磁盘时PostgreSQL的基本方面,这些方面仍然很重要。


磁盘,内存,价格,处理器-按照此顺序,购买用于数据库的计算机的管理员将查看服务器的特性。这些特征如何相互联系?为什么是他们呢?


该报告将解释为什么通常需要数据库驱动器,PostgreSQL如何与它交互以及与其他数据库相比PostgreSQL的功能是什么。


硬件,操作系统,文件系统和PostgreSQL的设置:如何以及为什么选择一个好的设置,如果硬件配置不是最佳的怎么办,以及哪些错误会使最昂贵的RAID控制器失效。一次充满魅力的旅程,进入电池,脏页,整洁的页面,固态硬盘的好坏,重新安排的监视计划以及系统管理员的噩梦。



我叫Ilya Kosmodemyansky。我为PostgreSQL咨询工作。我正在做各种与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。或者,您转储最后一个表并将其带到没有对此聚合进行联机OLTP加载的另一台计算机上。而且,如果您需要获取这些数据,则可以去那里驱动这些请求,以免破坏主要基地的形象。


All Articles