Tudo que você queria saber sobre o 
 uso de discos em servidores 
 PostgreSQL e tinha vergonha de 
 perguntar

                      por Fábio Telles Rodriguez




              
Agenda
   Discos
   Controladoras
   Storage
   RAID
   Sistemas de Arquivo
   Particionamento
   Exemplos práticos


                       
Discos
   SATA – Baixo desempenho
   SCSI – Substituído pelo SAS
   SAS – Armazenamento local
   Fibre Channel – Utilizado em storages 
   SSD – Hot files!




                        
Discos
               Capacidade Latência         Custo /   Custo /
  Tecnologia      (GB)      (µs)    IOPS IOPS (USD) GB (USD)
Cloud Storage Ilimitado    60.000     20  0,015/GB 0,15 / mês
 HDs de alta
 capacidade      2.500     12.000    250     1,67     0,15
 HDs de alto
desempenho         300     7.000     500     1,52     1,30
SSD (escrita)      64       300    5.000     0,20      13
 SSD (leitura)     64        45    30.000    0,03      13
    DRAM            8      0,005 500.000    0,001      52
Fonte: (Sun) Database performance tuning for SSD based storage




                                                  
Solid State Disks
   RAM: 
              Storages com memórias RAM conectadas por FC;
              Baterias alimentam discos que gravam conteúdo da 
                RAM em caso de falta de energia;
              600.000 IOPS !!!
   Flash:
              Uso de SLC Flash, algorítimos especiais e outras 
                técnicas para aumentar a vida útil e desempenho;
              100.000 IOPS !!!
   Flash + RAM
                              
Controladoras ou melhor:
               Host Bus Adapter (HBA)
   Discos locais:
              SATA,  SAS, SCSI
                      Número de discos suportados
                      Buffer de leitura e Buffer de escrita
                      Bateria interna X Bateria externa
                      Suporte a RAID
   Storage:
              ISCSI, FC, Infiniband
                      Uso de fabric
                      Software p/ load balance e fail over
                                 
Storage
   Suporte a discos: SATA, SAS, SCSI, FC
   Suporte a vários tipos de RAID
   Suporte a diversas interfaces: Infiniband, FC, iSCSI
   Buffer gerenciável de 2GB a 256GB 
   Baterias confiáveis
   Software para tuning, snapshot, gerencimento, etc
   Redundância de controladoras, discos, HBAs, 
     fontes, baterias, ventoinhas, etc;

                       
RAID
            Redundant Array of Independent Drives

   JBOD (just a bonch of disks)
   RAID 0 (strip)
   RAID 1 (mirror)
   RAID 2, RAID 3, RAID 4
   RAID 5 (paridade distribuída)
   RAID 6 (paridade dupla distribuída)
   RAID 10 (strip + mirror)


                        
RAID
   1             300               2x         1X       Baixo
Discos: 4x 300GB (sem hot spare)
 Tipo Espaço (GB) Leitura                   Gravação   Risco
   5      900       3x                        1,5X     Médio
   6      600       2x                        1,5X     Baixo
  10      600       2x                         2x      Baixo
Discos: 8x 300GB (sem hot spare)
 Tipo Espaço (GB) Leitura                   Gravação   Risco
   5     2100       7x                         3x       Alto
   6     1800       6x                         3x      Médio
  10     1200       4x                         4x      Baixo




                                         
Sisemas de Arquivos
   Linux:
               EXT2, EXT3, EXT4, XFS, ReiserFS
   FreeBSD: 
               UFS2
   Solaris: 
               UFS2, ZFS
   Windows
               FAT, NTFS

                             
Sistemas de Arquivos
   Desempenho:
              Testes c/ pgbench (em linux):
                      $ pgbench ­i 1000 testedb
                      $ pgbench ­c 100 ­T 3600
              EXT2 >> XFS > EXT4 > EXT3 > ReiserFS
   Segurança
              EXT4 = EXT3 = XFS > ReixerFS >> EXT2




                                 
Particionamento
   Porquê separar diferentes tipos de arquivos?
              Desempenho;
              Segurança;
              Facilidade de administração.
   Ambientes críticos e com boa mão de obra 
     dedicada: divisão agressiva;
   Ambiente não crítico com mão de obra ocasional: 
     agrupamento em poucas partições.


                              
Particionamento
   SO: /boot, /var, /usr, /home, /tmp, /
   swap;
   Log de trasação: pg_xlog,
        mv /postgres/teste/pg_xlog/ /postgres
        ln -s /postgres/pg_xlog /postgres/teste/pg_xlog
    Aquivamento (postgresql.conf);
        archive_mode = on
        archive_command = 'cp "%p" /postgres/archive/"%f"'
        archive_timeout = 3600
   Logs de erro e monitoramento;
        http://www.postgresql.org/docs/current/static/runtime­config­logging.html#RUNTIME­CONFIG­LOGGING­WHERE

   Backup local;
                                         
Particionamento
   Tablespaces temporário (postgresql.conf): 
       temp_tablespaces = '/postgres/temp'

   Tablespaces por tipo ou uso (index, data, hist, 
     OLTP, BI, etc)
                mkdir /postgres/data /postgres/index /postgres/old /postgres/rh
                CREATE TABLESPACE data LOCATION '/postgres/data';
                CREATE TABLESPACE data LOCATION '/postgres/index';
                CREATE TABLESPACE data LOCATION '/postgres/old';
                CREATE TABLESPACE data OWNER 'hr' LOCATION '/postgres/index'

   SET default_tablespace = '/postgres'

                                      
Particionamento
   O que particionar, o que separar em discos / RAIDs 
     distintos?
              Depende de quantos discos, RAIDs você tem 
                disponível;
              Depende da mão­de­obra disponível;
              Depende do perfil da carga da aplicação;
              Depende do volume e tipo de dados da aplicação;




                              
Exemplos práticos
Caso 1 - Ambiente
   Base de 50GB;
   Aplicação com 50 usuários, carga mista de OLTP e 
     relatórios;
   Sem DBA dedicado;
   Baixo poder de investimento;
   Ambiente não crítico;
   Discos: 2 discos SAS 300GB.

                      
Exemplos práticos
Caso 1 - Sugestão
   RAID 1;
              /boot (100MB)
              / (40GB)
              /postgres (dados) (120GB)
              /backup (backup) (120GB)
              swap (4GB)




                             
Exemplos práticos
Caso 2 - Ambiente
   Base de 10GB;
   Aplicação Web com milhares de acessos 
     simultâneos;
   Administrador de sistema monitora o PostgreSQL 
     com frequência;
   Disponibilidade e desempenho críticos;
   Discos: 5 discos SAS 300GB.

                      
Exemplos práticos
Caso 2 - Sugestão
   1º RAID 1;
              /boot (100MB)
              / (50GB) 
              /postgres/pg_xlog  (20GB)
              /backup (backup) (200GB)
              swap (8GB)
   2º RAID 1 + Hot Spare
              /postgres/data (300GB)

                             
Exemplos práticos
Caso 3 - Ambiente
   ERP c/ 250 GB:
              OLTP c/ 500 usuários simultâneos;
              Relatórios pesados de fechamento mensal;
              Cargas em lote diárias;
   DBA + Sysadmin;
   Disponibilidade + perda de dados + desempenho 
     críticos;
   Discos: 12 discos SAS 300GB.
                              
Exemplos práticos

Caso 3 - Sugestão
   RAID 1 + hot spare / 15Krpm:
              /boot (100MB);
              / (20GB);
              /var (20GB);
              /postgres/pg_xlog (50GB)
              swap (8GB)



                               
Exemplos práticos
Caso 3 – Sugestão (continuação)
   RAID 10 c/ 4 discos (10Krpm):
          /postgres/archive (200GB);
          /postgres/backup (400GB);
   RAID 4 c/ 4 discos + hot spare / 15Krpm:
          /postgres/data (600GB);




                         
Exemplos práticos
Caso 4 – Ambiente
   OLAP + Data Mining (1TB)
          Cargas pesadas à noite;
          Poucos usuários realizando consultas complexas;
   Desempenho crítico;
   DBA e Sysadmin c/ nível sênior;
          3 discos locais: SAS 300GB 10Krpm
          12 discos em storage: FC 146GB 15Krpm 
          6 discos em storage: SAS 300GB 10Krpm

                          
Exemplos práticos
Caso 4 – Sugestão
   RAID 1 + Hot Spare ­ local
              /boot (100MB)
              / (50GB) 
              /var (50GB)
              /postgresql/pg_xlog (200GB) – EXT3 c/ noatime
              swap (16GB)




                              
Exemplos práticos
Caso 4 – Sugestão (continuação)
   RAID 5 c/ 5 discos SAS 10Krpm + hot spare:
          /postgresql/data/old (800GB) – XFS
          /postgresql/archive (400GB) – EXT3 c/ noatime + 
             writeback
   RAID 0 c/ 3 discos FC 15Krpm ­ Storage:
          /postgresql/data/temp (226GB) – EXT2
   RAID 10 c/ 8 discos FC15Krpm + hot spare:
          /postgresql/data/new (568 GB) – XFS c/ noatime
                         
Obrigado!
   Perguntas, Sugestões e cervejas!
   Contatos:
              telles@timbira.com.br
              gtalk/msn/mail: fabio.telles@gmail.com
              Skype: fabio_telles
              http://www.midstorm.org.br




                              

Discos & Cia em PostgreSQL

  • 1.
  • 2.
    Agenda  Discos  Controladoras  Storage  RAID  Sistemas de Arquivo  Particionamento  Exemplos práticos    
  • 3.
    Discos  SATA – Baixo desempenho  SCSI – Substituído pelo SAS  SAS – Armazenamento local  Fibre Channel – Utilizado em storages   SSD – Hot files!    
  • 4.
    Discos Capacidade Latência Custo / Custo / Tecnologia (GB) (µs) IOPS IOPS (USD) GB (USD) Cloud Storage Ilimitado 60.000 20 0,015/GB 0,15 / mês HDs de alta capacidade 2.500 12.000 250 1,67 0,15 HDs de alto desempenho 300 7.000 500 1,52 1,30 SSD (escrita) 64 300 5.000 0,20 13 SSD (leitura) 64 45 30.000 0,03 13 DRAM 8 0,005 500.000 0,001 52 Fonte: (Sun) Database performance tuning for SSD based storage    
  • 5.
    Solid State Disks  RAM:   Storages com memórias RAM conectadas por FC;  Baterias alimentam discos que gravam conteúdo da  RAM em caso de falta de energia;  600.000 IOPS !!!  Flash:  Uso de SLC Flash, algorítimos especiais e outras  técnicas para aumentar a vida útil e desempenho;  100.000 IOPS !!!  Flash + RAM    
  • 6.
    Controladoras ou melhor: Host Bus Adapter (HBA)  Discos locais:  SATA,  SAS, SCSI  Número de discos suportados  Buffer de leitura e Buffer de escrita  Bateria interna X Bateria externa  Suporte a RAID  Storage:  ISCSI, FC, Infiniband  Uso de fabric  Software p/ load balance e fail over    
  • 7.
    Storage  Suporte a discos: SATA, SAS, SCSI, FC  Suporte a vários tipos de RAID  Suporte a diversas interfaces: Infiniband, FC, iSCSI  Buffer gerenciável de 2GB a 256GB   Baterias confiáveis  Software para tuning, snapshot, gerencimento, etc  Redundância de controladoras, discos, HBAs,  fontes, baterias, ventoinhas, etc;    
  • 8.
    RAID Redundant Array of Independent Drives  JBOD (just a bonch of disks)  RAID 0 (strip)  RAID 1 (mirror)  RAID 2, RAID 3, RAID 4  RAID 5 (paridade distribuída)  RAID 6 (paridade dupla distribuída)  RAID 10 (strip + mirror)    
  • 9.
    RAID 1 300 2x 1X Baixo Discos: 4x 300GB (sem hot spare) Tipo Espaço (GB) Leitura Gravação Risco 5 900 3x 1,5X Médio 6 600 2x 1,5X Baixo 10 600 2x 2x Baixo Discos: 8x 300GB (sem hot spare) Tipo Espaço (GB) Leitura Gravação Risco 5 2100 7x 3x Alto 6 1800 6x 3x Médio 10 1200 4x 4x Baixo    
  • 10.
    Sisemas de Arquivos  Linux:  EXT2, EXT3, EXT4, XFS, ReiserFS  FreeBSD:   UFS2  Solaris:   UFS2, ZFS  Windows  FAT, NTFS    
  • 11.
    Sistemas de Arquivos  Desempenho:  Testes c/ pgbench (em linux):  $ pgbench ­i 1000 testedb  $ pgbench ­c 100 ­T 3600  EXT2 >> XFS > EXT4 > EXT3 > ReiserFS  Segurança  EXT4 = EXT3 = XFS > ReixerFS >> EXT2    
  • 12.
    Particionamento  Porquê separar diferentes tipos de arquivos?  Desempenho;  Segurança;  Facilidade de administração.  Ambientes críticos e com boa mão de obra  dedicada: divisão agressiva;  Ambiente não crítico com mão de obra ocasional:  agrupamento em poucas partições.    
  • 13.
    Particionamento  SO: /boot, /var, /usr, /home, /tmp, /  swap;  Log de trasação: pg_xlog,  mv /postgres/teste/pg_xlog/ /postgres  ln -s /postgres/pg_xlog /postgres/teste/pg_xlog   Aquivamento (postgresql.conf);  archive_mode = on  archive_command = 'cp "%p" /postgres/archive/"%f"'  archive_timeout = 3600  Logs de erro e monitoramento; http://www.postgresql.org/docs/current/static/runtime­config­logging.html#RUNTIME­CONFIG­LOGGING­WHERE  Backup local;    
  • 14.
    Particionamento  Tablespaces temporário (postgresql.conf):   temp_tablespaces = '/postgres/temp'  Tablespaces por tipo ou uso (index, data, hist,  OLTP, BI, etc)  mkdir /postgres/data /postgres/index /postgres/old /postgres/rh  CREATE TABLESPACE data LOCATION '/postgres/data';  CREATE TABLESPACE data LOCATION '/postgres/index';  CREATE TABLESPACE data LOCATION '/postgres/old';  CREATE TABLESPACE data OWNER 'hr' LOCATION '/postgres/index'  SET default_tablespace = '/postgres'    
  • 15.
    Particionamento  O que particionar, o que separar em discos / RAIDs  distintos?  Depende de quantos discos, RAIDs você tem  disponível;  Depende da mão­de­obra disponível;  Depende do perfil da carga da aplicação;  Depende do volume e tipo de dados da aplicação;    
  • 16.
    Exemplos práticos Caso 1 -Ambiente  Base de 50GB;  Aplicação com 50 usuários, carga mista de OLTP e  relatórios;  Sem DBA dedicado;  Baixo poder de investimento;  Ambiente não crítico;  Discos: 2 discos SAS 300GB.    
  • 17.
    Exemplos práticos Caso 1 -Sugestão  RAID 1;  /boot (100MB)  / (40GB)  /postgres (dados) (120GB)  /backup (backup) (120GB)  swap (4GB)    
  • 18.
    Exemplos práticos Caso 2 -Ambiente  Base de 10GB;  Aplicação Web com milhares de acessos  simultâneos;  Administrador de sistema monitora o PostgreSQL  com frequência;  Disponibilidade e desempenho críticos;  Discos: 5 discos SAS 300GB.    
  • 19.
    Exemplos práticos Caso 2 -Sugestão  1º RAID 1;  /boot (100MB)  / (50GB)   /postgres/pg_xlog  (20GB)  /backup (backup) (200GB)  swap (8GB)  2º RAID 1 + Hot Spare  /postgres/data (300GB)    
  • 20.
    Exemplos práticos Caso 3 -Ambiente  ERP c/ 250 GB:  OLTP c/ 500 usuários simultâneos;  Relatórios pesados de fechamento mensal;  Cargas em lote diárias;  DBA + Sysadmin;  Disponibilidade + perda de dados + desempenho  críticos;  Discos: 12 discos SAS 300GB.    
  • 21.
    Exemplos práticos Caso 3 -Sugestão  RAID 1 + hot spare / 15Krpm:  /boot (100MB);  / (20GB);  /var (20GB);  /postgres/pg_xlog (50GB)  swap (8GB)    
  • 22.
    Exemplos práticos Caso 3 –Sugestão (continuação)  RAID 10 c/ 4 discos (10Krpm):  /postgres/archive (200GB);  /postgres/backup (400GB);  RAID 4 c/ 4 discos + hot spare / 15Krpm:  /postgres/data (600GB);    
  • 23.
    Exemplos práticos Caso 4 –Ambiente  OLAP + Data Mining (1TB)  Cargas pesadas à noite;  Poucos usuários realizando consultas complexas;  Desempenho crítico;  DBA e Sysadmin c/ nível sênior;  3 discos locais: SAS 300GB 10Krpm  12 discos em storage: FC 146GB 15Krpm   6 discos em storage: SAS 300GB 10Krpm    
  • 24.
    Exemplos práticos Caso 4 –Sugestão  RAID 1 + Hot Spare ­ local  /boot (100MB)  / (50GB)   /var (50GB)  /postgresql/pg_xlog (200GB) – EXT3 c/ noatime  swap (16GB)    
  • 25.
    Exemplos práticos Caso 4 –Sugestão (continuação)  RAID 5 c/ 5 discos SAS 10Krpm + hot spare:  /postgresql/data/old (800GB) – XFS  /postgresql/archive (400GB) – EXT3 c/ noatime +  writeback  RAID 0 c/ 3 discos FC 15Krpm ­ Storage:  /postgresql/data/temp (226GB) – EXT2  RAID 10 c/ 8 discos FC15Krpm + hot spare:  /postgresql/data/new (568 GB) – XFS c/ noatime    
  • 26.
    Obrigado!  Perguntas, Sugestões e cervejas!  Contatos:  telles@timbira.com.br  gtalk/msn/mail: fabio.telles@gmail.com  Skype: fabio_telles  http://www.midstorm.org.br