Condividi tramite


Partizionamento

Il partizionamento di un database consente di ottenere prestazioni migliori e di semplificare le operazioni di manutenzione. Se una tabella di grandi dimensioni viene suddivisa in più tabelle di dimensioni inferiori, le query che accedono solo a una parte dei dati saranno più veloci grazie alla minore quantità di dati sottoposta a scansione. Le attività di manutenzione, quali la ricostruzione degli indici o il backup di una tabella, risultano più rapide.

È possibile eseguire il partizionamento senza suddividere le tabelle, posizionando fisicamente le tabelle in unità disco distinte. Se si archivia una tabella in un'unità fisica e le tabelle correlate in un'unità distinta, è possibile ottenere prestazioni di esecuzione delle query migliori, poiché quando si eseguono query che includono join tra le tabelle, i dati vengono letti da più testine simultaneamente. Per specificare i dischi in cui posizionare le tabelle, è possibile utilizzare filegroup di SQL Server.

Partizionamento hardware

Il partizionamento hardware consente di progettare il database per trarre vantaggio dall'architettura hardware disponibile. Di seguito sono riportati alcuni esempi di partizionamento hardware:

  • Sistemi multiprocessore che supportano più thread di esecuzione consentendo l'esecuzione simultanea di più query. In alternativa, è possibile velocizzare l'esecuzione di una singola query su più processori consentendo l'esecuzione simultanea dei componenti della query. Ad esempio, thread distinti possono eseguire simultaneamente la scansione di ogni tabella alla quale fa riferimento la query.

  • Dispositivi RAID (Redundant Array of Independent Disks) che consentono lo striping dei dati in più unità disco, consentendo un accesso più rapido ai dati, in quanto questi vengono letti simultaneamente da più testine di lettura e scrittura. La scansione di una tabella con striping in più unità disco risulta in genere più rapida della scansione della stessa tabella archiviata in una sola unità. In alternativa, l'archiviazione di tabelle in unità distinte rispetto a quelle delle tabelle correlate può contribuire in modo significativo al miglioramento delle prestazioni delle query che includono join tra tali tabelle. Per ulteriori informazioni, vedere RAID.

Partizionamento orizzontale

Tramite il partizionamento orizzontale una tabella viene suddivisa in più tabelle. Ogni tabella include quindi lo stesso numero di colonne, ma un minor numero di righe. Una tabella che include un miliardo di righe, ad esempio, potrebbe essere partizionata orizzontalmente in 12 tabelle, ognuna delle quali rappresenta i dati di un mese di un anno di attività specifico. Tutte le query che richiedono dati relativi a un mese specifico fanno riferimento solo alla tabella appropriata.

La scelta della modalità di partizionamento orizzontale delle tabelle dipende dalla modalità di analisi dei dati. È consigliabile partizionare le tabelle in modo che le query facciano riferimento al minor numero di tabelle possibile. In caso contrario, un numero eccessivo di query UNION per l'unione logica delle tabelle durante l'esecuzione della query può influire negativamente sulle prestazioni. Per ulteriori informazioni sull'utilizzo di query in tabelle partizionate orizzontalmente, vedere Scenari di utilizzo delle viste.

Il partizionamento orizzontale dei dati in base alla data di creazione e alla frequenza di utilizzo rappresenta una pratica comune. Ad esempio, una tabella include dati relativi agli ultimi cinque anni, ma gli accessi più frequenti si riferiscono unicamente ai dati relativi all'anno corrente. In questo caso può risultare utile partizionare i dati in cinque tabelle, ognuna delle quali include i dati relativi a un solo anno.

Per ulteriori informazioni, vedere Tabelle e indici partizionati.

Partizionamento verticale

Tramite il partizionamento verticale una tabella viene suddivisa in più tabelle che includono un numero ridotto di colonne. I due tipi di partizionamento verticale sono la normalizzazione e la suddivisione delle righe:

  • La normalizzazione è il processo standard per database in base al quale le colonne ridondanti vengono rimosse da una tabella e inserite in tabelle secondarie collegate alla tabella primaria tramite relazioni di chiave primaria e chiave esterna.

  • Con la suddivisione delle righe la tabella originale viene scomposta verticalmente in tabelle con un numero di colonne inferiore. Ogni riga logica in una tabella suddivisa corrisponde alla stessa riga logica nelle altre tabelle come identificate da una colonna UNIQUE KEY identica in tutte le tabelle partizionate. Un join sulla riga con ID 712 di ogni tabella suddivisa, ad esempio, ricrea la riga originale.

Analogamente al partizionamento orizzontale, il partizionamento verticale consente alle query la scansione di una quantità minore di dati. In questo modo, si ottengono prestazioni di esecuzione delle query migliori. Se, ad esempio, una tabella include sette colonne delle quali viene in genere fatto riferimento solo alle prime quattro, la suddivisione delle altre tre colonne in una tabella distinta può determinare un miglioramento delle prestazioni.

È consigliabile considerare con attenzione il partizionamento verticale, in quanto l'analisi di dati divisi in più partizioni richiede query con join delle tabelle. Se le partizioni hanno dimensioni eccessive, è anche possibile che il partizionamento comporti una riduzione delle prestazioni.