Informazioni sull'architettura di PostgreSQL

Completato

PostgreSQL è un sistema di gestione di database relazionali client/server. PostgreSQL supporta anche un'ampia gamma di estensioni, ad esempio l'estensione Citus nell'opzione Azure Cosmos DB for PostgreSQL. Dopo che un'estensione viene caricata nel database, funziona come qualsiasi funzionalità predefinita.

PostgreSQL ha inoltre un proprio linguaggio di query, denominato pgsql. PostgreSQL supporta anche linguaggi procedurali come Ruby su Rails.

Screenshot che mostra le estensioni e i linguaggi postgreSQL.

Architettura client/server

PostgreSQL si basa su un'architettura client/server. Il server archivia, gestisce e restituisce i dati ai programmi client. I programmi client richiedono i dati usando pgSQL o uno dei linguaggi procedurali supportati da PostgreSQL, ad esempio PL/pgSQL.

Una sessione PostgreSQL è costituita da tre parti:

  • Il postmaster
  • L'applicazione client
  • Il server

Postmaster

Il postmaster è il processo daemon di supervisione che gestisce un server PostgreSQL. Il daemon postmaster gestisce la comunicazione tra i vari processi server, tra cui l'inizializzazione del server, l'arresto del server, la gestione delle richieste di connessione e l'esecuzione di altri processi in background. In Database di Azure per PostgreSQL non si ha accesso al file system o al processo Postmaster.

Applicazioni client

I client eseguono le query e interagiscono con i database in un server di Database di Azure per PostgreSQL. Per eseguire le query, è necessario uno strumento client, ad esempio Azure Data Studio, DBeaver, pgAdmin o psql. Altre informazioni sugli strumenti client saranno disponibili nel modulo successivo.

Processi server

Cluster: un singolo server PostgreSQL può ospitare più database utente. PostgreSQL fa riferimento a questa raccolta di database come a un cluster. Ogni database è separato dall'altro e gli utenti e le applicazioni interagiscono con un singolo database. Gli utenti vengono creati a livello di cluster o server.

I dati per questi database vengono archiviati nella directory dati del cluster denominata PGDATA. La directory dati PGDATA include un file contenente la versione di PostgreSQL in esecuzione, pg_tblspc, che contiene collegamenti agli spazi tabella e pg_xlog, che contiene i file di log write-ahead.

Nota

Database di Azure per PostgreSQL è un servizio che gestisce l'archiviazione e il file system sottostante. L'utente di questo server non ha accesso diretto alla directory PGDATA o a una delle relative sottodirectory.

Oltre ai database creati, sono disponibili tre database di sistema:

  • postgres: il database predefinito. Dopo aver creato il server, ci si connette al database postgres.
  • azure_maintenance: il database che gestisce i processi del servizio. Non si ha accesso diretto a questo database.
  • azure_sys: il database Query Store. Non modificare il database azure_sys o i relativi schemi. La modifica di qualsiasi elemento in azure_sys impedisce il corretto funzionamento di Query Store e altre funzionalità di prestazioni.

Schemi: uno schema è un raggruppamento denominato di oggetti di database. Per i database di grandi dimensioni con molti oggetti è utile organizzare gli oggetti in schemi. Ad esempio, la creazione di uno schema per gli oggetti correlati alle vendite e uno schema per gli oggetti correlati ai clienti semplifica il reperimento dell'oggetto corretto.

Parametri del server: PostgreSQL include diversi file di configurazione, che determinano il funzionamento del motore di database. Il file di configurazione postgreSQL principale è denominato postgresql.conf.

Database di Azure per PostgreSQL ha sostituito questi file di configurazione con Parametri server, a cui è possibile accedere tramite il portale di Azure o usando l'interfaccia della riga di comando di Azure.

Per visualizzare o modificare i parametri del server nel portale di Azure:

  1. Passare al server di Database di Azure per PostgreSQL.
  2. Nel menu a sinistra in Impostazioni selezionare Parametri del server.
  3. Usare la barra di ricerca per filtrare l'elenco dei parametri o selezionare il numero di pagina necessario.

Archiviazione: Database di Azure per PostgreSQL gestisce automaticamente l'archiviazione dei dati e viene sottoposto a provisioning a livello di server. Se si seleziona il livello di calcolo con possibilità di burst, per utilizzo generico oppure ottimizzato per la memoria, è possibile usare fino a 32 TB di spazio di archiviazione. Per effettuare il provisioning dello spazio di archiviazione, passare al server di Database di Azure per PostgreSQL e nella sezione Panoramica selezionare Configurazione. Viene visualizzata la sezione Calcolo e archiviazione. In Archiviazione e Dimensioni di archiviazione (in GB) usare il dispositivo di scorrimento per selezionare la quantità di spazio di archiviazione di cui si vuole effettuare il provisioning.

La quantità di spazio di archiviazione di cui si esegue il provisioning definisce la capacità di I/O disponibile per il server di Database di Azure per PostgreSQL. È possibile monitorare il consumo di I/O nel portale di Azure oppure usando i comandi dell'interfaccia della riga di comando di Azure. Le metriche pertinenti al monitoraggio sono il limite di archiviazione, la percentuale di archiviazione, lo spazio di archiviazione usato e la percentuale IO.

Nota

È possibile aumentare la quantità di spazio di archiviazione dopo aver creato il server di Database di Azure per PostgreSQL, ma non è possibile ridurla.

Spazi di tabella: con un'implementazione locale di PostgreSQL è possibile creare spazi di tabella collegati all'area di archiviazione principale denominata PGDATA usando la sottodirectory pg_tblspc. Database di Azure per PostgreSQL non supporta gli spazi di tabella: tutte le tabelle vengono create nell'area di archiviazione principale.

Cataloghi di sistema: PostgreSQL contiene molte tabelle di sistema e viste in cui sono archiviate informazioni sugli oggetti di database. Ad esempio, pg_database restituisce tutti i database in un server e pg_class archivia le statistiche sulle tabelle.

Nota

Database di Azure per PostgreSQL consente l'accesso ad alcuni, ma non a tutti, i cataloghi di sistema.

Estensioni: PostgreSQL supporta una gamma di estensioni che estendono la funzionalità di base del motore di database. Queste estensioni sono rese disponibili nel repository denominato Rete estensioni PostgreSQL (PGXN).

Per usare un'estensione PostgreSQL, è necessario installarla nel database. Per installare un'estensione, eseguire il comando CREATE EXTENSION dallo strumento psql per caricare l'estensione nel database. Ad esempio:

SELECT create_extension('postgis');

Per scoprire quali estensioni supportano Database di Azure per PostgreSQL, eseguire la query seguente:

SELECT * FROM pg_available_extensions;

Tutti i server di Database di Azure per PostgreSQL includono l'estensione pg_stat_statements. L'estensione è già installata in modo da consentire il rilevamento delle statistiche di esecuzione delle istruzioni SQL. Il parametro server pg_stat_statements.track definisce le istruzioni conteggiate dall'estensione. Le opzioni sono:

  • Top: tiene traccia di tutte le istruzioni eseguite direttamente dai client (impostazione predefinita).
  • None: non vengono rilevate istruzioni.
  • All: tiene traccia di tutte le istruzioni, incluse quelle annidate e le istruzioni richiamate da funzioni.

Nota

C'è un sovraccarico delle prestazioni sul server se si registra ogni istruzione SQL. Se non si usa attivamente pg_stat_statements, impostare questo parametro su none. Si noti anche che alcuni servizi di monitoraggio di terze parti potrebbero basarsi su pg_stat_statements.

Query Optimizer: PostgreSQL usa un metodo di ottimizzazione query basato sui costi. Il parser controlla la sintassi della query e separa la query in parti diverse. Il parser crea un albero di analisi e passa la query al rewriter, che applica regole alla query. Il planner individua il modo migliore per eseguire la query prima che la query venga eseguita.

Processi back-end: modello processo PostgreSQL per transazione. Quando un nuovo utente si connette, PostgreSQL autentica l'utente e crea un processo server back-end per gestire la connessione. Il client interagisce solo con il processo server durante l'invio di query e la ricezione dei risultati delle query.