Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Escalando PostgreSQL

Escalando PostgreSQL

Vinícius Alonso

April 14, 2023
Tweet

More Decks by Vinícius Alonso

Other Decks in Programming

Transcript

  1. Quem sou eu • Engenheiro de software na Solides Tecnologia

    • Graduado em Sistemas para a Internet (UTFPR Guarapuava) • Mestrando em Computação Aplicada (UTFPR Curitiba)
  2. Scalability is the measure of a system’s ability to increase

    or decrease in performance and cost in response to changes in application and system processing demands.
  3. Questão sobre escalabilidade Exemplo Soluções Arquivos estáticos CSS, Javascript, imagens

    CDN, cache Tarefas bloqueantes Upload de imagens, cálculos demorados, envio de emails, etc Background jobs Banco de dados Alta demanda de escritas ou leituras, tabelas grandes ???
  4. PostgreSQL • Sistema gerenciador de banco de dados (SGBD) open

    source • Criado em 1996 • ACID • Atomicidade • Consistência • Isolamento • Durabilidade
  5. pgbench • Ferramenta utilizada fazer benchmarks • Simula clientes simultáneos

    • Foi utilizado para fazer os testes nessa apresentação
  6. Otimizações • Detectando consultas mal escritas • Parâmetros padrões do

    banco de dados • Falta de índices • Falta de vacuuming • Não utilizando materialized views
  7. Parâmetros padrões do banco • shared_bu ff ers • wal_bu

    ff ers • e ff ective_cache_size • work_men • maintenance_work_men
  8. Streaming Replication • Permite sincronizar dados entre instâncias • Transmite

    dados do banco primário para as réplicas utilizando arquivos WAL (log shipping) • Replicas operam como somente leitura • Replicas são cópias exatas do banco primário
  9. Replica 3 Replica 2 Replica 1 Replica 1 Replica 2

    Primário Escrita INSERT, UPDATE, DELETE WAL Para o id 1 Atualize valor para 5
  10. Con f igurando banco primário • Alterar postgresql.conf para habilitar

    rede • Criar um usuário para a réplica (boa prática) • Permitir acesso remoto no arquivo pg_hba.conf • Reiniciar banco primário
  11. Con f igurando banco primário H a bilit a r

    rede no a rquivo postgresql.conf
  12. Con f igurando banco réplica Copi a ndo a rquivos

    de con f igur a ç ã o com pg_b a seb a ckup
  13. Logical Replication • Transmite SQL para suas replicas • Opera

    utilizando publisher e subscriber • Replicas não precisam ser iguais ao banco primário, podendo replicar apenas uma tabela • Permite utilizar diferentes versões do PostgreSQL
  14. Replica 3 Replica 2 Replica 1 Replica 1 Replica 2

    Primário Escrita INSERT, UPDATE, DELETE INSERT INTO users VALUES(1, ‘Teste’, ‘[email protected]');
  15. Con f igurando banco publisher • Alterar o valor de

    wal_level para logical no arquivo postgresql.conf • Reiniciar o banco • Criar um banco e tabela para teste • Copiar estrutura para o banco de replica • Criar publisher no banco primário • Criar subscription no banco de replica
  16. Connection Polling • É o processo de criar uma conexão

    com o banco de dados • É necessário fazer uma chamada de sistemas fork e reservar memória • Uma conexão no PostgreSQL consome de 2mb a 3mb
  17. pgbouncer • Gerenciador de conexões • Utiliza fi las •

    Possui 3 modos • Session pooling (padrão) • Transaction pooling • Statement pooling
  18. pgbouncer Inst a l a ç ã o e con

    f igur a ç ã o b á sic a /etc/pgbouncer/pgbouncer.ini
  19. Particionando tabelas • Técnica utilizada para dividir grandes tabelas •

    Quando uma tabela é muito grande o vacuum do banco se torna lento e as operações também • Partições começam por uma chave
  20. Referências • https://www.gartner.com/en/information-technology/glossary/ scalability#:~:text=Scalability%20is%20the%20measure%20of,application%20and%20system%20processing%2 0demands. • https://www.databricks.com/glossary/acid- transactions#:~:text=ACID%20is%20an%20acronym%20that,operations%20are%20called%20transactional%20 systems. •

    https://www.crunchydata.com/blog/tentative-smarter-query-optimization-in-postgres-starts-with- pg_stat_statements • https://www.postgresql.org/docs/current/warm- standby.html#:~:text=PostgreSQL%20implements%20 fi le%2Dbased%20log,far%20side%20of%20the%20globe. • https://www.postgresql.org/docs/current/rules-materializedviews.html • https://www.pgbouncer.org/