Skip to content
Snippets Groups Projects
Select Git revision
  • 97c4ee94adf15f7a0a39cbb5549159e2aa0679d1
  • master default
  • benchmark-tools
  • postgres-lambda
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
24 results

variable.c

Blame
  • README.fsync 1.85 KiB
    Fsync() patch (backend -F option)
    =================================
    
    Normally, the Postgres'95 backend makes sure that updates are actually
    committed to disk by calling the standard function fsync() in
    several places. Fsync() should guarantee that every modification to
    a certain file is actually written to disk and will not hang around
    in write caches anymore. This increases the chance that a database
    will still be usable after a system crash by a large amount.
    
    However, this operation severely slows down Postgres'95, because at all
    those points it has to wait for the OS to flush the buffers. Especially
    in one-shot operations, like creating a new database or loading lots
    of data, you'll have a clear restart point if something goes wrong. That's
    where the -F option kicks in: it simply disables the calls to fsync(). 
    
    Without fsync(), the OS is allowed to do its best in buffering, sorting
    and delaying writes, so this can be a _very_ big perfomance increase. However,
    if the system crashes, large parts of the latest transactions will still hang
    around in memory without having been committed to disk - lossage of data
    is therefore almost certain to occur.
    
    So it's a tradeoff between data integrity and speed. When initializing a
    database, I'd use it - if the machine crashes, you simply remove the files
    created and redo the operation. The same goes for bulk-loading data: on
    a crash, you remove the database and restore the backup you made before
    starting the bulk-load (you always make backups before bulk-loading,
    don't you?).
    
    Whether you want to use it in production, is up to you. If you trust your
    operating system, your utility company, and your hardware, you might enable
    it; however, keep in mind that you're running in an unsecure mode and that
    performance gains will very much depend on access patterns (because it won't
    help on reading data). I'd recommend against it.