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. Escalando PostgreSQL
    Vinícius B
    a
    il Alonso

    View Slide

  2. Quem sou eu

    View Slide

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


    • Graduado em Sistemas para a Internet (UTFPR Guarapuava)


    • Mestrando em Computação Aplicada (UTFPR Curitiba)

    View Slide

  4. Escalabilidade

    View Slide

  5. 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.

    View Slide

  6. Usuário
    Aplicação
    Internet

    View Slide

  7. Aplicação
    Internet

    View Slide

  8. Load Balancer
    Internet
    Replica 1
    Replica 2
    Replica 3

    View Slide

  9. 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
    ???

    View Slide

  10. Load Balancer
    Internet
    Replica 3
    Replica 2
    Replica 1
    Banco de dados

    View Slide

  11. PostgreSQL

    View Slide

  12. PostgreSQL
    • Sistema gerenciador de banco de dados (SGBD) open source


    • Criado em 1996


    • ACID


    • Atomicidade


    • Consistência


    • Isolamento


    • Durabilidade

    View Slide

  13. Pensando em nível de aplicação

    View Slide

  14. pgbench
    • Ferramenta utilizada fazer benchmarks


    • Simula clientes simultáneos


    • Foi utilizado para fazer os testes nessa apresentação

    View Slide

  15. 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

    View Slide

  16. Detectando consultas mal escritas

    View Slide

  17. Comando EXPLAIN

    View Slide

  18. Extensão pg_stat_statements

    View Slide

  19. Parâmetros padrões do banco

    View Slide

  20. Parâmetros padrões do banco
    • shared_bu
    ff
    ers


    • wal_bu
    ff
    ers


    • e
    ff
    ective_cache_size


    • work_men


    • maintenance_work_men

    View Slide

  21. Falta de índices

    View Slide

  22. Falta de índices

    View Slide

  23. Falta de índices
    Benchm
    a
    rk sem índice

    View Slide

  24. Falta de índices
    Benchm
    a
    rk com índice

    View Slide

  25. Falta de Vacuuming

    View Slide

  26. Vacuum

    View Slide

  27. Materialized views

    View Slide

  28. Materialized views

    View Slide

  29. Pensando em nível de arquitetura

    View Slide

  30. Load Balancer
    Internet
    Replica 3
    Replica 2
    Replica 1
    Banco de dados

    View Slide

  31. Replica 3
    Replica 2
    Replica 1
    Replica 1
    Replica 2
    Primário

    View Slide

  32. Técnicas de replicação

    View Slide

  33. Streaming Replication

    View Slide

  34. 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

    View Slide

  35. 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

    View Slide

  36. 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

    View Slide

  37. Con
    f
    igurando banco primário
    H
    a
    bilit
    a
    r rede no
    a
    rquivo postgresql.conf

    View Slide

  38. Con
    f
    igurando banco primário
    Cri
    a
    ndo usu
    á
    rio d
    a
    replic
    a

    View Slide

  39. Con
    f
    igurando banco réplica
    Permitindo
    a
    cesso remoto pg_hb
    a
    .conf

    View Slide

  40. Con
    f
    igurando banco réplica
    Copi
    a
    ndo
    a
    rquivos de con
    f
    igur
    a
    ç
    ã
    o com pg_b
    a
    seb
    a
    ckup

    View Slide

  41. Tabela pg_stat_replication no banco primário

    View Slide

  42. Logical Replication

    View Slide

  43. 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

    View Slide

  44. Replica 3
    Replica 2
    Replica 1
    Replica 1
    Replica 2
    Primário
    Escrita


    INSERT, UPDATE, DELETE
    INSERT INTO users VALUES(1, ‘Teste’,
    [email protected]');

    View Slide

  45. 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

    View Slide

  46. Con
    f
    igurando banco publisher
    Arquivo postgresql.conf

    View Slide

  47. Con
    f
    igurando banco publisher
    Cri
    a
    ndo b
    a
    nco pelo psql

    View Slide

  48. Con
    f
    igurando banco publisher
    Cri
    a
    ndo t
    a
    bel
    a
    e popul
    a
    ndo

    View Slide

  49. Con
    f
    igurando banco publisher
    Copi
    a
    ndo estrutur
    a
    p
    a
    r
    a
    o b
    a
    nco de replic
    a

    View Slide

  50. Con
    f
    igurando banco publisher
    Cri
    a
    ndo public
    a
    tion p
    a
    r
    a a
    t
    a
    bel
    a

    View Slide

  51. Con
    f
    igurando banco subscriber
    Cri
    a
    ndo subscription p
    a
    r
    a a
    t
    a
    bel
    a

    View Slide

  52. Connection polling

    View Slide

  53. 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

    View Slide

  54. pgbouncer
    • Gerenciador de conexões


    • Utiliza
    fi
    las


    • Possui 3 modos


    • Session pooling (padrão)


    • Transaction pooling


    • Statement pooling

    View Slide

  55. Replica 3
    Replica 2
    Replica 1
    Replica 1
    Replica 2
    Primário
    pgbouncer

    View Slide

  56. pgbouncer
    Inst
    a
    l
    a
    ç
    ã
    o e con
    f
    igur
    a
    ç
    ã
    o b
    á
    sic
    a
    /etc/pgbouncer/pgbouncer.ini

    View Slide

  57. pgbouncer
    Acess
    a
    ndo pelo psql

    View Slide

  58. Particionando tabelas

    View Slide

  59. 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

    View Slide

  60. Particionando tabelas
    Primário
    SELECT * FROM people WHERE age > 25;
    age > 25
    age < 25

    View Slide

  61. Particionando tabelas
    Cri
    a
    ndo um
    a
    t
    a
    bel
    a
    com su
    a
    s p
    a
    rtições

    View Slide

  62. Particionando tabelas
    Cri
    a
    ndo um
    a
    t
    a
    bel
    a
    com su
    a
    s p
    a
    rtições

    View Slide

  63. Obrigado!

    View Slide

  64. Contato
    [email protected]
    @alonsoemacao
    viniciusalonso

    View Slide

  65. 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/

    View Slide