SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Pohádka o checkpointu
Co se děje při checkpointu, možnosti a ladění.


      CSPUG Praha, 22. 11. 2011
      Tomáš Vondra, tv@fuzzy.cz
Co je to checkpoint?

   činnost nutná kvůli samostatnému transakčnímu logu (WAL)


1) načtení dat do shared buffers
                                       WAL
2) zápis do WAL (disk)                      2   3
                                       WAL
3) úprava shared buffers (RAM)                           shared buffers
                                       WAL
4) sync dat ve WAL (commit)
                                       WAL
5) checkpoint (zápis dat)               4           1                     5
                                                        disk



   nejčastější problém u databází s netriviálním počtem změn
   ne zcela jednoduchý monitoring a určení příčiny problému
   interakce s operačním systémem (pdflush v Linuxu apod)
Kdy k checkpointu dochází?

   po vyčerpání počtu transakčních logů (xlog)

    checkpoint_segments = 64



    po vypršení časového limitu (timed)


    checkpoint_timeout = 5m


   na vyžádání uživatele


    CHECKPOINT
Interakce s OS (Linux)

   je to trochu složitější kvůli interakci s OS

    operační systémy vesměs mají cache pro disky (page cache)
   výhody cache – opakovaný zápis, řazení zápisů (sekvenční)
   zápis na disk až při fsync
                                                   WAL

   Linux – pdflush (/proc/sys/vm)                 WAL
                                                                 shared buffers
     ☐   dirty_background_ratio                    WAL

     ☐   dirty_ratio                               WAL

     ☐   dirty_expire_centisecs                             page cache


                                                                disk
   http://www.westnet.com/~gsmith/content/linux-pdflush.htm
page cache v Linuxu

   vm.dirty_background_ratio
    ☐   „dirty“ limit než pdflush začne zapisovat na pozadí
    ☐   bývalo 10%, dnes 5%


   vm.dirty_ratio
    ☐   „dirty“ limit než procesy musí zapisovat přímo (bez cache)
    ☐   bývalo 40%, dnes 10%


   vm.dirty_expire_centisecs
    ☐   timeout jak dlouho smí být „dirty“ data v cache
    ☐   standardně 30s
interakce s page cache

příklad: server s 16GB paměti (dnes víceméně minimum)

    4 GB - shared buffers
   1 GB - OS + různé blbosti
   11 GB – page cache (maximum)
     ☐   dirty_background_ratio = 5% = 560 MB*
     ☐   dirty_ratio = 10% = 1020 MB*



             To by pro slušný řadič / diskové pole neměl být problém, ne?




           * počítá se z (MemFree + Cached – Mapped) – viz. /proc/meminfo
interakce s page cache (2)

   řekněme že zapíšete 1GB dat …

    ve skutečnosti musíte zapsat > 2GB
     ☐   1GB data, 1GB pro WAL, overhead (metadata)


   různá povaha zápisů
     ☐   do WAL sekvenčně
     ☐   datových souborů (CHECKPOINT) mix (náhodně + sekvenčně)


   standardní 7.2k SATA disk zvládne zhruba zápis
     ☐   60MB/s sekvenčně
     ☐   0.5MB/s náhodně
dopad checkpointu (tps)
dopad checkpointu (latence)
stupňování problémů s page cache

1. zapisujete velký objem dat (např. noční load / batch)


2. dosáhnete dirty_background_ratio
       pdflush začne zapisovat na disk
       DB zapisuje do page cache
       disk nestíhá čistit cache


3. dosáhnete dirty_ratio
    
        pdflush zapisuje na disk
       DB musí zapisovat přímo na disk (bez cache)


4. peklo
Ladění checkpointů
                   page cache, databáze, aplikace ...




Hardware people always seem convinced that any problem can be fixed by
more complex software (software people, in contrast, know that problems
can always be solved by more hardware).
                                           [TheRaven64 @ slashdot.org]
Ladění …

   latence vs. propustnost
     ☐   latence – reakce na jednotlivé požadavky
     ☐   propustnost – celkový počet požadavků
     ☐   většinou nemůžete mít oboje :-(


   cíle snahy
     ☐   nenutit DB k checkpointu příliš často (kumulace změn)
     ☐   když už je nutný checkpoint, tak postupný (spread)
     ☐   omezení množství zápisů (vhodnou úpravou algoritmu, MVCC)
     ☐   eliminace „šoku“ page cache (náhle zápis velkého objemu)
informace o checkpointech

log_checkpoints = on

    první co byste měli udělat
   základní informace (interval, kolik bufferů, trvání sync)
   umožňuje korelovat data oproti jiným datům (běžel checkpoint?)


pg_stat_bgwriter
   agregovaná data (kolik checkpointů jakého typu, kolik bufferů)

    ideální pro sběr snapshotů (kolik snapshotů za hodinu apod.)
   informace i o dalších zdrojích zápisů (bgwriter, backendy)
informace o checkpointech

log_checkpoints

     2011-10-10 14:20:50 LOG: checkpoint starting: time
     2011-10-10 14:21:45 LOG: checkpoint complete: wrote 7231
          buffers (1.1%); 0 transaction log file(s) added, 0 removed,
          2 recycled; write=29.911 s, sync=24.899 s, total=55.037 s


pg_stat_bgwriter

 checkpoints_timed | checkpoints_req | buffers_checkpoint | buffers_clean
             3.236 |         83.044 |       1.376.460.896 |    59.124.159

  maxwritten_clean | buffers_backend | buffers_alloc
           304.410 |     285.595.787 | 6.643.047.623
operační systém

   souborový systém s rozumným fsync chováním
     ☐   měl by umět fsync na úrovni souborů
     ☐   xfs, ext4, …


   snížení „dirty“ limitů (menší objemy, častěji)
     ☐   dirty_background_ratio = 2 (viděl jsem i 0)
     ☐   dirty_ratio = 5
     ☐   dirty_expire_centisecs = 500 (5 vteřin)
     ☐   případně „_bytes“ varianty (po upgrade RAM stále platí)
konfigurace PostgreSQL

přímo konfigurace checkpointů

    checkpoint_segments
   checkpoint_completion_target
   checkpoint_timeout


nepřímý dopad
   wal_level

    shared_buffers
   background writer
segments / timeout

checkpoint_segments = 3

    výchozí hodnota je velmi nízká (jen 48MB dat)
   zvýšení omezí frekvenci „xlog“ checkpointů (není místo ve WAL)


checkpoint_timeout = 5 min
   zvýšení maximální doby mezi checkpointy (maximum 1h)


důsledky zvýšení
   možnost opakované modifikace bloku mezi checkpointy (snížení I/O)
   prodloužení recovery v případě pádu (aplikace WAL segmentů od posledního
    checkpointu)
completion_target

checkpoint_completion_target
 
     před verzí 8.3 se při checkpointu jelo „na plný plyn“ (hodně I/O)
    nově se zápisy rozloží na dobu dalšího checkpointu (timed i xlog)


příklad
    vypršel timeout (5 minut), 540 MB dat k zápisu (v shared buffers)
    completion_target * timeout = 0.9 * 300s = 270s (konec zápisu)
 
     540 MB / 270 s = 2 MB/s (průměrná rychlost)


důsledky
    zvýšení počtu segmentů (cca na dvojnásobek)
Old-style checkpointy
                                                            540 MB k zápisu, 300s timeout, nárazově
               600                                                                                                                        25

               500
                                                                                                                                          20

               400




                                                                                                                                               rychlost [MB/s]
zapsáno [MB]




                                                                                                                                          15
                                                                                                                                                                 rychlost
               300
                                                                                                                                                                 zapsáno
                                                                                                                                          10
               200

                                                                                                                                          5
               100

                0                                                                                                                         0
                 0

                     30

                          60

                               90




                                                        0

                                                              0

                                                                    0

                                                                          0

                                                                                0

                                                                                      0




                                                                                                  0

                                                                                                        0

                                                                                                              0

                                                                                                                    0

                                                                                                                          0

                                                                                                                                0

                                                                                                                                      0
                                      0

                                            0

                                                  0




                                                                                            0
                                    12

                                          15

                                                18

                                                      21

                                                            24

                                                                  27

                                                                        30

                                                                              33

                                                                                    36

                                                                                          39

                                                                                                42

                                                                                                      45

                                                                                                            48

                                                                                                                  51

                                                                                                                        54

                                                                                                                              57

                                                                                                                                    60
                                                                        čas [s]
                                                                   Spread checkpoints
                                                 540MB k zápisu, 300s timeout => 2 MB/s průměrná rychlost
               600                                                                                                                        25

               500
                                                                                                                                          20

               400




                                                                                                                                               rychlost [MB/s]
zapsáno [MB]




                                                                                                                                          15
                                                                                                                                                                 rychlost
               300
                                                                                                                                                                 zapsáno
                                                                                                                                          10
               200

                                                                                                                                          5
               100

                0                                                                                                                         0
                 0

                     30

                          60

                               90




                                                        0

                                                              0

                                                                    0

                                                                          0

                                                                                0

                                                                                      0




                                                                                                  0

                                                                                                        0

                                                                                                              0

                                                                                                                    0

                                                                                                                          0

                                                                                                                                0

                                                                                                                                      0
                                      0

                                            0

                                                  0




                                                                                            0
                                    12

                                          15

                                                18

                                                      21

                                                            24

                                                                  27

                                                                        30

                                                                              33

                                                                                    36

                                                                                          39

                                                                                                42

                                                                                                      45

                                                                                                            48

                                                                                                                  51

                                                                                                                        54

                                                                                                                              57

                                                                                                                                    60
                                                                        čas [s]
wal_level

   ne vždy je třeba „wal_level = archive“
     ☐   nemáte standby
     ☐   nechcete PITR (Point-In-Time-Recovery)
   „wal_level = minimal“ omezí objem WAL (u některých operací)
     ☐   CREATE TABLE AS
     ☐   CREATE INDEX
     ☐   CLUSTER
     ☐   COPY (do nové tabulky – i partition je tabulka)

    může velmi výrazně zlepšit load dat apod.
     ☐   ostatní transakce novou relaci nevidí
     ☐   data jdou přímo na disk (ne do buffers)
shared_buffers

   občas se doporučuje zmenšit shared buffers (méně dat k zápisu)
     ☐   spíše zastaralá (pre-8.3) alternativa k spread checkpointům
     ☐   kombinace s agresivní konfigurací bgwriteru
     ☐
         http://www.westnet.com/~gsmith/content/postgresql/chkp-bgw-83.htm


   při čtení to většinou nevadí (díky page cache)


   při zápisu může mít negativní důsledky
     ☐   backendy jsou nuceny zapisovat data samy (tj. iowait)
     ☐   projevuje se jako růst pg_stat_bgwriter.buffers_backend
shared_buffers

moje doporučení (>= 8.3)


1. nastavit konzervativní hodnotu
2. postupně zvyšovat a sledovat výkon
       cache „hit ratio“ (bohužel bez page cache)
       výkon aplikace (ideální metrika)
3. zastavit jakmile výkon přestane růst
4. případně agresivnější bgwriter (snížení hodnot backend_clean)
5. v každém kroku jen jedna změna


               minimální velikost shared buffers, maximální efektivita
Ladění … hardware

řadič s write cache
    nejlépe s baterkou (ale dle libosti)
    cache má omezenou velikost, nezvládne všechno
    spread checkpointy výrazně zlepšují (menší objemy, průběžně)
Ladění … hardware

SSD
     víceméně řeší problém s náhodným přístupem (čtení vs. zápisy)
     omezený počet zápisů (problémy s checkpointy => write-heavy db)
     dražší (?)
     spolehlivost (?)
7.2k SATA




Intel 320 SSD
Q&A

Contenu connexe

Tendances

Implementace Openstacku v LMC – představy vs. realita
Implementace Openstacku v LMC – představy vs. realita Implementace Openstacku v LMC – představy vs. realita
Implementace Openstacku v LMC – představy vs. realita Jaroslav Jacjuk
 
Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)Tomas Vondra
 
Novinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBTomas Vondra
 
David Dvořák: LTSP a Bakaláři ve Wine
David Dvořák: LTSP a Bakaláři ve WineDavid Dvořák: LTSP a Bakaláři ve Wine
David Dvořák: LTSP a Bakaláři ve WineLiberix, o.p.s.
 
MSI R9 270X HAWK
MSI R9 270X HAWKMSI R9 270X HAWK
MSI R9 270X HAWKMSI
 
Oracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS SolarisOracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS SolarisMartin Cerveny
 

Tendances (8)

Implementace Openstacku v LMC – představy vs. realita
Implementace Openstacku v LMC – představy vs. realita Implementace Openstacku v LMC – představy vs. realita
Implementace Openstacku v LMC – představy vs. realita
 
Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)
 
Fedora 24-rpi-kotek
Fedora 24-rpi-kotekFedora 24-rpi-kotek
Fedora 24-rpi-kotek
 
Novinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONB
 
David Dvořák: LTSP a Bakaláři ve Wine
David Dvořák: LTSP a Bakaláři ve WineDavid Dvořák: LTSP a Bakaláři ve Wine
David Dvořák: LTSP a Bakaláři ve Wine
 
Red Hat Storage Server presentation
Red Hat Storage Server presentationRed Hat Storage Server presentation
Red Hat Storage Server presentation
 
MSI R9 270X HAWK
MSI R9 270X HAWKMSI R9 270X HAWK
MSI R9 270X HAWK
 
Oracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS SolarisOracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS Solaris
 

Similaire à Checkpoint (CSPUG 22.11.2011)

Principy cachování ve WordPressu
Principy cachování ve WordPressuPrincipy cachování ve WordPressu
Principy cachování ve WordPressuDavid Biňovec
 
Teorie testy1
Teorie testy1Teorie testy1
Teorie testy1dejfbart
 
Architektura databáze Oracle
Architektura databáze OracleArchitektura databáze Oracle
Architektura databáze OracleTomas Solar
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemMartin Cerveny
 
Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...
Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...
Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...LTP-portal-cz
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)almadcz
 
Škálování, optimalizaci a zálohování databáze MySQL
Škálování, optimalizaci a zálohování databáze MySQLŠkálování, optimalizaci a zálohování databáze MySQL
Škálování, optimalizaci a zálohování databáze MySQLJakub Vrána
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devuVašek Purchart
 
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Péhápkaři
 
Czech Sun Training Day 2009 - Solaris
Czech Sun Training Day 2009 - SolarisCzech Sun Training Day 2009 - Solaris
Czech Sun Training Day 2009 - SolarisMartin Cerveny
 
WordCamp Brno 2017 - rychlý a bezpečný web
WordCamp Brno 2017  - rychlý a bezpečný webWordCamp Brno 2017  - rychlý a bezpečný web
WordCamp Brno 2017 - rychlý a bezpečný webVladimír Smitka
 
České Lotus Notes 7 jsou zde!
České Lotus Notes 7 jsou zde!České Lotus Notes 7 jsou zde!
České Lotus Notes 7 jsou zde!Martin Humpolec
 
Přednáška V3C jaro 2010 (IIVOS 2)
Přednáška V3C jaro 2010 (IIVOS 2)Přednáška V3C jaro 2010 (IIVOS 2)
Přednáška V3C jaro 2010 (IIVOS 2)Jaroslav Prodelal
 
Datová úložiště CESNET
Datová úložiště CESNETDatová úložiště CESNET
Datová úložiště CESNETCESNET
 
Czech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - SolarisCzech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - SolarisMartin Cerveny
 
Zmrakování pružné včely
Zmrakování pružné včelyZmrakování pružné včely
Zmrakování pružné včelyfersman
 

Similaire à Checkpoint (CSPUG 22.11.2011) (20)

Principy cachování ve WordPressu
Principy cachování ve WordPressuPrincipy cachování ve WordPressu
Principy cachování ve WordPressu
 
Teorie testy1
Teorie testy1Teorie testy1
Teorie testy1
 
Architektura databáze Oracle
Architektura databáze OracleArchitektura databáze Oracle
Architektura databáze Oracle
 
Czech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise SystemCzech Sun Training Day 2008 - Java Enterprise System
Czech Sun Training Day 2008 - Java Enterprise System
 
Lotus Notes 7
Lotus Notes 7Lotus Notes 7
Lotus Notes 7
 
Tahak postgresql
Tahak postgresqlTahak postgresql
Tahak postgresql
 
Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...
Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...
Šárka Hálečková a Tomáš Burda - Řešení pro dlouhodobou archivaci v Národní kn...
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
Škálování, optimalizaci a zálohování databáze MySQL
Škálování, optimalizaci a zálohování databáze MySQLŠkálování, optimalizaci a zálohování databáze MySQL
Škálování, optimalizaci a zálohování databáze MySQL
 
Optimalizace Symfony na devu
 Optimalizace Symfony na devu Optimalizace Symfony na devu
Optimalizace Symfony na devu
 
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)
 
Czech Sun Training Day 2009 - Solaris
Czech Sun Training Day 2009 - SolarisCzech Sun Training Day 2009 - Solaris
Czech Sun Training Day 2009 - Solaris
 
WordCamp Brno 2017 - rychlý a bezpečný web
WordCamp Brno 2017  - rychlý a bezpečný webWordCamp Brno 2017  - rychlý a bezpečný web
WordCamp Brno 2017 - rychlý a bezpečný web
 
České Lotus Notes 7 jsou zde!
České Lotus Notes 7 jsou zde!České Lotus Notes 7 jsou zde!
České Lotus Notes 7 jsou zde!
 
2 prz
 2 prz 2 prz
2 prz
 
Přednáška V3C jaro 2010 (IIVOS 2)
Přednáška V3C jaro 2010 (IIVOS 2)Přednáška V3C jaro 2010 (IIVOS 2)
Přednáška V3C jaro 2010 (IIVOS 2)
 
Datová úložiště CESNET
Datová úložiště CESNETDatová úložiště CESNET
Datová úložiště CESNET
 
Czech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - SolarisCzech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - Solaris
 
Zmrakování pružné včely
Zmrakování pružné včelyZmrakování pružné včely
Zmrakování pružné včely
 
Kdyby/Redis
Kdyby/RedisKdyby/Redis
Kdyby/Redis
 

Plus de Tomas Vondra

CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)Tomas Vondra
 
CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?Tomas Vondra
 
PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6Tomas Vondra
 
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016Tomas Vondra
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
Performance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondTomas Vondra
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
PostgreSQL performance archaeology
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeologyTomas Vondra
 
Český fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyČeský fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyTomas Vondra
 
SSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsyncSSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsyncTomas Vondra
 
Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Tomas Vondra
 
PostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringPostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringTomas Vondra
 

Plus de Tomas Vondra (14)

CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)
 
Data corruption
Data corruptionData corruption
Data corruption
 
CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?
 
DB vs. encryption
DB vs. encryptionDB vs. encryption
DB vs. encryption
 
PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6
 
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
Performance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyond
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
PostgreSQL performance archaeology
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeology
 
Český fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyČeský fulltext a sdílené slovníky
Český fulltext a sdílené slovníky
 
SSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsyncSSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsync
 
Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)
 
PostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringPostgreSQL / Performance monitoring
PostgreSQL / Performance monitoring
 

Checkpoint (CSPUG 22.11.2011)

  • 1. Pohádka o checkpointu Co se děje při checkpointu, možnosti a ladění. CSPUG Praha, 22. 11. 2011 Tomáš Vondra, tv@fuzzy.cz
  • 2. Co je to checkpoint?  činnost nutná kvůli samostatnému transakčnímu logu (WAL) 1) načtení dat do shared buffers WAL 2) zápis do WAL (disk) 2 3 WAL 3) úprava shared buffers (RAM) shared buffers WAL 4) sync dat ve WAL (commit) WAL 5) checkpoint (zápis dat) 4 1 5 disk  nejčastější problém u databází s netriviálním počtem změn  ne zcela jednoduchý monitoring a určení příčiny problému  interakce s operačním systémem (pdflush v Linuxu apod)
  • 3. Kdy k checkpointu dochází?  po vyčerpání počtu transakčních logů (xlog) checkpoint_segments = 64  po vypršení časového limitu (timed) checkpoint_timeout = 5m  na vyžádání uživatele CHECKPOINT
  • 4. Interakce s OS (Linux)  je to trochu složitější kvůli interakci s OS  operační systémy vesměs mají cache pro disky (page cache)  výhody cache – opakovaný zápis, řazení zápisů (sekvenční)  zápis na disk až při fsync WAL  Linux – pdflush (/proc/sys/vm) WAL shared buffers ☐ dirty_background_ratio WAL ☐ dirty_ratio WAL ☐ dirty_expire_centisecs page cache disk  http://www.westnet.com/~gsmith/content/linux-pdflush.htm
  • 5. page cache v Linuxu  vm.dirty_background_ratio ☐ „dirty“ limit než pdflush začne zapisovat na pozadí ☐ bývalo 10%, dnes 5%  vm.dirty_ratio ☐ „dirty“ limit než procesy musí zapisovat přímo (bez cache) ☐ bývalo 40%, dnes 10%  vm.dirty_expire_centisecs ☐ timeout jak dlouho smí být „dirty“ data v cache ☐ standardně 30s
  • 6. interakce s page cache příklad: server s 16GB paměti (dnes víceméně minimum)  4 GB - shared buffers  1 GB - OS + různé blbosti  11 GB – page cache (maximum) ☐ dirty_background_ratio = 5% = 560 MB* ☐ dirty_ratio = 10% = 1020 MB* To by pro slušný řadič / diskové pole neměl být problém, ne? * počítá se z (MemFree + Cached – Mapped) – viz. /proc/meminfo
  • 7. interakce s page cache (2)  řekněme že zapíšete 1GB dat …  ve skutečnosti musíte zapsat > 2GB ☐ 1GB data, 1GB pro WAL, overhead (metadata)  různá povaha zápisů ☐ do WAL sekvenčně ☐ datových souborů (CHECKPOINT) mix (náhodně + sekvenčně)  standardní 7.2k SATA disk zvládne zhruba zápis ☐ 60MB/s sekvenčně ☐ 0.5MB/s náhodně
  • 9.
  • 10.
  • 12.
  • 13.
  • 14. stupňování problémů s page cache 1. zapisujete velký objem dat (např. noční load / batch) 2. dosáhnete dirty_background_ratio  pdflush začne zapisovat na disk  DB zapisuje do page cache  disk nestíhá čistit cache 3. dosáhnete dirty_ratio  pdflush zapisuje na disk  DB musí zapisovat přímo na disk (bez cache) 4. peklo
  • 15. Ladění checkpointů page cache, databáze, aplikace ... Hardware people always seem convinced that any problem can be fixed by more complex software (software people, in contrast, know that problems can always be solved by more hardware). [TheRaven64 @ slashdot.org]
  • 16. Ladění …  latence vs. propustnost ☐ latence – reakce na jednotlivé požadavky ☐ propustnost – celkový počet požadavků ☐ většinou nemůžete mít oboje :-(  cíle snahy ☐ nenutit DB k checkpointu příliš často (kumulace změn) ☐ když už je nutný checkpoint, tak postupný (spread) ☐ omezení množství zápisů (vhodnou úpravou algoritmu, MVCC) ☐ eliminace „šoku“ page cache (náhle zápis velkého objemu)
  • 17. informace o checkpointech log_checkpoints = on  první co byste měli udělat  základní informace (interval, kolik bufferů, trvání sync)  umožňuje korelovat data oproti jiným datům (běžel checkpoint?) pg_stat_bgwriter  agregovaná data (kolik checkpointů jakého typu, kolik bufferů)  ideální pro sběr snapshotů (kolik snapshotů za hodinu apod.)  informace i o dalších zdrojích zápisů (bgwriter, backendy)
  • 18. informace o checkpointech log_checkpoints 2011-10-10 14:20:50 LOG: checkpoint starting: time 2011-10-10 14:21:45 LOG: checkpoint complete: wrote 7231 buffers (1.1%); 0 transaction log file(s) added, 0 removed, 2 recycled; write=29.911 s, sync=24.899 s, total=55.037 s pg_stat_bgwriter checkpoints_timed | checkpoints_req | buffers_checkpoint | buffers_clean 3.236 | 83.044 | 1.376.460.896 | 59.124.159 maxwritten_clean | buffers_backend | buffers_alloc 304.410 | 285.595.787 | 6.643.047.623
  • 19. operační systém  souborový systém s rozumným fsync chováním ☐ měl by umět fsync na úrovni souborů ☐ xfs, ext4, …  snížení „dirty“ limitů (menší objemy, častěji) ☐ dirty_background_ratio = 2 (viděl jsem i 0) ☐ dirty_ratio = 5 ☐ dirty_expire_centisecs = 500 (5 vteřin) ☐ případně „_bytes“ varianty (po upgrade RAM stále platí)
  • 20. konfigurace PostgreSQL přímo konfigurace checkpointů  checkpoint_segments  checkpoint_completion_target  checkpoint_timeout nepřímý dopad  wal_level  shared_buffers  background writer
  • 21. segments / timeout checkpoint_segments = 3  výchozí hodnota je velmi nízká (jen 48MB dat)  zvýšení omezí frekvenci „xlog“ checkpointů (není místo ve WAL) checkpoint_timeout = 5 min  zvýšení maximální doby mezi checkpointy (maximum 1h) důsledky zvýšení  možnost opakované modifikace bloku mezi checkpointy (snížení I/O)  prodloužení recovery v případě pádu (aplikace WAL segmentů od posledního checkpointu)
  • 22. completion_target checkpoint_completion_target  před verzí 8.3 se při checkpointu jelo „na plný plyn“ (hodně I/O)  nově se zápisy rozloží na dobu dalšího checkpointu (timed i xlog) příklad  vypršel timeout (5 minut), 540 MB dat k zápisu (v shared buffers)  completion_target * timeout = 0.9 * 300s = 270s (konec zápisu)  540 MB / 270 s = 2 MB/s (průměrná rychlost) důsledky  zvýšení počtu segmentů (cca na dvojnásobek)
  • 23. Old-style checkpointy 540 MB k zápisu, 300s timeout, nárazově 600 25 500 20 400 rychlost [MB/s] zapsáno [MB] 15 rychlost 300 zapsáno 10 200 5 100 0 0 0 30 60 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 čas [s] Spread checkpoints 540MB k zápisu, 300s timeout => 2 MB/s průměrná rychlost 600 25 500 20 400 rychlost [MB/s] zapsáno [MB] 15 rychlost 300 zapsáno 10 200 5 100 0 0 0 30 60 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 čas [s]
  • 24. wal_level  ne vždy je třeba „wal_level = archive“ ☐ nemáte standby ☐ nechcete PITR (Point-In-Time-Recovery)  „wal_level = minimal“ omezí objem WAL (u některých operací) ☐ CREATE TABLE AS ☐ CREATE INDEX ☐ CLUSTER ☐ COPY (do nové tabulky – i partition je tabulka)  může velmi výrazně zlepšit load dat apod. ☐ ostatní transakce novou relaci nevidí ☐ data jdou přímo na disk (ne do buffers)
  • 25. shared_buffers  občas se doporučuje zmenšit shared buffers (méně dat k zápisu) ☐ spíše zastaralá (pre-8.3) alternativa k spread checkpointům ☐ kombinace s agresivní konfigurací bgwriteru ☐ http://www.westnet.com/~gsmith/content/postgresql/chkp-bgw-83.htm  při čtení to většinou nevadí (díky page cache)  při zápisu může mít negativní důsledky ☐ backendy jsou nuceny zapisovat data samy (tj. iowait) ☐ projevuje se jako růst pg_stat_bgwriter.buffers_backend
  • 26. shared_buffers moje doporučení (>= 8.3) 1. nastavit konzervativní hodnotu 2. postupně zvyšovat a sledovat výkon  cache „hit ratio“ (bohužel bez page cache)  výkon aplikace (ideální metrika) 3. zastavit jakmile výkon přestane růst 4. případně agresivnější bgwriter (snížení hodnot backend_clean) 5. v každém kroku jen jedna změna minimální velikost shared buffers, maximální efektivita
  • 27. Ladění … hardware řadič s write cache  nejlépe s baterkou (ale dle libosti)  cache má omezenou velikost, nezvládne všechno  spread checkpointy výrazně zlepšují (menší objemy, průběžně)
  • 28. Ladění … hardware SSD  víceméně řeší problém s náhodným přístupem (čtení vs. zápisy)  omezený počet zápisů (problémy s checkpointy => write-heavy db)  dražší (?)  spolehlivost (?)
  • 30. Q&A