Entenda a arquitetura do PostgreSQL
O PostgreSQL é um sistema de gerenciamento de banco de dados relacional cliente/servidor (RDMS). O PostgreSQL também dá 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 sua própria linguagem de consulta chamada pgsql. Além disso, o PostgreSQL suporta linguagens processuais como Ruby on Rails.
Arquitetura cliente/servidor
O PostgreSQL é baseado em uma arquitetura cliente/servidor. O servidor armazena, gerencia e retorna dados para programas cliente. Os programas clientes solicitam dados usando pgSQL ou uma das linguagens processuais suportadas pelo PostgreSQL, como PL/pgSQL.
Uma sessão PostgreSQL consiste em três partes:
- O carteiro
- O aplicativo cliente
- O servidor
Carteiro
O Postmaster é o processo de daemon de supervisão que gerencia um servidor PostgreSQL. O daemon 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 ou ao processo do Postmaster.
Aplicações de cliente
Os clientes executam consultas e interagem com bancos de dados em um banco de dados do Azure para servidor PostgreSQL. Para executar consultas, você precisa de uma ferramenta de cliente como Azure Data Studio, DBeaver, pgAdmin ou psql. Você aprenderá sobre as ferramentas do cliente no próximo módulo.
Processos do servidor
Cluster - um único servidor PostgreSQL pode hospedar vários bancos de dados de usuários. PostgreSQL refere-se a esta 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 único banco de dados. 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 espaços de tabela e pg_xlog que contém os arquivos de log de gravação antecipada.
Nota
Os Bancos de Dados do Azure para PostgreSQL são 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 ou a qualquer um de seus subdiretórios.
Além dos bancos de dados criados, há três bancos de dados do sistema:
- Postgres - O banco de dados padrão. Depois que o servidor é criado, você se conecta ao banco de dados postgres.
- azure_maintenance - o banco de dados que gerencia os 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. Você não deve modificar o banco de dados azure_sys ou seus esquemas. Alterar qualquer coisa no azure_sys impede 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. Grandes bancos de dados com muitos objetos se beneficiam da organização de objetos em esquemas. Por exemplo, a criação de um esquema para objetos relacionados a vendas e um esquema para objetos relacionados ao cliente facilita a localização do objeto correto.
Parâmetros do 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 Banco de Dados do Azure para servidor PostgreSQL.
- No menu à esquerda, em Configurações, selecione Parâmetros do servidor.
- Use a barra de pesquisa para filtrar a lista de parâmetros ou selecione o número de página desejado.
Armazenamento - O Banco de Dados do Azure para PostgreSQL gerencia o armazenamento de dados para você e é provisionado no nível do servidor. Quer selecione Burstable, General purpose ou Memory optimized compute tier, pode utilizar até 32 TB de armazenamento. Para provisionar armazenamento, navegue até o Banco de Dados do Azure para servidor 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 deseja provisionar.
A quantidade de armazenamento provisionada define a capacidade de E/S disponível para seu Banco de Dados do Azure para o servidor PostgreSQL. Você pode monitorar seu consumo de E/S no portal do Azure ou usando comandos da CLI do Azure. As métricas relevantes a serem monitoradas são o limite de armazenamento, a porcentagem de armazenamento, o armazenamento usado e o percentual de E/S.
Nota
Você pode aumentar a quantidade de armazenamento depois de criar seu Banco de Dados do Azure para o servidor 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 são vinculados à área de armazenamento principal chamada PGDATA usando o subdiretório pg_tblspc . O Banco de Dados do Azure para PostgreSQL não oferece suporte a espaços de tabela: 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 retorna todos os bancos de dados em um servidor e pg_class armazena estatísticas sobre tabelas.
Nota
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 suporta 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 PostgreSQL Extensions Network (PGXN).
Para usar uma extensão PostgreSQL, ela deve 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 dão suporte ao Banco de Dados do Azure para PostgreSQL, execute a seguinte consulta:
SELECT * FROM pg_available_extensions;
Todos os servidores do Banco de Dados do Azure para PostgreSQL incluem a extensão pg_stat_statements. Esta extensão já está instalada para fornecer funcionalidade para controlar 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 todos os extratos emitidos diretamente pelos clientes (padrão).
- Nenhuma - nenhuma declaração é rastreada.
- All - rastreia todas as instruções, incluindo instruções aninhadas e instruções invocadas por funções.
Nota
Há sobrecarga de desempenho no servidor para registrar cada instrução SQL. Se você não estiver usando ativamente pg_stat_statements, defina esse parâmetro como nenhum. Observe também que alguns serviços de monitoramento de terceiros podem contar com pg_stat_statements.
Otimizador de consulta - O PostgreSQL usa um método de otimização de consulta baseado em custos. O analisador verifica a sintaxe da consulta e separa a consulta em diferentes partes. O analisador cria uma árvore de análise e passa a consulta para o reescritor, que aplica regras à consulta. O planejador descobre a melhor maneira de executar a consulta antes que ela seja executada.
Processos de back-end - processo PostgreSQL - modelo por transação. Quando um novo usuário se conecta, o PostgreSQL autentica o usuário e cria um processo de servidor back-end para lidar com a conexão. O cliente só interage com o processo do servidor ao enviar consultas e receber o resultado das consultas.