Uso del partizionamento delle tabelle in PostgreSQL

In questo pdf ho fatto un semplice benchmark comparativo delle prestazioni di una tabella unica ed una tabella partizionata in PostgreSQL quando i dati in scrittura ed in lettura hanno una distribuzione simile e quella di Zipf.

La distribuzione di Zipf, o in generale il principio di Pareto (o legge 80/20), sono caratteristici di tutte le situazioni in cui pochi elementi hanno la maggior parte delle risorse e molti elementi si dividono la restante piccola parte. Ad esempio la ricchezza è suddivisa secondo una legge di questo tipo, ma anche la popolarità dei siti web. Infatti esistono pochi siti noti a tutti e moltissimi siti noti solo a pochi.

Pensando all’archivio dei bookmarks di del.icio.us, è evidente che questa situazione abbia effetti molto particolari sulla frequenza dell’accesso ad alcuni record in archivio rispetto ad altri.

Nel benchmark mostro come in una tabella dove la probabilità di accesso è guidata da una distribuzione esponenziale sia possibile col partizionamento arrivare ad incrementi delle prestazioni anche del 60% sulle query più comuni.

Variazione del tempo di query in funzione del numero di record inseriti

In rosso i tempi di accesso delle tabella unica (prova1) in verde i tempi della tabella partizionata (prova2) al crescere delle dimensioni dell’archivio.

(PDF) Uso di informazioni statistiche e partizionamento delle tabelle per incrementare le performances in PostgreSQL