Baixe o app para aproveitar ainda mais
Prévia do material em texto
Administração do SGBD PostgreSQL Camila Freitas Sarmento Diretor Executivo DAVID LIRA STEPHEN BARROS Gerente Editorial CRISTIANE SILVEIRA CESAR DE OLIVEIRA Projeto Gráfico TIAGO DA ROCHA Autora CAMILA FREITAS SARMENTO A AUTORA Camila Freitas Sarmento Olá. Meu nome é Camila Freitas Sarmento. Sou formada em Telemática com mestrado em Ciência da Computação e, atualmente, doutoranda na área de Engenharia de Software, com uma experiência técnico-profissional na área de Soluções Digitais (Redes e Programação Back-End) de mais de sete anos. Atualmente sou Analista de Informática - Programadora Web Back-End no Instituto SENAI de Tecnologia em Automação Industrial (IST SENAI). Fui professora substituta na Universidade Estadual da Paraíba (UEPB) e atuei como professora substituta e, posteriormente, como tutora no Instituto Federal de Educação, Ciência e Tecnologia da Paraíba (IFPB). Sou apaixonada pelo que faço e adoro transmitir minha experiência àqueles que estão iniciando em suas profissões. Por isso, fui convidada pela Editora Telesapiens a integrar seu elenco de autores independentes. Estou muito feliz em poder ajudar você nesta fase de muito estudo e trabalho. Conte comigo! ICONOGRÁFICOS Olá. Esses ícones irão aparecer em sua trilha de aprendizagem toda vez que: INTRODUÇÃO: para o início do desenvolvimento de uma nova compe- tência; DEFINIÇÃO: houver necessidade de se apresentar um novo conceito; NOTA: quando forem necessários obser- vações ou comple- mentações para o seu conhecimento; IMPORTANTE: as observações escritas tiveram que ser priorizadas para você; EXPLICANDO MELHOR: algo precisa ser melhor explicado ou detalhado; VOCÊ SABIA? curiosidades e indagações lúdicas sobre o tema em estudo, se forem necessárias; SAIBA MAIS: textos, referências bibliográficas e links para aprofundamen- to do seu conheci- mento; REFLITA: se houver a neces- sidade de chamar a atenção sobre algo a ser refletido ou dis- cutido sobre; ACESSE: se for preciso aces- sar um ou mais sites para fazer download, assistir vídeos, ler textos, ouvir podcast; RESUMINDO: quando for preciso se fazer um resumo acumulativo das últi- mas abordagens; ATIVIDADES: quando alguma atividade de au- toaprendizagem for aplicada; TESTANDO: quando o desen- volvimento de uma competência for concluído e questões forem explicadas; SUMÁRIO Performance Tuning ...................................................................................10 Configuração de Tuning no PostgreSQL ........................................................................ 10 Performance de Tuning para Leitura ................................................................................ 13 Configuração do PostgreSQL ................................................................. 20 Backup e Recuperação ............................................................................ 29 Backup no PostgreSQL ...............................................................................................................29 O Utilitário pg_dump ................................................................................................. 31 O Utilitário pg_dumpall ............................................................................................37 Restauração no PostgreSQL .................................................................................................. 38 Replicação Nativa ....................................................................................... 42 7 CONFIGURAÇÕES, AJUSTES E SEGURANÇA NO POSTGRESQL UNIDADE 04 Administração do SGBD PostgreSQL 8 INTRODUÇÃO Você sabia que para muitas empresas, independentemente do tamanho, as perdas dos dados podem ser fatais para os negócios? Sendo assim, além da garantia de um bom desempenho, o backup e a restauração são tarefas essenciais na indústria. Por isso, os backups periódicos são tão importantes para uma pronta recuperação devido às falhas e às catástrofes. Lembra-se do ataque às Torres Gêmeas do complexo empresarial do World Trade Center, na cidade de Nova Iorque, em 11 de setembro de 2001? Apesar de os danos terem sido devastadores, muitas empresas já estavam em operação em menos de 24h, por causa da política de recuperação dos dados. A área de administração de banco de dados tem grandes responsabilidades, e você pode fazer parte disso. Ao longo desta unidade letiva, você vai mergulhar neste universo! Administração do SGBD PostgreSQL 9 OBJETIVOS Olá. Seja muito bem-vindo à Unidade 4. Nosso propósito é auxiliar você no desenvolvimento das seguintes objetivos de aprendizagem até o término desta etapa de estudos: 1. Ajustar a performance do PostgreSQL por meio do processo de tuning; 2. Configurar as preferências e parâmetros de ajustes do PostgreSQL; 3. Realizar cópias de segurança de banco de dados e recuperar essas cópias quando necessário, salvaguardando a segurança e integridade dos dados no PostgreSQL; 4. Efetuar o procedimento de replicação de dados que já vem disponível nativamente no PostgreSQL. Então? Preparado para uma viagem sem volta rumo ao conhecimento? Ao trabalho! Administração do SGBD PostgreSQL 10 Performance Tuning INTRODUÇÃO: Ao término deste capítulo você será capaz de entender como funciona uma performance tuning por meio de procedimentos de ajuste fino no PostgreSQL, envolvendo recursos de software e hardware. Isso será fundamental para o exercício de sua profissão, pois uma performance tuning requer um alto nível de conhecimento e de prática. As pessoas que tentaram realizar ajustes no servidor sem a devida instrução ocasionaram problemas e mau funcionamento no SGBD, pois tal procedimento é um recurso avançado e praticado em grandes servidores que trabalham com altos volumes de dados e de acessos. E então, motivado para desenvolver essa competência? Vamos lá!. Configuração de Tuning no PostgreSQL Em uma base de dados PostgreSQL, os valores de configuração padrão não são apropriados em um ambiente de produção, pois eles geralmente são subdimensionados. Ainda assim, em modo produção, o impacto da informação da observação pode não ser preciso o suficiente para aumentar o desempenho. Um dos princípios de ajuste de desempenho é que, em geral, não há como supor qual será o próximo gargalo até a remoção do atual, e tentar conjecturar pode ser um trabalho sem eficácia. Administração do SGBD PostgreSQL 11 EXPLICANDO MELHOR: Imagine que há um gargalo no servidor e que você ajuste o shared_buffers (lembra-se dele da unidade anterior?), aumentando-o significativamente. Isso pode fazer com que aumente a memória usada para armazenar as leituras do banco de dados. Contudo, haverá sérios prejuízos, como alocação de memória em operações de CPU. O mesmo acontecerá se for definido com um valor demasiadamente pequeno. Diante desse contexto, torna-se responsabilidade do administrador do banco de dados realizar os ajustes do SGBD PostgreSQL necessários, conforme a carga de trabalho, e realizar a correta configuração do banco de dados, sendo apenas a primeira etapa no ajuste de desempenho. NOTA: Tratando-se de performance, o ideal será realizar a configuração controlando as mudanças e observando e analisando o trade-off das decisões, isto é, as vantagens e desvantagens que ocorrerão a cada configuração realizada. Dessa forma, o primeiro passo para o aprendizado de como realizar a configuração de tuning no PostgreSQL é compreender o ciclo de vida de uma consulta. As etapas são: • Transmissão de string de consulta para o backend do banco de dados: essa é a etapa do comando SQL digitado a partir do aplicativo e do envio para o backend. Para melhorar a performance, o desenvolvedor pode inserir as queries que são muito longas no banco de dados como um procedimento armazenado e, dessa forma, reduzir a transferência de dados ao mínimo. Administração do SGBD PostgreSQL12 • Análise de string de consulta: nesse passo do ciclo de vida da consulta, quando a string está armazenada no servidor PostgreSQL, ela é analisada em tokens. • Planejamento de consulta para otimizar a recuperação de dados: quando o servidor inicializa o trabalho e verifica se a query já está pronta e se a biblioteca do cliente suporta esse recurso, além de analisar o SQL para determinar a abordagem mais eficiente na recuperação dos dados. • Recuperação de dados do hardware: após a tomada de decisão do PostgreSQL sobre a melhor abordagem na recuperação dos dados (como uso de índice, hash join etc.), vai realizar a obtenção cuja etapa depende da configuração de hardware. • Transmissão de resultados para o cliente: nesta última etapa ocorre a transmissão dos resultados ao cliente. Não há opções de ajustes para o administrador do banco de dados, mas uma opção de melhorar a performance é minimizar o número de linhas e de colunas para apenas as necessárias para o cliente. A configuração do PostgreSQL que já vem implementada por padrão após a instalação é uma estimativa conforme um banco de dados de porte médio, pois cada banco de dados não é somente diferente no seu projeto, mas também nos seus requisitos. Sendo assim, alguns sistemas de banco de dados são usados para registrar altos volumes de dados que raramente são consultados, outros, já podem ser acessados de forma ininterrupta. Dessa forma, sua configuração conforme o perfil de uso torna-se essencial. O alto desempenho no PostgreSQL pode ser obtido por meio de boas definições de configuração e de esquemas físicos adequados, incluindo índices. Ainda, os planos de execução dependem das estatísticas reunidas nas tabelas; felizmente, no PostgreSQL, você pode controlar o comportamento da coleção de estatísticas. Ao lidar com chaves estrangeiras, Juba e Volkov (2019, p. 391) apresentam duas recomendações para aumentar o desempenho, que são as seguintes: Administração do SGBD PostgreSQL 13 • Sempre indexe chaves estrangeiras: indexar uma tabela para chaves estrangeiras permite que o PostgreSQL busque dados da tabela usando uma varredura de índice. • Aumente a meta da estatística da coluna nas chaves estrangeiras: isso também se aplica a todos os predicados, porque permite que o PostgreSQL tenha uma estimativa melhor do número de linhas. A meta estatística padrão é 100, e o máximo é 10.000. Aumentar o destino das estatísticas torna o comando ANALYZE mais lento. Ambas as abordagens anteriores requerem a identificação de chaves estrangeiras. A tabela pg_catalog.pg_constraint pode ser usada para consultar as restrições da tabela. Para saber as restrições de chave estrangeira, você pode simplesmente executar a seguinte consulta: SELECT * FROM pg_constraint WHERE contype = ‘f’; Performance de Tuning para Leitura Você sabia que o PostgreSQL fornece os meios para descobrir o porquê de uma determinada consulta estar lenta? Ele analisa tabelas, coletando estatísticas delas, e constrói histogramas usando auto- vacuuming. A opção auto-vacuuming é normalmente usada para recuperar espaços em disco, atualizar estatísticas de tabela e executar outras tarefas de manutenção, por exemplo, evitar o retorno de ID da transação. Dessa forma, as estatísticas da tabela realizadas pelo PostgreSQL permitem que seja escolhido um plano de execução com o menor custo possível, calculado levando em consideração as entradas e as saídas, além do custo da CPU. Além disso, o PostgreSQL permite que os usuários vejam o plano de execução gerado, fornecendo o comando EXPLAIN. Administração do SGBD PostgreSQL 14 IMPORTANTE: Você se lembra dos comandos BUFFER e ANALYZE das unidades anteriores? O comando EXPLAIN pode mostrar o porquê de uma determinada consulta estar lenta, especialmente se as opções BUFFER e ANALYZE são usadas. De acordo com os autores Juba e Volkov (2019, p. 410), existem algumas dicas que permitem que o administrador do banco de dados decida se o plano de execução é bom ou não. Essas dicas são as seguintes: • O número estimado da linha em comparação com o número de linhas reais: este parâmetro define o método de execução da consulta. Contudo, há duas vertentes: o número de linhas pode ser subestimado ou superestimado; a estimativa incorreta pode afetar todo o algoritmo que é usado para: buscar dados do disco rígido; classificar; juntar etc. No caso em que o número de linhas for subestimado, o impacto no desempenho será mais evidente. • Operação de ordenação em memória ou em disco: ao realizar uma operação de ordenação (como DISTINCT, LIMIT, ORDER ou GROUP BY), se houver memória suficiente, ela será realizada na memória RAM, caso contrário, o disco rígido será utilizado. • Buffer cache: sugere-se verificar a quantidade de dados armazenados em buffer, pois, para a leitura dos dados a partir de buffers, sempre aumentará o desempenho. Ainda, existem alguns erros comuns e más práticas que os desenvolvedores podem executar. Por exemplo, um banco de dados relacional baseia-se na teoria dos conjuntos, então, alguns desenvolvedores tendem a executar em nível de linha, ao invés de manipulação de conjunto. Além disso, muitas pessoas criam designs físicos inadequados porque não estão familiarizadas com a modelagem de banco de dados relacional. Em geral, existem vários problemas que podem levar a um mau desempenho: Administração do SGBD PostgreSQL 15 • Estatísticas incorretas: isso pode acontecer se houver correlações cruzadas entre predicados, ou se os predicados tiverem uma função imutável. • Recuperação de dados desnecessária: quando há dados desnecessários, por exemplo, selecionar todas as linhas e colunas, mesmo se apenas um subconjunto for necessário. • Manipulação de dados desnecessária: isso é bastante comum, como aplicar classificação aos dados quando não é necessário. Ainda, para problemas de modelagem, o ideal é verificar a normalização do banco de dados, porque ela também pode aumentar o desempenho, reduzindo o tamanho dos dados e aprimorando as estatísticas. No caso de queries lentas, a primeira recomendação é verificar o pg_stat_statements, respondendo as seguintes questões: • Quantas consultas simultâneas estão sendo executadas no sistema? • É possível visualizar tipos semelhantes de consulta aparecendo na coluna de consulta de forma contínua? • É possível visualizar as consultas que estão em execução há muito tempo? • Existem bloqueios que não foram concedidos? • Visualizam-se conexões de hosts suspeitos? A visualização pg_stat_activity deve sempre ser verificada, primeiro porque possibilitará um overview do sistema, apesar de o monitoramento gráfico fornecer uma primeira impressão do sistema, mas tudo se resume às consultas que estão sendo executadas no servidor. Portanto, uma boa visão geral do sistema fornecida por pg_stat_activity é essencial para o rastreamento de problemas. Administração do SGBD PostgreSQL 16 Exemplo: Vejamos um exemplo de como observar as consultas que estão sendo executadas atualmente na base de dados: Com tal comando, é possível observar as consultas abertas, ativas, ociosas e ociosas na transação. Caso haja muitas transações ociosas, é essencial investigar o tempo em que elas foram mantidas abertas. Assim, podemos utilizar o seguinte comando: IMPORTANTE: A partir do comando, é possível observar no retorno a duração, e caso uma transação seja muito demorada, isto é, está há mais de 22h, é altamente suspeito e potencialmente perigoso. Dessa forma, o ideal é assegurar que transações com duração muito longas sejam monitoradas ou excluídas. Diante desse contexto, o Administração do SGBD PostgreSQL 17 PostgreSQL, a partir da versão 9.6, implementou um recurso chamado snapshot too old, que permite encerrar tais transações suspeitas. Exemplo: Vejamos um exemplo: Nesse caso, todas as consultas ativassão realizadas, e as instruções calculam há quanto tempo cada consulta já está ativa. Frequentemente, vemos consultas semelhantes surgindo no topo, o que pode nos dar algumas pistas valiosas sobre o que está acontecendo em seu sistema. Após a inspeção no pg_stat_activity, é coerente realizar a verificação das consultas que estão lentas/demoradas. Para isso, podemos abordar de duas formas: (i) procurando consultas lentas individuais no log; ou (ii) procurar tipos de consultas que demoram longos períodos. Para o primeiro caso, o PostgreSQL está, por padrão de instalação, desativado. Para ativar a busca por consultas lentas, teremos que definir a variável log_min_duration_statement para especificar um limite desejado, e o PostgreSQL começa a escrever uma linha de log para cada consulta que exceder tal limite. Vejamos a linha de comando: postgres=# SHOW log_min_duration_statement; Não obstante, não é possível afirmar com exatidão o valor desejado, pois dependerá das características do banco de dados, e isso está agregado ao perfil da empresa, porque, dependendo da carga de trabalho, o tempo desejado pode variar. Então, podemos refinar o comando da seguinte forma: Administração do SGBD PostgreSQL 18 NOTA: Ao usar o log de consulta lenta, é importante considerar que muitas consultas menores também podem causar mais carga. Obviamente, sempre faz sentido estar cientes de consultas lentas individuais, mas, às vezes, elas não são o real problema. Outra recomendação importante é inspecionar o log a fim de verificar o que está ocorrendo. Uma alternativa é investigar as entradas de registro que variam, hierarquicamente, em três níveis: • ERRO: usado para problemas como erros de sintaxe, problemas relacionados a permissões etc. Ainda assim, é possível notar que o log sempre conterá erros, mas a presença de várias mensagens de erro de sintaxe é um indicativo para uma abordagem mais eficiente. • FATAL: usado quando houver problemas de alocação de memória, por exemplo, quando a presença é mais significativa e alarmante em relação ao ERRO. • PANIC: indica os maiores sinais de alarme no banco de dados e carece de uma abordagem com urgência por parte do administrador. Um exemplo dessa entrada de registro são as tabelas de bloqueio corrompidas. SAIBA MAIS: Gostou do assunto? Quer se aprofundar neste tema? Recomendamos o acesso à seguinte fonte de consulta: Artigo: “TUNING - Técnicas de Otimização de Banco de Dados Um Estudo Comparativo: Mysql e Postgresql”. CARNEIRO et al. (2009), pelo link: https://bit.ly/2GTXV8v Administração do SGBD PostgreSQL https://bit.ly/2GTXV8v 19 RESUMINDO: E então? Gostou do que mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo. Você deve ter aprendido que, em uma base de dados PostgreSQL, os valores de configuração padrão não são apropriados em um ambiente de produção, porque tais valores geralmente são subestimados ou superestimados, cuja estimativa incorreta pode afetar todo o algoritmo usado para: buscar dados do disco rígido; classificar; juntar etc. Vimos o ciclo de vida de uma consulta SQL e comandos para a inspeção e posterior abordagem de melhoria de desempenho, além de aprendermos a realizar um overview da base de dados por meio do pg_ stat_activity. Administração do SGBD PostgreSQL 20 Configuração do PostgreSQL INTRODUÇÃO: Ao término deste capítulo você será capaz configurar o arquivo postgresql.conf de modo a otimizar o desempenho do PostgreSQL. Isso será fundamental para o exercício de sua profissão, pois a otimização do desempenho em uma base de dados é essencial para garantir a disponibilidade os dados de forma eficiente. Nas Unidades anteriores, vimos em teoria algumas funcionalidades de melhoria do desempenho do servidor do postgresql.conf. Agora, vamos ver em detalhes com exemplos práticos. Muitos administradores de banco de dados têm a possibilidade de otimizar o acesso e o desempenho apenas realizando uma configuração adequada, mas, por ser um recurso avançado, poucos o adotam e acabam perdendo desempenho por falta de conhecimento específico. E então, motivado para desenvolver essa competência? Vamos lá!. O arquivo postgresql.conf controla as configurações da manutenção do servidor PostgreSQL e, por meio dele, é possível substituir muitas configurações no banco de dados, função, sessão e até mesmo níveis de função. Você encontrará muitos detalhes sobre como configurar seu servidor ajustando as configurações no arquivo e ajustando seu servidor PostgreSQL. No entanto, a partir da versão 9.4, o PostgreSQL disponibilizou uma alteração a fim de facilitar o trabalho do administrador. IMPORTANTE: Dessa nova versão (9.4) em diante, é possível evitar a edição diretamente no postgresql.conf usando um arquivo adicional chamado postgresql.auto.conf. Além disso, Obe e HSU (2017, p. 41), em seu guia prático de banco de dados PostgreSQL avançado, recomendam que o administrador do Administração do SGBD PostgreSQL 21 banco de dados não modifique o arquivo postgresql.conf, mas que realize quaisquer configurações personalizadas em postgresql.auto.conf. Um dos métodos que possibilita ao administrador realizar a leitura das configurações atuais do servidor PostgreSQL sem abrir o arquivo postgresql.conf é consultar a visão chamada pg_settings. A primeira coisa que um administrador precisa aprender é como descobrir de onde vêm os parâmetros de configuração. Para isso, vejamos o pg_settings com o seguinte comando: Você se lembra do psql, não é mesmo? Vamos visualizar o retorno na tela do psql por meio da Figura 1: Figura 1 : pg_settings por TimeZone Fonte: Elaborado pela autora. Administração do SGBD PostgreSQL 22 NOTA: As configurações de superusuário podem ser alteradas apenas por um superusuário e serão aplicadas a todos os usuários que se conectarem após uma recarga. Os usuários não podem substituir individualmente a configuração. Agora que você já sabe selecionar o fuso horário, vamos supor que precise trocar o fuso horário do seu servidor PostgreSQL. Para saber qual definir, veja a lista completa de todos os fusos horários do PostgreSQL por meio do seguinte comando: postgres=# SELECT * FROM pg_timezone_names; Então, a partir dessa lista, você poderá verificar o TimeZone que deseja trocar. Vejamos uma parte desse retorno da lista na Figura 2: Figura 2 : Lista de TimeZone do PostgreSQL Fonte: Elaborado pela autora. Administração do SGBD PostgreSQL 23 Sendo assim, vejamos como trocar o fuso horário no PostgreSQL. Observe novamente a Figura 1, em que temos um TimeZone definido como “America/Buenos Aires”. Então, suponhamos que você deseje trocar para “Europe/Berlin”. Para isso, precisa executar o seguinte comando: postgres=# ALTER SYSTEM SET timezone to ‘Europe/ Berlin’; Caso você execute novamente o comando para verificar o fuso horário atual, verá que o TimeZone definido é o mesmo. Então, para que as alterações sejam aplicadas, é fundamental reiniciar o serviço do PostgreSQL. Lembra-se do comando das Unidades anteriores que apresentamos para reiniciar o serviço PostgreSQL? Vejamos: postgres=# SELECT pg_reload_conf(); Após a execução, podemos listar o fuso horário e verificar a troca. Vejamos o retorno do procedimento executado na Figura 3: Figura 3 : Mudança da TimeZone do PostgreSQL Fonte: Elaborado pela autora. Administração do SGBD PostgreSQL 24 IMPORTANTE: As configurações do Postmaster afetam todo o servidor (postmaster representa o serviço PostgreSQL) e entram em vigor somente após a reinicialização. Agora que você está expert, vamos mergulhar mais um pouco no assunto, ampliando a visão de leitura com as seguintes especificações: listen_addresses, deadlock_timeout, shared_buffers, effective_cache_ size, work_mem, maintenance_work_mem. Exemplo: Vejamos o comando dessa visãopor meio do pg_settings: As configurações com contexto de usuário ou de superusuário podem ser definidas para um banco de dados específico, um usuário, uma sessão e um nível de função. Administração do SGBD PostgreSQL 25 EXPLICANDO MELHOR: Suponha que você pode querer definir work_mem mais alto para um usuário de nível guru SQL que escreve consultas incompreensíveis. Então, se tem uma função que faz uso intensivo de classificação, pode gerar work_mem apenas para ela. As configurações definidas nos níveis de banco de dados, usuário, sessão e função não requerem uma recarga, e as configurações definidas no nível do banco de dados entram em vigor na próxima conexão com o banco de dados, e as configurações definidas para a sessão ou função entram em vigor imediatamente. Ainda assim, faz-se necessário que o administrador do banco de dados sempre realize uma segunda verificação das configurações do servidor PostgreSQL. O comando ALTER SYSTEM do PostgreSQL e o postgresql.auto. conf fornecem uma maneira conveniente de alterar a configuração de todo o cluster de banco de dados, sem que o administrador precise editar o arquivo postgresql.conf manualmente. No PostgreSQL é possível usar o postgresql.auto.conf para sobrescrever os parâmetros de configuração em postgresql.conf. Dessa forma, o postgresql.auto.conf tem uma prioridade mais alta em relação ao postgresql.conf. Sendo assim, vamos usar o ALTER SYSTEM para melhorar o desempenho do servidor PostgreSQL definindo a quantidade de memória disponível para as operações internas de classificação, lembrando sempre de executar o comando de reinicialização do servidor: postgres=# ALTER SYSTEM SET work_mem = ‘500MB’; postgres=# SELECT pg_reload_conf(); Se você tiver que rastrear várias configurações, é possível organizá- las em vários arquivos de configuração e, em seguida, vinculá-los de volta usando o include ou o include_if_exists no postgresql.conf, cujo Administração do SGBD PostgreSQL 26 argumento do nome do arquivo pode ser um caminho absoluto ou relativo do arquivo postgresql.conf. Vejamos a sintaxe do comando: include ‘filename’ Caso você edite o arquivo postgresql.conf, e o servidor esteja com problemas para iniciar, você poderá verificar o ocorrido examinando o arquivo de log. Tal arquivo está localizado na raiz da pasta de dados ou na subpasta chamada pg_log. Para isso, abra o arquivo mais recente e leia o que diz a última linha. O erro levantado geralmente é autoexplicativo. Uma das maiores causas de erros na inicialização do servidor PostgreSQL é a definição de shared_buffers muito altos, cujos valores recomendados para um bom desempenho são de 15% a 28% da memória RAM total do servidor. Lembra-se de que não há uma configuração padrão? Cada servidor precisa ser configurado conforme suas necessidades. Por exemplo: se o tamanho da memória RAM for de 32 GB, então, o valor recomendado para o shared_buffers é de 8 GB. No arquivo postgresql.conf podemos editar e especificar o valor na seguinte linha: shared_buffers = 8GB Outro procedimento de configuração para melhorar o desempenho do servidor PostgreSQL é o parâmetro work_mem que, se bem configurado, poderá resultar em menos trocas de disco e, consequentemente, as consultas SQL serão mais rápidas. Todavia, para saber o valor ideal do work_mem a ser configurado, fazemos a seguinte fórmula: Total de memória RAM * 0,25 / max_connections Em que o max_connections é o número máximo de conexões simultâneas que, por padrão do PostgreSQL, é de 100. Administração do SGBD PostgreSQL 27 O valor do work_mem é definido no arquivo postgresql.conf ou diretamente em uma função. Vejamos as duas formas: • No arquivo postgresql.conf: work_mem = 4MB • Definido diretamente na função: postgres=# alter user teste set work_mem = ‘4MB’; ALTER ROLE No caso de melhorar o desempenho do vacuuming, alteração de tabelas e criação de índices, recomenda-se a configuração do parâmetro maintenance_work_mem que especifica o limite máximo de memória a ser utilizada. Apesar de o valor do maintenance_work_mem já vir especificado com um padrão do PostgreSQL, o ideal é defini-lo mais alto do que o work_ mem, cujo cálculo do melhor valor que o administrador pode fazer é: Total de memória RAM * 0,05 Neste caso, vejamos a sintaxe do valor no arquivo postgresql.conf: maintenance_work_mem = 64MB SAIBA MAIS: Gostou do assunto? Quer se aprofundar nesse tema? No site do EDB Postgres Advanced Server é disponibilizada uma lista dos parâmetros mais utilizados para a manutenção do desempenho do servidor PostgreSQL. Nela você pode verificar os valores padrão dos parâmetros e as requisições necessárias para os efeitos de mudança no servidor, que podem ser: imediatos, após a reinicialização ou com reload. Acesse o site pelo link https://bit.ly/2T0viIV Administração do SGBD PostgreSQL https://bit.ly/2T0viIV 28 RESUMINDO: E então? Gostou do que mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo. Você deve ter aprendido que o arquivo postgresql.conf controla as configurações da manutenção do servidor PostgreSQL e que, por meio dele, é possível substituir muitas configurações no banco de dados, função, sessão e até mesmo níveis de função. Aprendemos a usar um arquivo adicional chamado postgresql.auto.conf e a modificar por meio do pg_settings. Além disso, vimos exemplos práticos de configurações para a melhoria do desempenho do servidor PostgreSQL, como work_mem e maintenance_work_mem. Administração do SGBD PostgreSQL 29 Backup e Recuperação INTRODUÇÃO: Ao término deste capítulo você será capaz de entender como realizar backup para garantir integridade dos dados no PostgreSQL, utilizando várias estratégias. Isso será fundamental para o exercício de sua profissão, pois, após alguma execução errada no servidor que corrompeu ou perdeu dados, o backup e a recuperação dos dados são práticas essenciais para a proteção e a integridade dos dados. É muito comum ouvirmos relatos da área em que as pessoas que tentaram realizar ajustes indevidos no servidor sem terem executado o procedimento de backup perderam dados valiosos e irrecuperáveis da empresa. Motivado para desenvolver esta competência? Então, vamos lá!. Backup no PostgreSQL O PostgreSQL suporta backups físicos e lógicos. O backup físico é executado copiando os arquivos do banco de dados e os arquivos WAL acumulados durante a cópia. Já o backup lógico é usado para fazer a cópia de segurança do banco de dados na forma de instruções SQL. NOTA: Ao contrário do backup físico, no lógico é possível descartar e restaurar um único banco de dados, uma tabela ou até mesmo um conjunto de dados específico. Frequentemente, um banco de dados pode conter vários objetos não utilizados ou dados muito antigos. Limpar esses objetos ajuda os administradores a fazerem backup de imagens mais rapidamente. Do ponto de vista do desenvolvimento, os objetos não utilizados são semelhantes ao ruído silencioso, porque eles afetam o processo de refatoração. Administração do SGBD PostgreSQL 30 IMPORTANTE: Para o caso de aplicativos de banco de dados, é necessário manter o banco de dados limpo, pois os objetos de banco de dados não utilizados podem impedir o desenvolvimento rápido por causa das dependências deles. Diante desse contexto, para limpar o banco de dados, é essencial a identificação dos objetos de banco de dados não usados, incluindo tabelas, visualizações, índices e funções. As estatísticas da tabela (como o número de linhas ativas, as varreduras de índice e as varreduras sequenciais) podem ajudar a identificar tabelas vazias e não utilizadas. Observe que as consultas a seguir são baseadas em estatísticas, portanto, os resultados precisam ser validados. Para isso, a tabela pg_stat_user_tables fornece essas informações. Vejamosno exemplo de consulta, a seguir, em que é possível verificar tabelas vazias por meio do número de tuplas: SELECT relname FROM pg_stat_user_tables WHERE n_live_ tup= 0; Para localizar as colunas vazias ou não utilizadas, é preciso verificar o atributo null_fraction da tabela pg_stats. Caso o null_fraction seja igual a um, então significa que a coluna está completamente vazia. Vejamos o comando: O PostgreSQL vem com três utilitários para backup dentro da pasta bin: pg_dump, pg_dumpall e pg_basebackup. Use o pg_dump para fazer backup de bancos de dados específicos. No caso do backup de todos os bancos de dados em texto simples e junto aos os globais do servidor, use Administração do SGBD PostgreSQL 31 pg_dumpall. Já para o backup de disco em nível de sistema de todos os bancos de dados, use o pg_basebackup. NOTA: O pg_dumpall precisa ser executado em uma conta de superusuário para que faça backup de todos os bancos de dados. O pg_basebackup é a forma mais completa de fazer um backup de todo o cluster do servidor postgresql. Contudo, será uma discussão para o nosso próximo capítulo sobre replicação. Sendo assim, falaremos sobre o pg_dump e o pg_dumpall. O Utilitário pg_dump De acordo com a documentação do PostgreSQL, o pg_dump é um utilitário que realiza backup em SQL simples e, também, em formatos compactados, TAR e de diretório. Os backups compactados, TAR e de diretório podem aproveitar o recurso de restauração paralela do pg_restore. Considerando um banco de dados de grande porte, os backups de diretório são os ideais, pois permitem que o pg_dump trabalhe em paralelo. O backup em texto simples é um arquivo com os comandos SQL CREATE e INSERT padrão, que podem copiar comandos específicos do psql. Sendo assim, é possível restaurar executando o arquivo no psql ou no pgAdmin. IMPORTANTE: Tratando-se de backup de rotina (do dia a dia), o pg_dump é mais rápido em relação ao pg_dumpall, porque pode realizar backup de tabelas, de esquemas e de bancos de dados de forma seletiva. Administração do SGBD PostgreSQL 32 O pg_dump faz o procedimento em apenas um único banco de dados. Para fazer backup de um cluster inteiro ou de objetos globais que são comuns a todos os bancos de dados em um cluster (como funções e espaços de tabela), o ideal é o pg_dumpall. Os dumps (ou cópias de segurança) podem ser restaurados a partir de dump scripts enviados para o psql. Os arquivos de script podem ser usados para reconstruir o banco de dados mesmo em outras máquinas e em outras arquiteturas, com algumas modificações, mesmo em outros produtos de banco de dados SQL. Os formatos alternativos de arquivo devem ser usados com pg_ restore para reconstruir o banco de dados. Eles permitem que o pg_ restore seja seletivo sobre o que é restaurado, ou mesmo reordene os itens antes de serem restaurados. Os formatos de arquivo são projetados para serem portáveis em todas as arquiteturas. IMPORTANTE: Na atualização para a versão mais recente do PostgreSQL (versão 13.0, de 24 de setembro de 2020) do Grupo de Desenvolvimento PostgreSQL sobre o pg_dump, afirma-se que ele pode ser usado para fazer o backup de um banco de dados inteiro, em conjunto com o pg_restore, para examinar o arquivo e/ou selecionar quais partes do banco de dados devem ser restauradas. De acordo com o Grupo de Desenvolvimento PostgreSQL (2020), os formatos de arquivos mais saída flexível são custom (-Fc) e directory (-Fd). Esses formatos permitem a seleção e o reordenamento de todos os itens arquivados, oferecem suporte à restauração paralela e são compactados por padrão. O formato directory é o único que suporta dumps paralelos. Vejamos algumas formas para criar backups de banco de dados: Administração do SGBD PostgreSQL 33 • Backup de banco de dados comprimido e único: pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f nomeBanco_bd.backup nomeBanco_bd • Backup de banco de dados único de texto simples, incluindo uma instrução do tipo CREATE DATABASE, podemos usar o seguinte comando: pg_dump -h localhost -p 5432 -U postgres -C -F p -b -v -f nomeBanco_bd.backup nomeBanco_bd • Backup de banco de dados comprimido de tabelas. Vejamos um exemplo de backup de todas as tabelas do banco de dados que comecem com a palavra “filmes”: pg_dump -h localhost -p 5432 -U postgres -F c -b -v -t *.filmes* -f filmes.backup nomeBanco_bd • Backup de banco de dados comprimido de todos os objetos em todos os esquemas, exceto para o público: pg_dump -h localhost -p 5432 -U postgres -F c -b -v -N public -f todos_sch_exceto_pub.backup nomeBanco_bd • Backup de banco de dados de SQL em texto simples de tabelas selecionadas: pg_dump -h localhost -p 5432 -U postgres -F p --column- inserts -f select_tabelas.backup nomeBanco_bd NOTA: O backup de banco de dados de SQL em texto é bastante útil para importar a estrutura e os dados para versões mais antigas do PostgreSQL ou de outros bancos de dados. Administração do SGBD PostgreSQL 34 Dessa forma, é possível escolher o diretório de backup de cada tabela, por exemplo, um arquivo separado por pasta. Consequentemente, evitará possíveis limitações de espaço no sistema de arquivos. • Backup de banco de dados paralelo com uso do Jobs --jobs (-j): pg_dump -h localhost -p 5432 -U postgres -j 3 -Fd -f diretorioEscolhido/ nomeBanco_bd NOTA: Com o backup de banco de dados paralelo usando – jobs=3, são executados três backups simultaneamente. O ideal para o paralelo é fazer o uso da opção de formato de diretório, pois cada gravação deverá ser salva em um arquivo separado. • Backup de banco de dados para gerar novo diretório e preencher com um arquivo gzip para cada tabela, isto é, irá criar diversos arquivos de backup: pg_dump -h localhost -p 5432 -U postgres -F d -f diretorioEscolhido/ nomeBanco_bd NOTA: Nesse tipo de backup, caso o diretório já exista, o comando irá enviar um erro para a saída. Depois de todos esses comandos, você ficou curioso para que servem as opções das linhas de comando? Você se perguntou sobre o Administração do SGBD PostgreSQL 35 propósito delas e da possibilidade de controlar o conteúdo e o formato de saída do backup? Como falamos anteriormente, o Grupo de Desenvolvimento PostgreSQL lançou sua mais nova versão (13.0, de 24 de setembro de 2020) elencando as opções de linha de comando e a funcionalidade para o controle do conteúdo e o formato de saída na documentação. Vejamos as mais importantes que utilizamos em nossos exemplos: • dbname: especifica o nome do banco de dados a ser salvo. Se isso não for especificado, a variável de ambiente pgdatabase será usada. Se não for definido, o nome de usuário especificado para a conexão será usado. • --a ou --data-only: descarrega apenas os dados, excluindo os schemas. Nele vão os dados da tabela, os objetos grandes e os valores de sequência. • -b ou --blobs: descarrega os objetos grandes, exceto quando --shema, --table, ou --schema-only são especificados. • -B ou --no-blobs: exclui os objetos grandes do dump. • -c ou --clean: comandos de saída para limpar (descartar) objetos de banco de dados antes de enviar os comandos para criá-los. • -C ou --create: começa a saída com um comando para criar o próprio banco de dados e reconecta-se ao banco de dados criado (com um script desta forma, não importa a qual banco de dados na instalação de destino você se conecta antes de executar o script.) Se --clean também for especificado, o script descarta e recria o banco de dados de destino antes de se reconectar a ele. • -E encoding ou –encoding=encoding: cria o dump na codificação do conjunto de caracteres especificado. Por padrão, o dump é criado na codificação do banco de dados. • -f file ou --file=file: envia a saída para o arquivo especificado. Esse parâmetro pode ser omitido para formatos de saída baseados em arquivo, casos em quea saída padrão é usada. Deve ser fornecido para o formato de saída do diretório, mas onde se especifica o diretório Administração do SGBD PostgreSQL 36 de destino, em vez de um arquivo. Nesse caso, o diretório é criado por pg_dump e não deve existir outro diretório com o mesmo nome. • -F format ou --format=format: seleciona o formato da saída, e cujo valor pode ser um dos seguintes: • p ou plain: produz um arquivo de script SQL de texto simples (o padrão). • c ou custom: produz um arquivo de formato personalizado adequado para entrada no pg_restore. Junto com o de saída do diretório, este é o formato de saída mais flexível, pois permite a seleção manual e a reordenação de itens arquivados durante a restauração. Ele também é compactado por padrão. • d ou directory: produz um arquivo em formato de diretório adequado para entrada no pg_restore. Isso criará um diretório com um arquivo para cada tabela e blob sendo salvos, além de um arquivo de índice que descreve os objetos salvos em um formato legível por máquina que o pg_restore pode ler. • t ou tar: produz um arquivo -format adequado para entrada no pg_ restore. No entanto, o formato TAR não suporta compactação. Além disso, ao usá-lo, a ordem relativa dos itens de dados da tabela não pode ser alterada durante a restauração. • -t pattern ou --table=pattern: descarrega apenas as tabelas com nomes correspondentes pattern. Para esse propósito, “tabela” inclui views, views materializadas, sequências e tabelas estrangeiras. Ainda, várias tabelas podem ser selecionadas escrevendo vários -t. • -v ou --verbose: especifica o modo detalhado. Isso fará com que o pg_dump exiba: comentários detalhados do objeto; horários de início/parada para o arquivo dump; e mensagens de progresso para o erro padrão. • -V ou –version: imprime a versão do pg_dump e sai. • -x, --no-privileges ou --no-acl: impede o armazenamento de privilégios de acesso (comandos conceder/revogar). Administração do SGBD PostgreSQL 37 O Utilitário pg_dumpall O utilitário pg_dumpall cria um dump lógico para todo o cluster PostgreSQL, isto é, faz um backup de todos os bancos de dados em um servidor em um único arquivo de texto simples. Esse tipo de backup abrangente inclui, automaticamente, os globais do servidor, como definições e funções de espaço de tabela. VOCÊ SABIA? Você sabia que vários especialistas recomendam realizar o backup de globais diariamente? Embora você também possa usar o pg_dumpall para fazer backup dos bancos de dados, também é possível fazer backup dos bancos de dados individualmente usando pg_dump ou pg_ basebackup para fazer um backup de nível de serviço PostgreSQL. Tal procedimento também é bastante utilizado por vários especialistas, pois restaurar a partir de um enorme backup de texto simples consome mais tempo no processo. NOTA: No caso de recuperação de dados, usar pg_basebackup em conjunto com a replicação de streaming é a maneira mais rápida de se recuperar de uma falha grave do servidor. Vejamos como fazer o backup de todas as definições globais e de apenas espaço de tabela por meio do seguinte comando: pg_dumpall -h localhost -U postgres --port=5432 -f myglobals.sql -- globals-only Administração do SGBD PostgreSQL 38 No caso da realização do backup de configurações globais específicas, use o seguinte: pg_dumpall -h localhost -U postgres --port=5432 -f myroles.sql --rolesonly Uma vez que o pg_dumpall lê as tabelas de todos os bancos de dados, é provável que seja necessária a conexão como um superusuário do banco de dados para produzir uma cópia de segurança completa. Além disso, precisará de privilégios de superusuário para executar o script salvo para poder adicionar funções e criar bancos de dados. NOTA: O pg_dumpall precisa se conectar várias vezes ao servidor PostgreSQL (uma vez por banco de dados). Se você usar autenticação de senha, ela solicitará uma senha todas as vezes. Restauração no PostgreSQL Assim como fizemos com os backups no PostgreSQL, vamos aprender sobre restauração no servidor PostgreSQL, cujo processo é tão simples quanto o que mostramos com os backups. Há duas formas de restaurar os dados do PostgreSQL: (i) usando o psql para restaurar backups de texto simples que foram gerados pelos pg_dump e pg_dumpall; e (ii) usando o utilitário pg_restore para restaurar backups TAR, comprimidos e do diretório criados pelo pg_dump. De acordo com Obe e Hsu (2017, p. 79), um backup simples de SQL é um arquivo de texto que contém um script SQL robusto. Com o backup SQL, você deve executar o script inteiro. Não é possível escolher objetos a menos que queira editar o arquivo manualmente. Administração do SGBD PostgreSQL 39 NOTA: Um backup simples de SQL é o menos conveniente de se ter, mas é o mais versátil. Vamos à restauração usando psql? Para isso, vejamos os exemplos a seguir. Você poderá executar no console do sistema operacional ou no psql: • Para restaurar um backup completo e ignorar erros: psql -h localhost -U postgres --port=5432 -f myglobals. sql • Para restaurar, parando se algum erro for encontrado: psql -h localhost -U postgres --port=5432 --set ON_ ERROR_STOP=on -f myglobals.sql • Para restaurar um banco de dados específico: sql -h localhost -U postgres --port=5432 -d mydb -f select_objects.sql Agora que você já conhece a restauração usando psql, vejamos como realizar usando o utilitário pg_restore. VOCÊ SABIA? Agora, com o pg_restore, é possível realizar algumas operações em paralelo para melhorar a velocidade de carregamento em sistemas que são limitados pela velocidade da CPU, em vez do rendimento do disco. Para realizar as operações de restauração em paralelo, você pode executar a opção -j para controlar o número de threads que serão usados e, com isso, diminuir o tempo de execução do processo. Administração do SGBD PostgreSQL 40 IMPORTANTE: Além de permitir realizar restaurações seletivas, o pg_ restore também possibilita a criação de um arquivo de índice de seu arquivo de backup para confirmar o que foi feito de fato e, ainda, pode editar este índice e usar o arquivo revisado para controlar quais objetos que devem ser restaurados. Para realizar a restauração usando o pg_restore, temos que criar um banco de dados em SQL, seja de forma separada ou em uma única etapa. Vejamos os exemplos a seguir das duas formas de restauração: • Na restauração de forma separada, primeiro criamos o banco de dados e depois usamos o comando de restauração: CREATE DATABASE nomeBanco_bd; pg_restore -h localhost -p 5432 -U postgres --dbname=nomeBanco_bd --jobs=3 --verbose nomeBanco_ bd.backup • Na restauração do banco de dados em etapa única: pg_restore -h localhost -p 5432 -U postgres --dbname =postgres --create --jobs=4 --verbose nomeBanco_ bd.backup IMPORTANTE: Usando a opção --create, o nome do banco de dados deve ser o mesmo você nomeou no backup, não podendo renomeá-lo. Se você também estiver usando a opção --dbname, nesse caso, o nome do banco de dados deve ser diferente do nome do banco de dados que está sendo restaurado. Administração do SGBD PostgreSQL 41 SAIBA MAIS: Gostou do assunto? Quer se aprofundar nesse tema? No site do Grupo de Desenvolvimento do PostgreSQL você pode acessar a documentação atualizada (24 de setembro de 2020) da versão 13.0 do PostgreSQL, por meio do link https://bit.ly/3dzKK8n RESUMINDO: E então? Gostou do que mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo. Você deve ter aprendido que há várias formas de realizar um backup e uma restauração no PostgreSQL. Ensinamos a usar os utilitários pg_dump e pg_dumpall para ambos backups no servidor PostgreSQL. Além disso, vimos como usar o utilitário pg_restore para realizar a restauração de duas formas: (i) usando o psql para restaurar backupsde texto simples que foram gerados pelos pg_dump e pg_dumpall; e (ii) usando o utilitário pg_restore para restaurar backups TAR, comprimidos e do diretório criado pelo pg_dump. Administração do SGBD PostgreSQL https://bit.ly/3dzKK8n 42 Replicação Nativa INTRODUÇÃO: Ao término deste capítulo você será capaz de compreender como criar e replicar servidores escravos (standby) no PostgreSQL, criando redundâncias e espelhamento de banco de dados. Isso será fundamental para o exercício de sua profissão, pois a replicação dos dados é uma das formas de garantir alta disponibilidade e confiabilidade dos dados. Duplicar e fazer backup dos dados é sempre uma boa prática, mas quando se trata de disponibilidade, precisamos de cópias do banco de dados. Muitas empresas se reestabelecem rapidamente após algum desastre/fatalidade com a ajuda da replicação dos dados. Nesse aspecto, a replicação é essencial para uma recuperação eficaz, além de ser normalmente utilizada em grandes companhias. Motivado para desenvolver essa competência? Então, vamos lá!. Antes de copiar qualquer dado, é essencial determinar quais queremos copiar. Em alguns casos, pode ser necessário copiar todo o banco de dados para fins de recuperação de desastres. Já em outras ocasiões, essa cópia desperdiçaria recursos. Ainda assim, devemos diferenciar entre esses dois cenários, porque, depois de fazer isso, é necessário decidir o que fazer quando não quisermos copiar todo o banco de dados. Precisamos saber quais tabelas copiar e para onde enviá-las. O PostgreSQL nos fornece métodos para construir e manter uma cópia totalmente online do banco de dados primário. Além disso, existem utilitários para duplicar tabelas quando não precisamos de uma cópia de todo o banco de dados. Thomas (2020, p. 332) afirma que a partir da versão 10, o PostgreSQL oferece suporte nativo à replicação lógica usando estruturas de publicação e de assinatura. Eles são gerenciados diretamente pelo analisador de Administração do SGBD PostgreSQL 43 sintaxe PostgreSQL como SQL nativo e criam objetos no catálogo do sistema que são gerenciados como todo o resto. Dessa forma, facilita a criação de listas de tabelas para transmitir aos servidores PostgreSQL destinatários localizados em outro lugar. Isso também significa que as ferramentas PostgreSQL padrão podem interagir com os conjuntos de assinaturas e tabelas, de maneira que as extensões não podem reproduzir. Esse procedimento irá criar um conjunto básico de tabelas e explicar um pouco sobre as limitações deste tipo de replicação lógica. Ainda, vamos repassar as etapas para replicar todo o cluster de servidor. Aproveitaremos a replicação de streaming. NOTA: Lembre-se de que a replicação de streaming requer apenas conexões no nível do banco de dados PostgreSQL entre o mestre e os escravos (standby). Passo a passo: Os mestres podem enviar dados, enquanto os standbys (ou escravos) são sempre receptores de dados replicados. Vejamos o passo a passo para a configuração do servidor master: 1. Na máquina master, iremos realizar as seguintes configurações: a. Vamos alterar as seguintes configurações em postgresql.conf. Isso pode ser feito usando ALTER SYSTEM set variable = value seguido por SELECT pg_reload_conf (); sem a necessidade de abrir o arquivo de configuração físico: Administração do SGBD PostgreSQL 44 b. Alternativamente, também podemos abrir o arquivo postgresql.conf e realizar os ajustes necessário. Para isso, podemos aplicar o seguinte comando: sudo -u postgres vim /etc/postgresql/12/main/ postgresql.conf Dentro do arquivo postgresql.conf, vamos alterar as seguintes configurações: 2. O próximo passo é criar uma conta de superusuário PostgreSQL dedicada e um banco de dados para os dados do repmgr. Vejamos: Administração do SGBD PostgreSQL 45 sudo -u postgres createuser -s repmgr e sudo -u postgres createdb repmgr -O repmgr 3. O próximo passo da configuração é a atribuição das permissões necessárias no arquivo pg_hba.conf para poder realizar a conexão em modo replicação: sudo -u postgres vim /etc/postgresql/12/main/pg_hba. conf 4. Ao final do documento pg_hba.conf, a seguinte linha deverá ser adicionada ao final do arquivo para que seja concedida a permissão de acesso à replicação: 5. Após isso, deve-se reiniciar o servidor para que as configurações sejam aplicadas: sudo service postgresql restart 6. Reinicializado o servidor, o próximo passo é a criação do arquivo de configuração do repmgr. Vejamos o comando: sudo vim /etc/repmgr.conf 7. Criado o arquivo, vamos adicionar a seguinte configuração: Administração do SGBD PostgreSQL 46 8. A partir de então, o próximo passo será a criação de um caminho de pesquisa do usuário do repmgr para incluir o nome de schema com o seguinte comando: 9. Pronto! Agora vamos inicializar o servidor master para que cada servidor no cluster de replicação tenha sua própria gravação, e cuja atualização ocorrerá quando o status ou a função forem alterados: Administração do SGBD PostgreSQL 47 E então, acompanhou bem o passo a passo? Vimos como configurar o servidor master. Agora vamos te mostrar como configurar o servidor Standby (ou escravo). Passo a passo: No servidor Standby (ou escravo) vamos fazer algumas alterações para efetivar o nó entre os servidores master e standby. Vejamos: 1. Criar um arquivo para o repmgr da seguinte forma: NOTA: Para fins de teste, o ideal é fazer um ping para o slave. Para testar, podemos dar o comando ping pgslave e observar se está se comunicando com o IP válido da rede. Administração do SGBD PostgreSQL 48 2. O próximo passo é parar o serviço do servidor PostgreSQL no servidor escravo e remover o diretório de dados do PostgreSQL, além de clonar o banco de dados do servidor master no servidor escravo. 3. O próximo passo é o registro do servidor para o modo standby: sudo -u postgres repmgr -f /etc/repmgr.conf standby register 4. Pronto! Agora, vamos realizar a conexão do banco de dados repmgr do servidor escravo e verificar a tabela repl_nodes: repmgr=# SELECT * FROM repmgr_teste.repl_nodes ORDER BY id; Administração do SGBD PostgreSQL 49 NOTA: Nesse momento, o servidor escravo possui uma cópia dos registros para todos os servidores no cluster de replicação. Note que a relação entre os servidores master e o escravo é explicitamente definida por meio do valor upstream_node_ id, 5. Agora, vamos mostrar que o servidor do escravo é o “mestre” do cluster de replicação: repmgr=# SELECT * FROM repmgr_teste.repl_nodes ORDER BY id; Prontinho! Finalizamos nossa configuração. Vamos testar se está tudo funcionando de forma adequada por meio do seguinte comando: Agora, vamos testar a replicação com a criação de banco de dados e verificar se está realizando a replicação. Vejamos: • Criando uma tabela para o teste de replicação: postgres=# CREATE DATABASE teste; • Verificação no servidor escravo: \list Administração do SGBD PostgreSQL 50 SAIBA MAIS: Gostou do assunto? Quer se aprofundar neste tema? No site do Grupo de Desenvolvimento do PostgreSQL você pode acessar a documentação e verificar as configurações que controlam o comportamento do recurso de replicação de streaming integrado e seus parâmetros. Acesse o link https://bit.ly/355IWQP RESUMINDO: E então? Gostou do que mostramos? Aprendeu mesmo tudinho? Agora, só para termos certeza de que você realmente entendeu o tema de estudo deste capítulo, vamos resumir tudo. Você deve ter aprendido a criar e a replicar servidores escravos (standby) no PostgreSQL, criando redundâncias e espelhamento de banco de dados. Vimos também como testar a efetividade do nó realizado entre os servidores master e escravo do PostgreSQL. Além do teste de conexão entre os dois servidores, estudamos também como testar a replicação de uma tabela com a criação de banco de dados e verificar se está realizando a replicação.Administração do SGBD PostgreSQL https://bit.ly/355IWQP 51 REFERÊNCIAS CARNEIRO, A. P.; MOREIRA, J. L.; FREITAS, A. L. C. de. TUNING-técnicas de otimização de banco de dados um estudo comparativo: mysql e postgresql. 2009. Disponível em: http://www.repositorio.furg.br/bitstream/ handle/1/1692/TUNING.pdf?sequence=1. Acesso em: 20 set. 2020. EDB, D. Top Performance Related Parameters. Disponível em: https://www. enterprisedb.com/edb-docs/d/edb-postgres-advanced-server/user- guides/user-guide/10/EDB_Postgres_Advanced_Server_Guide.1.24.html. Acesso em: 21 set. 2020. FRANCO, G.; VALE, L. A Importância e Influência do Setor de Compras nas Organizações. TecHoje. (s.d.). Disponível em: http://www.techoje.com.br/ site/techoje/categoria/detalhe_artigo/1004. Acesso em: 04 jul. 2017. OBE, R. O.; HSU, L. S. PostgreSQL: Up and Running: a Practical Guide to the Advanced Open Source Database. “O’Reilly Media, Inc.”, 2017. The PostgreSQL Global Development Group. Documentação do PostgreSQL. 2020. Disponível em: http://pgdocptbr.sourceforge.net/. Acesso em: 26 set. 2020. THOMAS, S. PostgreSQL 12 High Availability Cookbook: Over 100 recipes to design a highly available server with the advanced features of PostgreSQL 12. Packt Publishing Ltd, 2020. Administração do SGBD PostgreSQL http://pgdocptbr.sourceforge.net/ Administração do SGBD PostgreSQL Camila Freitas Sarmento Performance Tuning Configuração de Tuning no PostgreSQL Performance de Tuning para Leitura Configuração do PostgreSQL Backup e Recuperação Backup no PostgreSQL O Utilitário pg_dump O Utilitário pg_dumpall Restauração no PostgreSQL Replicação Nativa
Compartilhar