Slide 1

Slide 1 text

Escalando PostgreSQL Vinícius B a il Alonso

Slide 2

Slide 2 text

Quem sou eu

Slide 3

Slide 3 text

Quem sou eu • Engenheiro de software na Solides Tecnologia • Graduado em Sistemas para a Internet (UTFPR Guarapuava) • Mestrando em Computação Aplicada (UTFPR Curitiba)

Slide 4

Slide 4 text

Escalabilidade

Slide 5

Slide 5 text

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.

Slide 6

Slide 6 text

Usuário Aplicação Internet

Slide 7

Slide 7 text

Aplicação Internet

Slide 8

Slide 8 text

Load Balancer Internet Replica 1 Replica 2 Replica 3

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

PostgreSQL

Slide 12

Slide 12 text

PostgreSQL • Sistema gerenciador de banco de dados (SGBD) open source • Criado em 1996 • ACID • Atomicidade • Consistência • Isolamento • Durabilidade

Slide 13

Slide 13 text

Pensando em nível de aplicação

Slide 14

Slide 14 text

pgbench • Ferramenta utilizada fazer benchmarks • Simula clientes simultáneos • Foi utilizado para fazer os testes nessa apresentação

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Detectando consultas mal escritas

Slide 17

Slide 17 text

Comando EXPLAIN

Slide 18

Slide 18 text

Extensão pg_stat_statements

Slide 19

Slide 19 text

Parâmetros padrões do banco

Slide 20

Slide 20 text

Parâmetros padrões do banco • shared_bu ff ers • wal_bu ff ers • e ff ective_cache_size • work_men • maintenance_work_men

Slide 21

Slide 21 text

Falta de índices

Slide 22

Slide 22 text

Falta de índices

Slide 23

Slide 23 text

Falta de índices Benchm a rk sem índice

Slide 24

Slide 24 text

Falta de índices Benchm a rk com índice

Slide 25

Slide 25 text

Falta de Vacuuming

Slide 26

Slide 26 text

Vacuum

Slide 27

Slide 27 text

Materialized views

Slide 28

Slide 28 text

Materialized views

Slide 29

Slide 29 text

Pensando em nível de arquitetura

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

Replica 3 Replica 2 Replica 1 Replica 1 Replica 2 Primário

Slide 32

Slide 32 text

Técnicas de replicação

Slide 33

Slide 33 text

Streaming Replication

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Tabela pg_stat_replication no banco primário

Slide 42

Slide 42 text

Logical Replication

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Replica 3 Replica 2 Replica 1 Replica 1 Replica 2 Primário Escrita INSERT, UPDATE, DELETE INSERT INTO users VALUES(1, ‘Teste’, ‘[email protected]');

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

Con f igurando banco publisher Arquivo postgresql.conf

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

Connection polling

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

pgbouncer • Gerenciador de conexões • Utiliza fi las • Possui 3 modos • Session pooling (padrão) • Transaction pooling • Statement pooling

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

pgbouncer Acess a ndo pelo psql

Slide 58

Slide 58 text

Particionando tabelas

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

Obrigado!

Slide 64

Slide 64 text

Contato [email protected] @alonsoemacao viniciusalonso

Slide 65

Slide 65 text

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/