Buon venerdì a tutti! Rimane sempre meno tempo fino al lancio del corso , quindi oggi condividiamo la traduzione di un altro materiale utile sull'argomento.
Durante lo sviluppo è stata svolta un'incredibile lavoro per migliorare la partizionamento delle tabelle. Partizionamento delle tabelle è una funzione che esiste in PostgreSQL da un po' di tempo, ma, per così dire, non è mai stata realmente utilizzata fino alla versione 10, dove è diventata una funzione molto utile. In precedenza, abbiamo affermato che l'ereditarietà delle tabelle rappresenta la nostra implementazione del partizionamento, ed è vero. Solo che questo metodo richiedeva di fare gran parte del lavoro manualmente. Ad esempio, se volevi che le tuple venissero inserite nelle partizioni durante gli INSERT, dovevi impostare dei trigger per farlo. La partizione tramite ereditarietà era molto lenta e complicata, rendendo difficile sviluppare funzioni aggiuntive su di essa.
In PostgreSQL 10 abbiamo assistito alla nascita del "partizionamento dichiarativo" — una funzionalità progettata per risolvere molti problemi che erano irrisolvibili con il vecchio metodo basato sull'ereditarietà. Questo ha portato all'emergere di uno strumento molto più potente, che ci consente di partitionare i dati orizzontalmente!
Confronto delle funzionalità
In PostgreSQL 11 è emerso un impressionante insieme di nuove funzionalità che aiutano a migliorare le prestazioni e a rendere le tabelle partizionate più trasparenti per le applicazioni.



1. Utilizzando le eccezioni limitanti
2. Aggiunge solo nodi
3. Solo per tabelle partizionate che si riferiscono a tabelle non partizionate
4. Gli indici devono contenere tutte le colonne chiave della partizione
5. Le restrizioni sulla partizione da entrambe le parti devono corrispondere
Prestazioni
Qui abbiamo anche buone notizie! È stato aggiunto un nuovo metodo . Questo nuovo algoritmo può identificare le partizioni appropriate esaminando la condizione della query DOVE. L'algoritmo precedente, d'altra parte, controllava ogni partizione per determinare se potesse soddisfare la condizione DOVE. Questo porta a un ulteriore aumento del tempo di pianificazione man mano che cresce il numero di partizioni.
Nella versione 9.6, con la partizione tramite ereditarietà, la routing delle tuple nelle partizioni veniva solitamente eseguita scrivendo una funzione trigger, che conteneva una serie di operatori IF per inserire la tupla nella partizione corretta. Queste funzioni potevano essere molto lente nell'esecuzione. Con la partizione dichiarativa, aggiunta nella versione 10, questo ora funzionava molto più velocemente.
Utilizzando una tabella partizionata con 100 partizioni, possiamo valutare le prestazioni del caricamento di 10 milioni di righe in una tabella con 1 colonna BIGINT e 5 colonne INT.

Le prestazioni della query su questa tabella per cercare un singolo record indicizzato e eseguire DML per manipolare un record (utilizzando solo 1 processore):

Qui vediamo che le prestazioni di ogni operazione sono notevolmente aumentate dopo PG 9.6. Le query SELECT risultano molto migliori, specialmente quelle in grado di escludere molte partizioni durante la pianificazione delle query. Questo significa che il pianificatore può saltare gran parte del lavoro che doveva svolgere in precedenza. Per esempio, non vengono più costruiti percorsi per partizioni non necessarie.
Conclusione
La partizione delle tabelle sta diventando una funzione molto potente in PostgreSQL. Permette di estrarre rapidamente i dati online e di trasferirli offline, senza dover attendere il completamento di operazioni DML massive e lente.Ciò significa anche che i dati correlati possono essere memorizzati insieme, consentendo un accesso molto più efficiente ai dati richiesti. I miglioramenti apportati in questa versione sarebbero stati impossibili senza gli sviluppatori, revisori e committers che hanno lavorato instancabilmente su tutte queste funzionalità.
Grazie a tutti loro! PostgreSQL 11 sembra semplicemente fantastico!
Ecco un breve, ma piuttosto interessante articolo. Condividete i vostri commenti, e non dimenticate di iscrivervi a , durante il quale verrà presentato in dettaglio il programma del corso.
Fonte: habr.com
