PostgreSQL 11: evoluzione del partizionamento da Postgres 9.6 a Postgres 11

Buon venerdì a tutti! Manca sempre meno tempo all'avvio del corso "DBMS relazionale", quindi oggi condividiamo la traduzione di un altro materiale utile sull'argomento.

In fase di sviluppo PostgreSQL 11 È stato svolto un lavoro impressionante per migliorare il partizionamento delle tabelle. Tabelle di partizione - questa è una funzione che esiste in PostgreSQL da molto tempo, ma, per così dire, essenzialmente non esisteva fino alla versione 10, in cui divenne una funzione molto utile. In precedenza abbiamo affermato che l'ereditarietà delle tabelle è la nostra implementazione del partizionamento e questo è vero. Solo questo metodo ti costringe a svolgere la maggior parte del lavoro manualmente. Ad esempio, se desideri che le tuple vengano inserite nelle sezioni durante gli INSERT, dovresti configurare i trigger per farlo per te. Il partizionamento tramite ereditarietà era molto lento ed era difficile sviluppare funzionalità aggiuntive.

In PostgreSQL 10 abbiamo visto la nascita del “partizionamento dichiarativo”, una funzionalità progettata per risolvere molti problemi che erano irrisolvibili utilizzando il vecchio metodo di ereditarietà. Ciò ha portato a uno strumento molto più potente che ci ha permesso di dividere i dati orizzontalmente!

Confronto delle funzionalità

PostgreSQL 11 introduce una serie impressionante di nuove funzionalità che aiutano a migliorare le prestazioni e rendono le tabelle partizionate più trasparenti per le applicazioni.

PostgreSQL 11: evoluzione del partizionamento da Postgres 9.6 a Postgres 11
PostgreSQL 11: evoluzione del partizionamento da Postgres 9.6 a Postgres 11
PostgreSQL 11: evoluzione del partizionamento da Postgres 9.6 a Postgres 11
1. Utilizzo delle eccezioni limitanti
2. Aggiunge solo nodi
3. Solo per una tabella partizionata che fa riferimento a una tabella non partizionata
4. Gli indici devono contenere tutte le colonne chiave della partizione
5. Le restrizioni di sezione su entrambi i lati devono corrispondere

Производительность

Anche qui abbiamo buone notizie! Nuovo metodo aggiunto eliminazione di sezioni. Questo nuovo algoritmo può determinare le sezioni adatte esaminando la condizione della query WHERE. L'algoritmo precedente, a sua volta, controllava ciascuna sezione per determinare se poteva soddisfare la condizione WHERE. Ciò ha comportato un ulteriore aumento dei tempi di pianificazione con l'aumento del numero di sezioni.

Nella versione 9.6, con il partizionamento tramite ereditarietà, l'instradamento delle tuple nelle partizioni veniva generalmente eseguito scrivendo una funzione trigger che conteneva una serie di istruzioni IF per inserire la tupla nella partizione corretta. Queste funzioni potrebbero essere molto lente da eseguire. Con il partizionamento dichiarativo aggiunto nella versione 10, funziona 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.

PostgreSQL 11: evoluzione del partizionamento da Postgres 9.6 a Postgres 11

Prestazioni dell'interrogazione di questa tabella per trovare un record indicizzato ed eseguire DML per manipolare un record (utilizzando solo 1 processore):

PostgreSQL 11: evoluzione del partizionamento da Postgres 9.6 a Postgres 11

Qui possiamo vedere che le prestazioni di ciascuna operazione sono aumentate in modo significativo a partire dalla PG 9.6. Richieste SELECT sembrano molto migliori, specialmente quelli che sono in grado di escludere più partizioni durante la pianificazione delle query. Ciò significa che lo scheduler può saltare gran parte del lavoro che avrebbe dovuto svolgere prima. Ad esempio, i percorsi non vengono più creati per le sezioni non necessarie.

conclusione

Il partizionamento delle tabelle sta iniziando a diventare una funzionalità molto potente in PostgreSQL. Ti consente di portare rapidamente i dati online e portarli offline senza attendere il completamento di operazioni DML lente e massicce.. Ciò significa anche che i dati correlati possono essere archiviati insieme, il che significa che è possibile accedere ai dati necessari in modo molto più efficiente. I miglioramenti apportati a questa versione non sarebbero stati possibili senza gli sviluppatori, i revisori e i committer che hanno lavorato instancabilmente su tutte queste funzionalità.
Grazie a tutti loro! PostgreSQL 11 sembra fantastico!

Ecco un articolo così breve ma piuttosto interessante. Condividi i tuoi commenti e non dimenticare di iscriverti Giornata Aperta, all'interno della quale verrà delineato nel dettaglio il programma del corso.

Fonte: habr.com

Aggiungi un commento