SSD vs HDD / WAL, indexes and fsync

T
Tomas VondraSoftware developer, Consultant at 2ndQuadrant
SSD vs. HDD / WAL, indexy a fsync
   Prague PostgreSQL Developers Day 2012

            Tomáš Vondra (tv@fuzzy.cz)
What a great day for science!
Otázky

    DB = data + indexy + transakční log (WAL)

●   Co umístit na samostatný disk?
●
    Co patří na HDD a co na SSD?
●   Jakou fsync metodu zvolit?
●
    Jak to závisí na typu zátěže?
Charakteristiky disků
7.2k SATA spinners
●   ~ 120 IOPS
●   sekvenčně: ~ 100 MB/s
●   náhodně: ~ 0.5 MB/s
●   512B / 4kB sektory, běžně kapacita několik TB


SSDs (Intel 320 120GB)
●   (deseti)tisíce IOPS
●   čtení: ~ 250 MB/s
●   zápis: ~ 120 MB/s
●   512kB bloky, kapacita desítky / stovky GB
Consumer-level ...
●   jen „obyčejné“ SATA-II disky
●   demonstrace obecných I/O charakteristik
●   aplikovatelné na srovnatelný hw
    ●   15k SAS disky, podobné SATA SSD disky, …


●   obtížnější aplikace na
    ●   specializovaná SSD (fusion-io, VeloDrive/Z-Drive, ...)
    ●   RAID pole s dobrým řadičem (write cache)
    ●   výrazně odlišný workload
Benchmarky
OLTP (pgbench)
  ●   hodně „malých“ transakcí (typicky přes primární klíče)
  ●   počet transakcí za vteřinu (tps)
  ●   read-only nebo read-write (50:50, netypický poměr)


TPC-H
  ●   velké dotazy nad velkým objemem dat
  ●   počet vteřin (trvání loadu, vyhodnocení dotazu)
  ●   GROUP BY, velké joiny, … (i hodně náhodného I/O)


                            data >> RAM
Kdybych měl tolik peněz
 jako Bruce Wayne ...
Dosahovat výkon za hromady
 peněz není velké umění.
výkon / cena
výkon / (cena / GB)
$ / GB
HDD (Maxtor DiamondMax 21)
●   500 GB SATA II 7.2k ~ 2000 Kč => 4 Kč / GB


SSD (Intel 320)
●   120 GB SATA II ~ 4200 Kč => 40 Kč / GB


kombinace (naivní model)
●   vážený součet podle objemu (indexy, WAL, data, ...)
●   20% HDD + 80% SSD => 33 Kč / GB
●   80% HDD + 20% SSD => 11 Kč / GB
výkon / (cena / GB)
pgbench na HDD
●   výkon 120 tps
●   cena 4 Kč / GB
●   metrika = 120 / 4 = 30


pgbench na SSD
●   výkon 4000 tps
●   cena 40 Kč / GB
●   metrika = 4000 / 40 = 100


                                100 > 30
78,31% všech statistik je vymyšlených
Důležitá jsou vaše čísla!
data vs. indexy
OLTP (pgbench)
pgbench s oddělením dat a indexů
              read-only i read-write [tps, vyšší hodnoty jsou lepší]

    6000

    5000

    4000

    3000

    2000

    1000

         0
                               1




                                                                                         -1
                 -2




                                                -1




                                                             2




                                                                           1
                                d-




                                                              d-




                                                                            d-




                                                                                       sd
               sd




                                              sd
                              hd




                                                            hd




                                                                          hd




                                                                                        s
                s




                                               s
                                            X=




                                                                                     X=
             X=




                           X=




                                                         X=




                                                                       X=
                                       ID




                                                                                 ID
         ID




                       ID




                                                      ID




                                                                   ID




                                                                                 2
      -2




                                       -2
                      -2




                                                     2




                                                                   2




                                                                                 -
                                                    -




                                                                   -



                                                                               dd
    sd




                                     sd
                    sd




                                                  dd




                                                                 dd
    =s




                                 =s




                                                                             =h
                  =s




                                                =h




                                                               =h
                               TA
  TA




                TA




                                                                           TA
                                              TA




                                                             TA
DA




                             DA
              DA




                                                                         DA
                                             DA




                                                           DA




                                  read-only          read-write
pgbench s oddělením dat a indexů (80:20)

         read-only i read-write [výkon/$, vyšší hodnoty jsou lepší]

     160
     140
     120
     100
         80
         60
         40
         20
          0
                                1




                                                                                          -1
                  -2




                                                 -1




                                                              2




                                                                            1
                                 d-




                                                               d-




                                                                             d-




                                                                                        sd
                sd




                                               sd
                               hd




                                                             hd




                                                                           hd




                                                                                         s
                 s




                                                s
                                             X=




                                                                                      X=
              X=




                            X=




                                                          X=




                                                                        X=
                                        ID




                                                                                  ID
         ID




                        ID




                                                       ID




                                                                    ID




                                                                                  2
      -2




                                        -2
                       -2




                                                      2




                                                                    2




                                                                                  -
                                                     -




                                                                    -



                                                                                dd
    sd




                                      sd
                     sd




                                                   dd




                                                                  dd
    =s




                                  =s




                                                                              =h
                   =s




                                                 =h




                                                                =h
                                TA
  TA




                 TA




                                                                            TA
                                               TA




                                                              TA
DA




                              DA
               DA




                                                                          DA
                                              DA




                                                            DA




                                   read-only          read-write
DSS/DWH (TPC-H)
DA
  TA
    =s
            sd




                                               100
                                                     150
                                                           200
                                                                 250
                                                                       300




                                          50

                                      0
              -2
                   ID
                        X=
DA                         s   sd
  TA                             -2
    =s
         sd
           -2
                   ID
                        X=
DA                         hd
                             d-
     TA                           1
       =s
            sd
              -2
                   ID
                        X=
DA                         s   sd
     TA                          -1
       =h
         dd
           -   2
                   ID
                        X=
DA                         hd
  TA                         d-
    =h                            2
      dd
        -      2
                                                                                                                                      TPC-H výkon / dotaz č. 17




                   ID
                        X=
DA                         hd
                             d-
  TA
    =h                            1
      dd
        -
                                                                             počet vteřin na vyhodnocení [nižší hodnoty jsou lepší]




               2
                   ID
                        X=
                           s   sd
                                 -1
DA
  TA
    =s
            sd
                                      10




                                       0
                                       1
                                       2
                                       3
                                       4
                                       5
                                       6
                                       7
                                       8
                                       9
              -2
                   ID
                        X=
DA                         s   sd
  TA                             -2
    =s
         sd
           -2
                   ID
                        X=
DA                         hd
                             d-
     TA                           1
       =s
            sd
              -2
                   ID
                        X=
DA                         s   sd
  TA                             -1
    =h
      dd
        -     2
                   ID
                        X=
DA                         hd
  TA                         d-
    =h                            2
      dd
        -     2
                   ID
                                           výkon / $ [vyšší hodnoty jsou lepší]




                        X=
DA                         hd
                                                                                  TPC-H výkon / dotaz č. 17 (80:20)




                             d-
  TA
    =h                            1
      dd
        -     2
                   ID
                        X=
                           s   sd
                                 -1
data vs. indexy
SSD
●   výborná investice pro OLTP zátěž (pgbench)
●   ne tak dobré pro DWS/DSS-like workload


HDD
●   OLTP výkon nemůže konkurovat SSD (ani výkon/cena)
●   v DWH často zdatně konkuruje SSD


kombinace SSD a HDD
●   nic moc (když musíte, tak na SSD dejte data)
data vs. WAL
Write Ahead Log
●   aka transakční log
    ●   aka XLog
    ●
        aka REDO
●
    informace o modifikacích dat
●
    životně důležité pro recovery
●   při dotazování se nepoužívá
OLTP (pgbench)
oddělení dat a WAL

        pgbench (read-only i read-write) [počet transakcí za vteřinu]

     4500
     4000
     3500
     3000
     2500
     2000
     1500
     1000
      500
        0
              1




                                           -1




                                                                               -1
                            -2




                                                       2




                                                                   1
               -




                                                       -




                                                                    -
             dd




                                         sd




                                                     dd




                                                                  dd




                                                                             sd
                          sd




                                      =s




                                                                            =s
                        =s
           =h




                                                   =h




                                                                =h




                                                                          AL
                                    AL
                      AL
         AL




                                                 AL




                                                              AL
                     W




                                   W




                                                                         W
        W




                                                W




                                                             W




                                                                        2
                     -2




                                   -2
       -2




                                                2




                                                             2




                                                                         -
                                                -




                                                            -




                                                                       dd
                                 sd
                   sd
     sd




                                              dd




                                                          dd
                             =s
                =s




                                                                     =h
   =s




                                            =h




                                                        =h
                           TA
              TA
 TA




                                                                   TA
                                          TA




                                                      TA
            DA




                          DA
DA




                                                                 DA
                                        DA




                                                    DA




                                  read-only     read-write
DA
                  TA
                    =s
                         sd
                           -2




                                                                       100
                                                                             120
                                                                                   140




                                                   20
                                                        40
                                                             60
                                                                  80




                                               0
                                W
                                 AL
                                   =h
             DA                      dd
               TA                      -   1
                 =s
                         sd
                           -2
                                W
                                 AL
             DA                    =s
                                        sd
                  TA                      -2
                    =s
                         sd
                           -2
                                W
                                 AL
             DA                    =s
                                        sd




read-only
               TA                         -1
                 =h
                   dd
                     -     2
                                W
                                 AL
             DA                    =h
                                     dd
               TA
                 =h                    -   2
                                                                                                                                      oddělení dat a WAL




read-write
                   dd
                     -     2
                                W
                                 AL
             DA                    =h
                                     dd
                                       -
                                                                                         pgbench (read-only i read-write) [výkon/$]




               TA
                 =h                        1
                   dd
                     -      2
                                W
                                 AL
                                   =s
                                        sd
                                          -1
data vs. WAL / OLTP
●   data – spousta náhodných přístupů => SSD
●   WAL – sekvenční zápisy => HDD
●   WAL i data na stejném disku => terror :-(
    ●   databáze musí seekovat (přístup k datům)
    ●   důsledek: zápisy do WAL pak nejsou sekvenční
●   skvělá je kombinace data na SSD a WAL na HDD
    ●   rozdíl vs. SSD+SSD ~ rychlost sekvenčního zápisu
        (HDD má jen 70 MB/s, SSD má 130 MB/s)
    ●   s rychlejším HDD diskem (RAID) => asi ideál :-)
DSS/DWH (TPC-H)
TPC-H benchmark / load

     příprava dat (load, apod.) [počet vteřin, nižší hodnoty jsou lepší]

         800
         700
         600
         500
         400
         300
         200
         100
           0
                               -2




                                            -1
                 1




                                                        2




                                                                     1




                                                                                  -1
                                                        -




                                                                    -
                 -



                             sd




                                          sd




                                                      dd




                                                                  dd




                                                                                sd
               dd




                           =s




                                        =s




                                                                             =s
                                                    =h




                                                                =h
             =h




                         AL




                                      AL




                                                                           AL
                                                  AL




                                                              AL
           AL




                        W




                                     W




                                                                          W
          W




                                                 W




                                                             W
                        -2




                                    -2




                                                                         2
                                                 2




                                                            2
      -2




                                                                          -
                                                 -




                                                             -
                      sd




                                  sd




                                                                        dd
                                               dd




                                                           dd
    sd




                  =s




                                =s




                                                                      =h
    =s




                                             =h




                                                         =h
                TA




                              TA




                                                                    TA
  TA




                                           TA




                                                       TA
               DA




                             DA
DA




                                                                 DA
                                         DA




                                                     DA




               load     primary keys       foreign keys     index     analyze
TPC-H benchmark / load (80:20)

         příprava dat (load, apod.) [výkon/$, vyšší hodnoty jsou lepší]

        80
        70
        60
        50
        40
        30
        20
        10
         0
                                           -1
               1




                            -2




                                                                                -1
                                                       2




                                                                   1
               -




                                                       -




                                                                   -
             dd




                                         sd
                          sd




                                                     dd




                                                                 dd




                                                                              sd
                                      =s
                         =s




                                                                           =s
           =h




                                                   =h




                                                               =h
                                    AL




                                                                         AL
                       AL
         AL




                                                 AL




                                                             AL
                      W




                                   W




                                                                        W
        W




                                                W




                                                            W
                     -2




                                   -2




                                                                       2
       -2




                                                2




                                                           2




                                                                        -
                                                -




                                                            -
                                 sd




                                                                      dd
                   sd
     sd




                                              dd




                                                          dd
                             =s
                 =s




                                                                    =h
   =s




                                            =h




                                                        =h
                           TA
               TA
 TA




                                                                  TA
                                          TA




                                                      TA
             DA




                          DA
DA




                                                                DA
                                        DA




                                                    DA




             load     primary keys        foreign keys     index    analyze
data vs. WAL / TPC-H setup
●   WAL nijak neovlivňuje dotazy
●
    výkon/$ - pevné disky bezpečně vedou
●
    nižší výkon <=> nižší sekvenční rychlost
●   rychlejší HDD => výkon srovnatelný se SSD
fsync metody
pg_test_fsync
●   srovnání chování různých metod fsyncu
    ●   fsync / open_sync
    ●
        fdatasync / open_datasync
●
    podpora závisí na
    ●
        souborovém systému, verzi kernelu, …
●   vztah na „direct I/O“
    ●   standardně „write + write + … + fsync“ (fs cache)
    ●
        obcházení page cache (ne vždy užitečná - řadiče)
pg_test_fsync / HDD a SSD
                           8kB page writes

140                                                        14000

120                                                        12000

100                                                        10000

 80                                                        8000

 60                                                        6000

 40                                                        4000

 20                                                        2000

  0                                                        0
      fdatasync    open_datasync       fsync   open_sync

                              HDD    SSD
pg_test_fsync / HDD a SSD
                           8kB page writes

140                                                         14000
                  7%
120                                                         12000
                                               7%
100                                                         10000

 80                                                         8000

 60                                                         6000

 40                                                         4000

 20                                                         2000

  0                                                         0
      fdatasync    open_datasync       fsync    open_sync

                              HDD    SSD
OLTP (pgbench)
SSD vs. HDD / read-write pgbench
          počet transakcí za vteřinu [vyšší hodnoty jsou lepší]

60                                                                  1400

50                                                                  1200

                                                                    1000
40
                                                                    800
30
                                                                    600
20
                                                                    400
10                                                                  200

0                                                                   0
     fdatasync    open_datasync          fsync          open_sync

                                hdd    ssd
DSS/DWH (TPC-H)
TPC-H set-up / load dat
             různé fsync metody / wal_level [počet vteřin, nižší hodnoty jsou lepší]

     700
     600
     500
     400
     300
     200
     100
       0
                                  -2




                                  -2



                                  -2



                                  -2
                                  -2




                                  -2




                                  -2



                                  -2
                               dd



                               dd



                               dd



                               dd



                               sd



                               sd




                               sd
                               sd
                            /s



                            /s



                            /s



                            /s
                            /h
                            /h




                            /h



                            /h




                          c



                          c
                          c




                          c
                         c



                         c
         c




                         c


                       yn



                       yn



                       yn



                      yn
      yn



                      yn



                      yn



                      yn


                   as



                   as



                    fs



                   _s
   as



                  as



                   fs



                  _s


                at



                at




               en
at



               at




              en



             fd



            _d
            _d
fd




           op
           op




         en
         en




      op
      op




                                       archive     minimal
fd
            at
               as
                  yn




                                 0
                                     100
                                           200
                                                 300
                                                       400
                                                             500
                                                                   600
                                                                         700
op                   c
   en                 /h
      _d                 dd
         at                 -2
            as
                yn
                   c
                      /h
                         dd
                            -2
             fs
                yn
                   c
                      /h
     op                  dd
        en                  -2
            _s
                yn
                   c
                      /h
       fd                dd
          at                -2
             as
                 yn
op                  c
   en                 /s
      _d                 sd
          at                -2
             as
                 yn
                    c
                      /s
                                                                                                                                                         TPC-H set-up / load dat




                         sd
                            -2
              fs
                 yn
                    c
                      /s
     op                  sd
         en                 -2
             _s
                 yn
                    c
                                                                               různé fsync metody / wal_level [počet vteřin, nižší hodnoty jsou lepší]




                      /s
                         sd
                            -2
SSD vs HDD / WAL, indexes and fsync
fsync metody
●   značný rozdíl mezi sync a datasync ~ 20%
●
    open_* - žádný měřitelný efekt
●
    wal_level = minimal
    ●
        cca 30% zrychlení při loadu dat
    ●   pokud nepotřebujete „archive“
Cloud?
There’s a rumor that Stewart Smith and
  I might do a Q&A about databases in
 the cloud. If it happens, it will involve
     lots of pessimism and swearing.

          Selena Deckelmann

            http://chesnok.com
Závěrem ...
Závěrem ...
●   přínos SSD závisí na workloadu (OLTP)
    ●   pgbench je extrém (zápis:čtení ~ 1:1)
●
    SSD výrazně více zatěžují CPU než HDD
●
    spolehlivost SSD je otázka
●
    HDD i SSD se skládají z „bloků“
    ●   HDD mají plotny, SSD mají moduly (např. 40 GB)
    ●   více „bloků“ => vyšší sekvenční výkon
●   rychlejší disky (15k SAS) – horší cena/výkon
Každý systém má bottleneck ...
1 of 48

Recommended

Český fulltext a sdílené slovníky by
Český fulltext a sdílené slovníkyČeský fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyTomas Vondra
955 views14 slides
Full Text Search In PostgreSQL by
Full Text Search In PostgreSQLFull Text Search In PostgreSQL
Full Text Search In PostgreSQLKarwin Software Solutions LLC
60.2K views51 slides
CREATE STATISTICS - What is it for? (PostgresLondon) by
CREATE STATISTICS - What is it for? (PostgresLondon)CREATE STATISTICS - What is it for? (PostgresLondon)
CREATE STATISTICS - What is it for? (PostgresLondon)Tomas Vondra
1.9K views36 slides
Data corruption by
Data corruptionData corruption
Data corruptionTomas Vondra
1.8K views34 slides
CREATE STATISTICS - what is it for? by
CREATE STATISTICS - what is it for?CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?Tomas Vondra
481 views35 slides
DB vs. encryption by
DB vs. encryptionDB vs. encryption
DB vs. encryptionTomas Vondra
111 views19 slides

More Related Content

More from Tomas Vondra

PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAlt by
PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAltPostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAlt
PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAltTomas Vondra
938 views49 slides
PostgreSQL on EXT4, XFS, BTRFS and ZFS by
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
6.5K views46 slides
Performance improvements in PostgreSQL 9.5 and beyond by
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondTomas Vondra
10.3K views41 slides
Postgresql na EXT3/4, XFS, BTRFS a ZFS by
Postgresql na EXT3/4, XFS, BTRFS a ZFSPostgresql na EXT3/4, XFS, BTRFS a ZFS
Postgresql na EXT3/4, XFS, BTRFS a ZFSTomas Vondra
1.3K views40 slides
PostgreSQL on EXT4, XFS, BTRFS and ZFS by
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
47.9K views53 slides
Novinky v PostgreSQL 9.4 a JSONB by
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBTomas Vondra
6.5K views57 slides

More from Tomas Vondra(12)

PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAlt by Tomas Vondra
PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAltPostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAlt
PostgreSQL na EXT4, XFS, BTRFS a ZFS / OpenAlt
Tomas Vondra938 views
PostgreSQL on EXT4, XFS, BTRFS and ZFS by Tomas Vondra
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
Tomas Vondra6.5K views
Performance improvements in PostgreSQL 9.5 and beyond by Tomas Vondra
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyond
Tomas Vondra10.3K views
Postgresql na EXT3/4, XFS, BTRFS a ZFS by Tomas Vondra
Postgresql na EXT3/4, XFS, BTRFS a ZFSPostgresql na EXT3/4, XFS, BTRFS a ZFS
Postgresql na EXT3/4, XFS, BTRFS a ZFS
Tomas Vondra1.3K views
PostgreSQL on EXT4, XFS, BTRFS and ZFS by Tomas Vondra
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
Tomas Vondra47.9K views
Novinky v PostgreSQL 9.4 a JSONB by Tomas Vondra
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONB
Tomas Vondra6.5K views
PostgreSQL performance archaeology by Tomas Vondra
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeology
Tomas Vondra4.4K views
Výkonnostní archeologie by Tomas Vondra
Výkonnostní archeologieVýkonnostní archeologie
Výkonnostní archeologie
Tomas Vondra849 views
Checkpoint (CSPUG 22.11.2011) by Tomas Vondra
Checkpoint (CSPUG 22.11.2011)Checkpoint (CSPUG 22.11.2011)
Checkpoint (CSPUG 22.11.2011)
Tomas Vondra630 views
Čtení explain planu (CSPUG 21.6.2011) by Tomas Vondra
Čtení explain planu (CSPUG 21.6.2011)Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)
Tomas Vondra1.7K views
Replikace (CSPUG 19.4.2011) by Tomas Vondra
Replikace (CSPUG 19.4.2011)Replikace (CSPUG 19.4.2011)
Replikace (CSPUG 19.4.2011)
Tomas Vondra740 views
PostgreSQL / Performance monitoring by Tomas Vondra
PostgreSQL / Performance monitoringPostgreSQL / Performance monitoring
PostgreSQL / Performance monitoring
Tomas Vondra6.1K views

SSD vs HDD / WAL, indexes and fsync

  • 1. SSD vs. HDD / WAL, indexy a fsync Prague PostgreSQL Developers Day 2012 Tomáš Vondra (tv@fuzzy.cz)
  • 2. What a great day for science!
  • 3. Otázky DB = data + indexy + transakční log (WAL) ● Co umístit na samostatný disk? ● Co patří na HDD a co na SSD? ● Jakou fsync metodu zvolit? ● Jak to závisí na typu zátěže?
  • 4. Charakteristiky disků 7.2k SATA spinners ● ~ 120 IOPS ● sekvenčně: ~ 100 MB/s ● náhodně: ~ 0.5 MB/s ● 512B / 4kB sektory, běžně kapacita několik TB SSDs (Intel 320 120GB) ● (deseti)tisíce IOPS ● čtení: ~ 250 MB/s ● zápis: ~ 120 MB/s ● 512kB bloky, kapacita desítky / stovky GB
  • 5. Consumer-level ... ● jen „obyčejné“ SATA-II disky ● demonstrace obecných I/O charakteristik ● aplikovatelné na srovnatelný hw ● 15k SAS disky, podobné SATA SSD disky, … ● obtížnější aplikace na ● specializovaná SSD (fusion-io, VeloDrive/Z-Drive, ...) ● RAID pole s dobrým řadičem (write cache) ● výrazně odlišný workload
  • 6. Benchmarky OLTP (pgbench) ● hodně „malých“ transakcí (typicky přes primární klíče) ● počet transakcí za vteřinu (tps) ● read-only nebo read-write (50:50, netypický poměr) TPC-H ● velké dotazy nad velkým objemem dat ● počet vteřin (trvání loadu, vyhodnocení dotazu) ● GROUP BY, velké joiny, … (i hodně náhodného I/O) data >> RAM
  • 7. Kdybych měl tolik peněz jako Bruce Wayne ...
  • 8. Dosahovat výkon za hromady peněz není velké umění.
  • 10. výkon / (cena / GB)
  • 11. $ / GB HDD (Maxtor DiamondMax 21) ● 500 GB SATA II 7.2k ~ 2000 Kč => 4 Kč / GB SSD (Intel 320) ● 120 GB SATA II ~ 4200 Kč => 40 Kč / GB kombinace (naivní model) ● vážený součet podle objemu (indexy, WAL, data, ...) ● 20% HDD + 80% SSD => 33 Kč / GB ● 80% HDD + 20% SSD => 11 Kč / GB
  • 12. výkon / (cena / GB) pgbench na HDD ● výkon 120 tps ● cena 4 Kč / GB ● metrika = 120 / 4 = 30 pgbench na SSD ● výkon 4000 tps ● cena 40 Kč / GB ● metrika = 4000 / 40 = 100 100 > 30
  • 13. 78,31% všech statistik je vymyšlených
  • 17. pgbench s oddělením dat a indexů read-only i read-write [tps, vyšší hodnoty jsou lepší] 6000 5000 4000 3000 2000 1000 0 1 -1 -2 -1 2 1 d- d- d- sd sd sd hd hd hd s s s X= X= X= X= X= X= ID ID ID ID ID ID 2 -2 -2 -2 2 2 - - - dd sd sd sd dd dd =s =s =h =s =h =h TA TA TA TA TA TA DA DA DA DA DA DA read-only read-write
  • 18. pgbench s oddělením dat a indexů (80:20) read-only i read-write [výkon/$, vyšší hodnoty jsou lepší] 160 140 120 100 80 60 40 20 0 1 -1 -2 -1 2 1 d- d- d- sd sd sd hd hd hd s s s X= X= X= X= X= X= ID ID ID ID ID ID 2 -2 -2 -2 2 2 - - - dd sd sd sd dd dd =s =s =h =s =h =h TA TA TA TA TA TA DA DA DA DA DA DA read-only read-write
  • 20. DA TA =s sd 100 150 200 250 300 50 0 -2 ID X= DA s sd TA -2 =s sd -2 ID X= DA hd d- TA 1 =s sd -2 ID X= DA s sd TA -1 =h dd - 2 ID X= DA hd TA d- =h 2 dd - 2 TPC-H výkon / dotaz č. 17 ID X= DA hd d- TA =h 1 dd - počet vteřin na vyhodnocení [nižší hodnoty jsou lepší] 2 ID X= s sd -1
  • 21. DA TA =s sd 10 0 1 2 3 4 5 6 7 8 9 -2 ID X= DA s sd TA -2 =s sd -2 ID X= DA hd d- TA 1 =s sd -2 ID X= DA s sd TA -1 =h dd - 2 ID X= DA hd TA d- =h 2 dd - 2 ID výkon / $ [vyšší hodnoty jsou lepší] X= DA hd TPC-H výkon / dotaz č. 17 (80:20) d- TA =h 1 dd - 2 ID X= s sd -1
  • 22. data vs. indexy SSD ● výborná investice pro OLTP zátěž (pgbench) ● ne tak dobré pro DWS/DSS-like workload HDD ● OLTP výkon nemůže konkurovat SSD (ani výkon/cena) ● v DWH často zdatně konkuruje SSD kombinace SSD a HDD ● nic moc (když musíte, tak na SSD dejte data)
  • 24. Write Ahead Log ● aka transakční log ● aka XLog ● aka REDO ● informace o modifikacích dat ● životně důležité pro recovery ● při dotazování se nepoužívá
  • 26. oddělení dat a WAL pgbench (read-only i read-write) [počet transakcí za vteřinu] 4500 4000 3500 3000 2500 2000 1500 1000 500 0 1 -1 -1 -2 2 1 - - - dd sd dd dd sd sd =s =s =s =h =h =h AL AL AL AL AL AL W W W W W W 2 -2 -2 -2 2 2 - - - dd sd sd sd dd dd =s =s =h =s =h =h TA TA TA TA TA TA DA DA DA DA DA DA read-only read-write
  • 27. DA TA =s sd -2 100 120 140 20 40 60 80 0 W AL =h DA dd TA - 1 =s sd -2 W AL DA =s sd TA -2 =s sd -2 W AL DA =s sd read-only TA -1 =h dd - 2 W AL DA =h dd TA =h - 2 oddělení dat a WAL read-write dd - 2 W AL DA =h dd - pgbench (read-only i read-write) [výkon/$] TA =h 1 dd - 2 W AL =s sd -1
  • 28. data vs. WAL / OLTP ● data – spousta náhodných přístupů => SSD ● WAL – sekvenční zápisy => HDD ● WAL i data na stejném disku => terror :-( ● databáze musí seekovat (přístup k datům) ● důsledek: zápisy do WAL pak nejsou sekvenční ● skvělá je kombinace data na SSD a WAL na HDD ● rozdíl vs. SSD+SSD ~ rychlost sekvenčního zápisu (HDD má jen 70 MB/s, SSD má 130 MB/s) ● s rychlejším HDD diskem (RAID) => asi ideál :-)
  • 30. TPC-H benchmark / load příprava dat (load, apod.) [počet vteřin, nižší hodnoty jsou lepší] 800 700 600 500 400 300 200 100 0 -2 -1 1 2 1 -1 - - - sd sd dd dd sd dd =s =s =s =h =h =h AL AL AL AL AL AL W W W W W W -2 -2 2 2 2 -2 - - - sd sd dd dd dd sd =s =s =h =s =h =h TA TA TA TA TA TA DA DA DA DA DA DA load primary keys foreign keys index analyze
  • 31. TPC-H benchmark / load (80:20) příprava dat (load, apod.) [výkon/$, vyšší hodnoty jsou lepší] 80 70 60 50 40 30 20 10 0 -1 1 -2 -1 2 1 - - - dd sd sd dd dd sd =s =s =s =h =h =h AL AL AL AL AL AL W W W W W W -2 -2 2 -2 2 2 - - - sd dd sd sd dd dd =s =s =h =s =h =h TA TA TA TA TA TA DA DA DA DA DA DA load primary keys foreign keys index analyze
  • 32. data vs. WAL / TPC-H setup ● WAL nijak neovlivňuje dotazy ● výkon/$ - pevné disky bezpečně vedou ● nižší výkon <=> nižší sekvenční rychlost ● rychlejší HDD => výkon srovnatelný se SSD
  • 34. pg_test_fsync ● srovnání chování různých metod fsyncu ● fsync / open_sync ● fdatasync / open_datasync ● podpora závisí na ● souborovém systému, verzi kernelu, … ● vztah na „direct I/O“ ● standardně „write + write + … + fsync“ (fs cache) ● obcházení page cache (ne vždy užitečná - řadiče)
  • 35. pg_test_fsync / HDD a SSD 8kB page writes 140 14000 120 12000 100 10000 80 8000 60 6000 40 4000 20 2000 0 0 fdatasync open_datasync fsync open_sync HDD SSD
  • 36. pg_test_fsync / HDD a SSD 8kB page writes 140 14000 7% 120 12000 7% 100 10000 80 8000 60 6000 40 4000 20 2000 0 0 fdatasync open_datasync fsync open_sync HDD SSD
  • 38. SSD vs. HDD / read-write pgbench počet transakcí za vteřinu [vyšší hodnoty jsou lepší] 60 1400 50 1200 1000 40 800 30 600 20 400 10 200 0 0 fdatasync open_datasync fsync open_sync hdd ssd
  • 40. TPC-H set-up / load dat různé fsync metody / wal_level [počet vteřin, nižší hodnoty jsou lepší] 700 600 500 400 300 200 100 0 -2 -2 -2 -2 -2 -2 -2 -2 dd dd dd dd sd sd sd sd /s /s /s /s /h /h /h /h c c c c c c c c yn yn yn yn yn yn yn yn as as fs _s as as fs _s at at en at at en fd _d _d fd op op en en op op archive minimal
  • 41. fd at as yn 0 100 200 300 400 500 600 700 op c en /h _d dd at -2 as yn c /h dd -2 fs yn c /h op dd en -2 _s yn c /h fd dd at -2 as yn op c en /s _d sd at -2 as yn c /s TPC-H set-up / load dat sd -2 fs yn c /s op sd en -2 _s yn c různé fsync metody / wal_level [počet vteřin, nižší hodnoty jsou lepší] /s sd -2
  • 43. fsync metody ● značný rozdíl mezi sync a datasync ~ 20% ● open_* - žádný měřitelný efekt ● wal_level = minimal ● cca 30% zrychlení při loadu dat ● pokud nepotřebujete „archive“
  • 45. There’s a rumor that Stewart Smith and I might do a Q&A about databases in the cloud. If it happens, it will involve lots of pessimism and swearing. Selena Deckelmann http://chesnok.com
  • 47. Závěrem ... ● přínos SSD závisí na workloadu (OLTP) ● pgbench je extrém (zápis:čtení ~ 1:1) ● SSD výrazně více zatěžují CPU než HDD ● spolehlivost SSD je otázka ● HDD i SSD se skládají z „bloků“ ● HDD mají plotny, SSD mají moduly (např. 40 GB) ● více „bloků“ => vyšší sekvenční výkon ● rychlejší disky (15k SAS) – horší cena/výkon
  • 48. Každý systém má bottleneck ...