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: Flash: 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!!! 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: Storage: SATA, SAS, SCSI Número de discos suportados Buffer de leitura e Buffer de escrita Bateria interna X Bateria externa Suporte a RAID 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: FreeBSD: Solaris: EXT2, EXT3, EXT4, XFS, ReiserFS UFS2 Windows UFS2, ZFS FAT, NTFS
Sistemas de Arquivos Desempenho: Testes c/ pgbench (em linux): $ pgbench i 1000 testedb $ pgbench c 100 T 3600 Segurança EXT2 >> XFS > EXT4 > EXT3 > ReiserFS 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.
Caso 2 - Sugestão 1º RAID 1; Exemplos práticos /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);
Caso 4 Ambiente Exemplos práticos 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
Caso 4 Sugestão Exemplos práticos 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