mercoledì 15 febbraio 2012

Soluzioni ai problemi VLT in giro per le statistiche e la manutenzione!

Domanda: Le tabelle partizionate sono la nuova funzionalità lucido in SQL Server 2005 - perché sono divisi viste ancora ancora disponibile? Ci sono dei vantaggi che essi offrono?
Risposta: Nel primo post ( v. tabelle partizionate di viste partizionate-Perché sono ancora ancora in giro? ) ho sollevato alcune domande di carattere generale e le preoccupazioni che vengono con VLT (tabella molto grande). Oggi, inizierò ad affrontare perché viste partizionate può essere una scelta fantastica per il partizionamento grandi gruppi - anche per il nuovo disegno.
Quando ho postato, alcune persone emailed me e ha detto che la ragione più ovvia per scegliere viste partizionate è che non richiedono Enterprise Edition. Mentre questo è un motivo fantastico, non è comunque l'unica ragione (o il mio preferito). La ragione più importante per me è che ci sono ancora alcune preoccupazioni circa VLT che anche le tabelle partizionate non risolvono. In questo post, io affrontare due problemi con le tabelle partizionate.
Il primo problema è legato alle statistiche. Le statistiche riguardano sempre l'intera serie descritta dall'indice (o statistica). Ai fini di questa discussione, ho intenzione di concentrarsi principalmente sulla tabella di statistiche a livello di statistiche (nel senso che non vengono filtrati). E, mentre è possibile utilizzare le statistiche filtrate con tabelle partizionate - ci sono dei limiti significativi alla fast-switching. Come risultato, si potrebbe risolvere un problema ancora introdurre un altro. Allora, perché sono a livello di tabella delle statistiche un problema? In realtà, nel concetto, non lo sono. Ma, ricordate, una statistica deve essere relativamente piccolo per essere utile. Con le tabelle più grandi (in particolare quelli che hanno un sacco di irregolare distribuzione dei dati), diventa sempre più difficile per una statistica per essere precisi.
Inoltre, ci vuole anche più tempo e più per la statistica venga aggiornato. C'è un flag di traccia speciale disponibile a modificare la soglia di invalidazione per la statistica (in modo che non aspettare più a lungo per essere aggiornato), ma non c'è niente che cambia la loro precisione (tranne stats filtrato - che poi eliminano fast-switching se la statistica filtrato non è finita l'intero set). E, purtroppo, c'è anche un aspetto in relazione a come / quando le statistiche vengono aggiornate filtrati . In poche parole, è necessario per gestire il loro aggiornamento al fine di mantenere in modo più accurato. Quindi, nessuna delle soluzioni per rendere le statistiche più accurate per VLT funzionano davvero.
Tuttavia, ciò che risolve il problema? Mantenere le tabelle più piccolo e maneggevole. Concettualmente, questo è "partizionare" tabelle partizionate, ma non risolvono il problema. Invece, partizionare i dati in "viste partizionate" è esattamente questa soluzione. Invece di avere valore di 20 anni di vendite in uno VLT, si consideri una tabella per ogni anno. Questi "yearly" tabelle potrebbero ciascun essere partizionato tavoli, oppure solamente autonomi, le tabelle non partizionate. Poi, come si fa a interrogare 20 tavoli? Se si limitano le tabelle per data (possibilmente da ID e se c'è una correlazione) e quindi utilizzare un UNION ALL fine di riunirli, poi le query possono fare eliminazione partizione. Finché le vostre domande di fornire sia la data (o l'ID, se le tabelle di base sono inoltre limitate da ID) allora l'ottimizzatore può confrontare la clausola WHERE ai vincoli esistenti. Se le tabelle sono stati "controllati" contro il vincolo allora il vincolo è considerato attendibile. Vincoli di fiducia può essere utilizzato da l'ottimizzatore di eliminare partizioni. Tabelle senza tutti i dati rilevanti non sarà accessibile. Questa è la definizione di eliminazione partizione. Il risultato finale è che per le statistiche di ogni tabella a livello di tabella statistica sarà più preciso, perché la serie di dati su cui si estende è più piccolo.
Questo mi porta alla seconda questione - la manutenzione. Mentre le tabelle partizionate offrono alcuni vantaggi di manutenzione (fast-switching per carichi di dati e / o rimozione dei dati) non offrono ricostruisce on-line a livello di partizione (in qualsiasi versione o edizione - anche SQL Server 2012). Quindi, se avete una sola, VLT di valore 20 anni di dati con solo i dati più recenti / corrente in fase di aggiornamento quindi avete solo bisogno di deframmentare che lo scorso anno. In una sola tabella partizionata avrete bisogno di prendere la partizione non in linea per ricostruirlo. Se si è separato questo in 20 anni di dati individuali allora è possibile ricostruire l'anno più recente (a livello di tabella) online. È sempre possibile fare solo la riorganizzazione dei dati, ma la ricostruzione non può essere fatto a livello di partizione come un'operazione in linea. Operazioni on-line sono supportate solo a livello di tabella.

Nessun commento:

Posta un commento

Nota. Solo i membri di questo blog possono postare un commento.