Entender a arquitetura do PostgreSQL
O PostgreSQL é um RDMS (sistema de gerenciamento de banco de dados relacional) cliente/servidor. O PostgreSQL também oferece suporte a uma ampla gama de extensões, como a extensão Citus na opção Azure Cosmos DB for PostgreSQL. Depois que uma extensão é carregada no banco de dados, ela funciona como qualquer recurso interno.
O PostgreSQL também tem uma linguagem de consulta própria chamada pgsql. Além disso, o PostgreSQL dá suporte a linguagens processuais como Ruby on Rails.
Arquitetura cliente/servidor
O PostgreSQL é baseado em uma arquitetura cliente/servidor. O servidor armazena, gerencia e retorna dados aos programas cliente. Os programas cliente solicitam dados usando pgSQL ou uma das linguagens processuais compatíveis com o PostgreSQL, como PL/pgSQL.
Uma sessão do PostgreSQL consiste em três partes:
- O postmaster
- O aplicativo cliente
- O servidor
Postmaster
O Postmaster é o processo de daemon de supervisão que gerencia um servidor PostgreSQL. O daemon do postmaster gerencia a comunicação entre os vários processos do servidor, incluindo a inicialização do servidor, o desligamento do servidor, o tratamento de solicitações de conexão e a execução de outros processos em segundo plano. No Banco de Dados do Azure para PostgreSQL, você não tem acesso ao sistema de arquivos nem ao processo do Postmaster.
Aplicativos cliente
Os clientes executam consultas e interagem com bancos de dados em um servidor do Banco de Dados do Azure para PostgreSQL. Para executar consultas, você precisa de uma ferramenta de cliente, como o Azure Data Studio, o DBeaver, o pgAdmin ou o psql. Você vai aprender sobre ferramentas de cliente no próximo módulo.
Processos do servidor
Cluster – um servidor PostgreSQL que pode hospedar vários bancos de dados de usuário. O PostgreSQL refere-se a essa coleção de bancos de dados como um cluster. Cada banco de dados é separado do outro, e os usuários e aplicativos interagem com um banco de dados individual. Os usuários são criados no nível do cluster ou do servidor.
Os dados desses bancos de dados são armazenados no diretório de dados do cluster chamado PGDATA. O diretório de dados PGDATA inclui um arquivo que contém a versão do PostgreSQL que está sendo executada, pg_tblspc, que contém links para tablespaces, além de pg_xlog, que contém os arquivos de log write-ahead.
Observação
O Banco de Dados do Azure para PostgreSQL é um serviço que gerencia o armazenamento e o sistema de arquivos subjacente. Como usuário deste servidor, você não tem acesso direto ao diretório PGDATA nem a nenhum dos respectivos subdiretórios.
Além dos bancos de dados criados, há três bancos de dados do sistema:
- postgres – o banco de dados padrão. Após a criação do servidor, você se conectará ao banco de dados postgres.
- azure_maintenance – o banco de dados que gerencia processos de serviço. Você não tem acesso direto a esse banco de dados.
- azure_sys – o banco de dados do Repositório de Consultas. Não modifique o banco de dados azure_sys nem os esquemas dele. Qualquer alteração no azure_sys impedirá que o Repositório de Consultas e outros recursos de desempenho funcionem corretamente.
Esquemas – um esquema é um agrupamento nomeado de objetos de banco de dados. Bancos de dados grandes com muitos objetos se beneficiam da organização de objetos em esquemas. Por exemplo, criar um esquema para objetos relacionados a vendas e um esquema para objetos relacionados a clientes facilitará a localização do objeto correto.
Parâmetros de servidor – o PostgreSQL tem vários arquivos de configuração, que determinam como o mecanismo de banco de dados deve funcionar. O arquivo de configuração principal do PostgreSQL é chamado postgresql.conf.
O Banco de Dados do Azure para PostgreSQL substituiu esses arquivos de configuração por Parâmetros de servidor, que podem ser acessados por meio do portal do Azure ou usando a CLI do Azure.
Para exibir ou alterar parâmetros de servidor no portal do Azure:
- Navegue até o servidor Banco de Dados do Azure para PostgreSQL.
- No menu esquerdo, em Configurações, selecione Parâmetros do servidor.
- Use a barra de pesquisa para filtrar a lista de parâmetros ou selecionar o número de página necessário.
Armazenamento – o Banco de Dados do Azure para PostgreSQL gerencia o armazenamento de dados para você e é provisionado no nível do servidor. Se selecionar os níveis de computação Com Capacidade de Intermitência, de Uso Geral ou Otimizado para Memória, você poderá usar até 32 GB de armazenamento. Para provisionar armazenamento, navegue até o servidor do seu Banco de Dados do Azure para PostgreSQL e, na seção Visão geral, selecione sua Configuração. A seção Computação + Armazenamento é exibida. Em Armazenamento e Tamanho do armazenamento (em GB), use o controle deslizante para selecionar a quantidade de armazenamento que você deseja provisionar.
A quantidade de armazenamento provisionada define a capacidade de E/S disponível para o servidor do Banco de Dados do Azure para PostgreSQL. Você pode monitorar o consumo de E/S no Portal do Azure ou usando os comandos da CLI do Azure. As métricas relevantes para monitorar são o limite de armazenamento, porcentagem de armazenamento, armazenamento usado e porcentagem de E/S.
Observação
Você pode aumentar a quantidade de armazenamento depois de criar seu servidor Banco de Dados do Azure para PostgreSQL, mas não pode reduzir a quantidade de armazenamento.
Tablespaces – com uma implementação local do PostgreSQL, você pode criar espaços de tabela que estão vinculados à área de armazenamento principal chamada PGDATA usando o subdiretório pg_tblspc. Banco de Dados do Azure para PostgreSQL não dá suporte a tablespaces: todas as tabelas são criadas na área de armazenamento principal.
Catálogos do sistema – o PostgreSQL contém muitas tabelas e exibições do sistema que armazenam informações sobre objetos de banco de dados. Por exemplo, pg_database retornará todos os bancos de dados em um servidor e pg_class armazenará estatísticas sobre tabelas.
Observação
O Banco de Dados do Azure para PostgreSQL permite o acesso a alguns, mas não a todos os catálogos do sistema.
Extensões – o PostgreSQL dá suporte a uma variedade de extensões que estendem a funcionalidade principal do mecanismo de banco de dados. Essas extensões são disponibilizadas em um repositório chamado PGXN (PostgreSQL Extensions Network).
Para usar uma extensão do PostgreSQL, ela precisa ser instalada em seu banco de dados. Para instalar uma extensão, execute o comando CREATE EXTENSION da ferramenta psql para carregar a extensão em seu banco de dados. Por exemplo:
SELECT create_extension('postgis');
Para descobrir quais extensões oferecem suporte ao Banco de Dados do Azure para PostgreSQL, execute a seguinte consulta:
SELECT * FROM pg_available_extensions;
Todos os servidores Banco de Dados do Azure para PostgreSQL incluem a extensão pg_stat_statements. Essa extensão já está instalada para fornecer funcionalidade para acompanhar estatísticas de execução de instruções SQL. O parâmetro de servidor pg_stat_statements.track define quais instruções são contadas pela extensão. As opções são:
- top – rastreia todas as instruções emitidas diretamente pelos clientes (padrão).
- none – nenhuma instrução é rastreada.
- all – rastreia todas as instruções, incluindo instruções aninhadas e instruções invocadas por funções.
Observação
Há uma sobrecarga de desempenho no servidor para registrar cada instrução SQL. Se você não estiver usando pg_stat_statements ativamente, defina esse parâmetro como none. Observe também que alguns serviços de monitoramento de terceiros podem depender de pg_stat_statements.
Otimizador de consulta – o PostgreSQL usa um método de otimização de consulta baseado em custo. O analisador verifica a sintaxe da consulta e separa a consulta em partes diferentes. O analisador cria uma árvore de análise e passa a consulta para o regravador, que aplica regras à consulta. O planejador descobre a melhor maneira de executar a consulta antes que ela seja executada.
Processos de back-end – processo do PostgreSQL – modelo por transação. Quando um novo usuário se conecta, o PostgreSQL autentica o usuário e cria um processo de servidor de back-end para lidar com a conexão. O cliente só interage com o processo do servidor ao enviar consultas e receber o resultado delas.