Partizionamento su un singolo filegroup


10

Ho alcune tabelle molto grandi nel mio database, ma una parte sostanziale di questi dati è "vecchia".

A causa di circostanze indipendenti dalla mia volontà, non sono autorizzato a rimuovere questi "vecchi" dati. L'altra limitazione è che non riesco a modificare il database, il che significa aggiungere filegroup ad esso. Allo stato attuale delle cose, tutto risiede nel PRIMARYgruppo di file.

Stavo pensando di suddividere queste tabelle in alcune partizioni, come "nuovo", "vecchio", "archiviato" e simili. Ho una colonna "status" che vorrei utilizzare per questo scopo.

Dato lo scenario e i limiti descritti, mi chiedevo se il partizionamento abbia un senso qui. In altre parole, se la mia tabella è partizionata in questo modo, ma tutte le partizioni si trovano nello stesso filegroup, SQL Server sarà abbastanza intelligente da trovare quell'area speciale nel file sottostante in cui risiedono i miei "nuovi" dati e non toccare il area con "vecchi" dati?

Per dirla diversamente, se, diciamo, l'80% dei miei dati è "vecchio". SQL Server ha un meccanismo per evitare l'accesso al 100% dei file sottostanti e l'accesso solo al 20% che contiene "nuovi" dati (supponendo, ovviamente, che io specifichi la mia colonna di partizionamento nella WHEREclausola delle query).

Immagino che per rispondere a questo, bisognerebbe capire come il partizionamento è implementato internamente. Apprezzo qualsiasi suggerimento.

Risposte:


6

Esistono due vantaggi nel partizionare una tabella nello stesso filegroup:

  1. Consente di ricostruire in modo incrementale parti di un indice di grandi dimensioni, consentendo una manutenzione più efficiente. Esamina il ALTER INDEX [foo] REBUILD PARTITION=nper ulteriori dettagli.
  2. Sfruttando l'eliminazione della partizione e (possibilmente) il blocco a livello di partizione per migliorare la manutenzione delle query. Ne discuto sul mio blog .

Ci sono molte cose da tenere a mente se stai partizionando.

  • Se la tua tabella ha un indice cluster (e dovrebbe davvero), la tua chiave di partizionamento deve far parte dell'indice cluster.
  • Per evitare problemi di prestazioni, è necessario allineare le partizioni. Ciò significa che tutti gli indici devono includere la chiave di partizione, sia come inclusione che come parte dell'indice stesso.
  • Le ricostruzioni dell'indice per le partizioni non sono in linea nelle versioni correnti di SQL Server (2005-2012). Se le tue partizioni sono troppo grandi e la ricostruzione per partizione, questo potrebbe causare problemi di blocco.

Consiglio di fare delle ricerche approfondite sul partizionamento prima di implementarlo. Kendra Little ha un eccellente elenco di risorse da cui puoi iniziare.


Se ho un indice cluster partizionato, non tutti gli indici non cluster contengono già la colonna di partizionamento come localizzatore di righe?
Zikato

0

La risposta è si". Ha un meccanismo su qualsiasi query che filtra gli input in base alla logica utilizzata per definire le partizioni.

Devi avere il filtro appropriato, comunque, o tutta la partizione sarà scansionata. Questo in genere implica la presenza di filtri per la data (nel tuo caso) per scegliere la partizione.

Un modo per imporlo è avere viste che accedano a una sola partizione, con la giusta logica nella vista.


Mi chiedo quanto sarebbe il guadagno in termini di prestazioni per il partizionamento sullo stesso disco fisico.
Dal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.