PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Funzionalità PostgreSQL Enterprise nuove e in evoluzione con versioni recenti

PostgreSQL ha anche introdotto molte altre caratteristiche rivoluzionarie nelle versioni da 10 a 11, 12 e 13 che lo rendono un vero concorrente di Oracle, come miglioramenti del partizionamento, query parallele e replica logica. In questo post del blog, mostreremo alcune delle nuove e importanti funzionalità di PostgreSQL incluse nelle versioni più recenti di PostgreSQL.

Funzioni di partizionamento

Partizionamento dichiarativo

Fino alla versione 9.4 di PostgreSQL, non esisteva un partizionamento effettivo in PostgreSQL. È stato ottenuto solo attraverso l'ereditarietà delle tabelle, che offriva funzionalità e vantaggi in termini di prestazioni molto limitati. Gran parte della funzionalità viene gestita manualmente tramite trigger o comandi SQL. Ad esempio, abbiamo dovuto utilizzare i trigger per indirizzare una riga prima di INSERT alla partizione corretta. Dobbiamo creare indici per ogni partizione separatamente. PostgreSQL versione 10 ha dato vita al partizionamento dichiarativo, ma dovevamo comunque creare vincoli e indici per ogni partizione.

PostgreSQL 11 viene fornito completo di una serie impressionante di nuove funzionalità di partizionamento per migliorare le prestazioni e anche per rendere le tabelle partizionate più trasparenti per le applicazioni.

Replica logica di tabelle partizionate

Con PostgreSQL 13, hanno introdotto il supporto per la replica logica delle tabelle partizionate. In precedenza, eri costretto a replicare individualmente le partizioni nei tuoi standby. Ora, tuttavia, puoi replicare automaticamente tutte le partizioni contemporaneamente

Metodi di partizionamento

I metodi di partizionamento attualmente supportati sono range, list e hash.

Chiavi e indici

In PostgreSQL 12 è stato aggiunto il supporto completo per chiavi esterne su tabelle partizionate. PostgreSQL vanta anche il supporto per chiavi primarie, indici e trigger su tabelle partizionate.

Partizione predefinita

PostgreSQL consente la creazione di una partizione "predefinita" per la memorizzazione di dati che non corrispondono a nessuna delle partizioni rimanenti. Gli utenti Oracle apprezzeranno questa funzionalità in quanto non è disponibile in Oracle Database.

Movimento delle righe

Le istruzioni UPDATE che modificano una colonna della chiave di partizione ora fanno sì che le righe interessate vengano spostate nelle partizioni appropriate.

Eliminazione delle partizioni

Migliora le prestazioni di SELECT attraverso strategie avanzate di eliminazione delle partizioni durante la pianificazione e l'esecuzione delle query. È stato aggiunto un nuovo metodo per eseguire l'eliminazione della partizione. Questo nuovo algoritmo è in grado di determinare le partizioni corrispondenti osservando la clausola WHERE della query. L'algoritmo precedente controllava ogni partizione, a sua volta, per vedere se poteva corrispondere alla clausola WHERE della query. Ciò ha comportato un ulteriore aumento dei tempi di pianificazione con l'aumento del numero di partizioni.

Eliminazione delle partizioni durante l'esecuzione della query

Come per le istruzioni preparate, i parametri della query non sono noti prima dell'esecuzione. Query Planner non è in grado di eliminare le partizioni durante la fase di pianificazione poiché i parametri non sono noti. Quindi, l'esecutore esegue lo sfoltimento della partizione durante l'esecuzione per accedere solo alle partizioni che corrispondono ai parametri.

Funzionalità PostgreSQL Enterprise nuove ed in evoluzione con versioni recentiFai clic per twittare

Funzioni di indicizzazione

Indice di copertura

PostgreSQL ora ti consente di aggiungere colonne non chiave nell'indice btree. Poiché le query in genere necessitano di recuperare più colonne rispetto a quelle su cui effettuano la ricerca, PostgreSQL consente di creare un indice in cui alcune colonne sono solo "carico utile" e non fanno parte della chiave di ricerca. Aiuta a eseguire solo scansioni di solo indice per recuperare le righe richieste.

Reindicizza contemporaneamente

A partire da PostgreSQL 12, è possibile ricostruire un indice con REINDEX CONTEMPORANEAMENTE senza bloccare la tabella per lettura/scrittura, proprio come il comando Oracle REBUILD INDEX.

Creazione di un indice parallelo

Con la creazione di indici paralleli (introdotta in PostgreSQL 11, attualmente applicabile solo per gli indici b-tree), gli indici possono essere creati più velocemente fino al valore max_parallel_workers e impostando maintenance_work_mem sufficientemente grande da contenere più copie dei dati. La creazione parallela dell'indice può ridurre notevolmente il tempo di creazione dell'indice.

Deduplicazione dei dati negli indici B-Tree

A volte ci saranno voci duplicate in un indice. Ciò significa che un nodo foglia in un indice B-Tree con almeno due voci di indice nello stesso indice contiene gli stessi dati per tutte le colonne dell'indice. Con l'aggiunta della deduplicazione in PostgreSQL 13, puoi raggruppare queste voci di indice B-Tree duplicate e raccoglierle in una voce di gruppo. Il vantaggio di questo è il risparmio di spazio e il carico ridotto su disco e RAM, poiché non dovrai duplicare i dati delle colonne. Voci duplicate causano anche un rigonfiamento indesiderato dell'indice.

Autenticazione

SCRAM-SHA-256

In PostgreSQL 11 è arrivato il supporto per l'autenticazione della password SCRAM-SHA-256. Questo metodo impedisce lo sniffing delle password su connessioni non attendibili e ti consente di archiviare le tue password in una forma crittograficamente hash.

Tra tutti i metodi di autenticazione della password attualmente supportati, questo è il più sicuro.

GSSAPI

GSSAPI consente l'autenticazione sicura e il single sign-on automatico per i sistemi che lo supportano. Questo metodo di autenticazione si basa su una libreria di sicurezza compatibile con GSSAPI. I dati inviati tramite la connessione al database non saranno crittografati a meno che non venga utilizzato SSL; tuttavia l'autenticazione stessa è sicura. GSSAPI con autenticazione Kerberos è possibile con PostgreSQL secondo gli standard del settore. Quando viene utilizzato Kerberos, viene utilizzata un'entità standard nel formato "nomeservizio/nomehost@reame". Qualsiasi principal incluso nel keytab utilizzato dal server sarà accettato dal server PostgreSQL.

LDAP

Funzionando in modo simile all'autenticazione della password, questo metodo di autenticazione utilizza LDAP come metodo di verifica. Viene utilizzato solo per convalidare le coppie nome utente e password, quindi l'utente deve già esistere nel database affinché l'autenticazione funzioni. L'autenticazione LDAP funziona in una modalità di collegamento semplice o in quella che viene chiamata ricerca+associazione. Ricerca+associazione consente di utilizzare altri identificatori rispetto alla modalità di collegamento semplice, che consente di utilizzare solo il nome distinto, il nome di dominio o l'e-mail.

Certificato

Il metodo di autenticazione del certificato utilizza i certificati SSL per l'autenticazione. Di conseguenza, è disponibile solo per le connessioni SSL. Con l'autenticazione del certificato, non è richiesta alcuna password. Il client deve semplicemente fornire un certificato valido e affidabile per potersi autenticare. Il nome comune del certificato verrà abbinato al nome utente del database e, se viene trovata una corrispondenza, il client verrà registrato.

Altre caratteristiche degne di nota

Aspiratore parallelo

Con il rilascio di PostgreSQL 13, sono stati implementati miglioramenti al comando VACUUM. Il miglioramento in questione è l'opzione parametro aggiunto PARALLEL. Con PARALLEL è possibile eseguire fasi di index vacuum e index cleanup di VACUUM. Ciò consente di aspirare in parallelo più indici corrispondenti a una singola tabella.

Query parallela

La maggior parte delle query Report, che in genere scansionano molti dati, subiscono un degrado delle prestazioni dovuto alla necessità di scansionare o aggregare dati da molte righe anche con una scansione dell'indice. Queste query possono utilizzare solo una CPU fino alla versione 9.4 ed essere eseguite in serie.

Con la query parallela (che offre scansione sequenziale parallela, merge join, hash join, aggregazione e altre funzionalità del piano di query parallele), queste query possono sfruttare più lavoratori e le prestazioni possono migliora da 2x a 10x come da documentazione.

Dai un'occhiata a questo post per sapere quando utilizzare le query parallele.

Replica logica nativa

PostgreSQL ha introdotto la replica logica nativa nella versione 10 per fornire un'opzione di replica più flessibile, a differenza della replica in streaming e più simile a Oracle Streams, per replicare tabelle, colonne o righe specifiche. Questo può essere utilizzato per dividere tra più database o consolidare da più database. E può anche replicare tra diverse versioni principali di PostgreSQL.

Stored procedure con transazioni incorporate

Ancora un'altra aggiunta che rende PostgreSQL compatibile per le migrazioni dal database Oracle.

Non abbiamo alcun controllo sulle transazioni all'interno del programma pgsql (blocco o funzione DO) nella versione 9.4 e dobbiamo usare una soluzione alternativa come dblink per avviare e eseguire il commit/rollback delle transazioni .

Con le procedure memorizzate, presentate per la prima volta nella versione 11, ora possiamo implementare il controllo delle transazioni all'interno di qualsiasi struttura pgsql come ciclo while, ciclo for o if else. Sebbene le procedure memorizzate siano simili alle funzioni, devono essere richiamate dal comando CALL e possono funzionare come programmi indipendenti.

Colonne generate

Come il database Oracle, le colonne generate in PostgreSQL possono memorizzare i dati calcolati automaticamente da altre colonne all'interno della riga. Ciò velocizza le query non dovendo calcolare il valore durante l'esecuzione della query e, invece, il valore della colonna generata viene calcolato su INSERT o UPDATE sulla riga.

Compilazione JIT

PostgreSQL 11, 12 e 13 supportano tutti la compilazione Just-in-Time (JIT), che è stata aggiunta nel 2018. La compilazione JIT è il processo di trasformazione di una valutazione di programma interpretata in un programma nativo. Con la compilazione JIT, questo processo può essere eseguito in fase di esecuzione. Un vantaggio di JIT è la possibilità di generare funzioni specifiche dell'espressione che la CPU può eseguire in modo nativo. A sua volta, il processo ti dà una velocità maggiore.

Checksum della pagina

Il checksum della pagina è una funzione che ti aiuta a verificare l'integrità dei dati archiviati su disco. In precedenza, potevi abilitare i checksum delle pagine solo durante l'inizializzazione di un cluster PostgreSQL. PostgreSQL 12 ha introdotto la possibilità di abilitare o disabilitare i checksum delle pagine in un cluster offline tramite il comando pg_checksums.

Riepilogo

Come puoi vedere da questo articolo, PostgreSQL è un sistema di database in continua evoluzione che mette a disposizione molte potenti funzionalità. Ogni nuova versione aggiunge nuove interessanti funzionalità che lo rendono un vero concorrente di altri database come Oracle. Le sue funzionalità di partizionamento e indicizzazione ottengono molti nuovi aggiornamenti che si aggiungono alla sua già ampia cassetta degli attrezzi.

Se stai cercando una soluzione gestita per il tuo database PostgreSQL, non esitare a dare un'occhiata al nostro servizio ScaleGrid per PostgreSQL. Forniamo una prova gratuita di 30 giorni che ti consente di utilizzare tutte le nostre funzionalità di gestione senza restrizioni. Il prezzo parte da soli $ 10 al mese e ti dà accesso a una soluzione di hosting PostgreSQL di livello aziendale completamente gestita con supporto 24 ore su 24, 7 giorni su 7.