( mrev | 2009. 03. 21., szo – 18:47 )

Éppen szünet van az Amber versenyen.

Ez egy copy-paste-tel (!) átvett idézet a Postgres 8.3.6 doksi FAQ_hungarian filéből (2005-ös szöveg)

Számos teljesítmény javíto lehetõség van. Kikapcsolhatod az fsync() mûveletet a postmaster -o -F opciokval valo indításakor. Így nem fog az amugy lassú fsync() függvény meghívodni minden tranzakcio végén.

Ez meg egy friss szöveg a HISTORY filéből

Asynchronous commit delays writes to WAL during transaction commit (Simon) This feature dramatically increases performance for short data-modifying transactions. The disadvantage is that because disk writes are delayed, if the database or operating system crashes before data is written to the disk, committed data will be lost. This feature is useful for applications that can accept some data loss. Unlike turning off fsync, using asynchronous commit does not put database consistency at risk; the worst case is that after a crash the last few reportedly-committed transactions might not be
committed after all. This feature is enabled by turning off synchronous_commit (which can be done per-session or per-transaction, if some transactions are critical and others are not). wal_writer_delay can be adjusted to control the maximum delay before transactions actually reach disk.

Az első idézet azt mutatja, hogy a postgresben benne van az fsync, de néha szükségét érzik kikapcsolni. Valóban, ha egyszerűen minden tranzakciót azonnal fsyncelünk, akkor mennyivel vagyunk beljebb a DOS-hoz képest? Ugyanúgy kattog a diszk mint 20 éve.

Elfogadható kompromisszum volna, ha az os/fs valami nem túl hosszú várakozás után automatikusan szinkronizálna. Ext3-nál ez úgy tudom 5 sec. 5 percet is elfogadhatónak tartok, de 5 órát már nem (ez persze szubjektív).

Második idézet. Ha az automatikus szinkronizálásra nem lehet számítani, akkor muszáj fsyncelni. Hogy mégse legyünk ugyanott, ahol a DOS korszakban voltunk, az alkalmazás (postgres) maga oldja meg a tranzakciók bufferelését, viszont a flush után egyúttal fsyncel is. Vagyis kénytelen olyan funkciót megduplázni, ami az os/fs-ben is benne van, vagy benne lehetne.

Azt is mondhatanám, ha valaki fsyncel, akkor annak bufferelni is kell.

Az ext4 átdefiniálja a feladatot (alább adja), majd jelenti, hogy hatékonyságnövelést ért el. Ennek következtében az alkalmazási programok kénytelenek bufferelést+fsyncet alkalmazni. Szerintem jobb volna az automatikus szinkronizálás irányába menni. Nem csak a "hulye hobbi koderek" (bocs, ezek nem az én szavaim) kedvéért, hanem a postgres meg effélék kedvéért.

Lékó-Morozevics: 1-0:)
--
CCC3