Capacità massima della tabella in SQL Server 2008


11

Ho un'applicazione che inserisce più di 1 miliardo di righe all'anno in una tabella. Questa tabella contiene alcune varchare bigintcolonne e una colonna blob pure.

Le 1 miliardo di righe sono costituite da dati cronologici conservati a scopo di tracciamento. Quindi mi chiedevo se ci fosse una limitazione della capacità della tabella se continuo in questa struttura secondo questo articolo MSDN sulla dimensione massima della tabella .

Le dimensioni del file di dati menzionate in quel link si riferiscono al gruppo di file di dati della tabella?


@marc_s grazie per averlo colto. sentiti libero di unirti a noi in The Heap dove, tra l'altro, portiamo attenzione collettiva a questi
JNK

Qual è la dimensione massima di ogni riga?
Nick Chammas,

Risposte:


6

Non esiste un limite pratico tranne lo spazio su disco. Ho letto interamente la tabella a cui hai collegato e l'ho controllato.

Se devi superare i 16 TB, hai bisogno di più file (una semplice procedura).


Immagino che ciò possa essere ottenuto partizionando la tabella e evitando il partizionamento per utilizzare diversi gruppi di file, se ho ragione?
GAP

1
Non è nemmeno necessario. Aggiungi un nuovo file (al gruppo di file esistente). SQL Server inizierà a riempire tutti i file in modo uniforme. Se un file non può più crescere, aumenterà solo l'altro file.
usr

2

una tabella in SQL Server 2008 può gestire un gran numero di record e, come indicato da @usr, dipende dallo spazio su disco, ma è consigliabile che se la tua tabella ha molte righe e continua a crescere che usi la Partitioned Table http://technet.microsoft. com / it-it / library / dd578580 (v = SQL.100) aspx

Quando una tabella di database aumenta di dimensioni fino a centinaia di gigabyte o più, può diventare più difficile caricare nuovi dati, rimuovere vecchi dati e mantenere gli indici

maggiori informazioni a riguardo

http://msdn.microsoft.com/en-us/library/ms190787.aspx

e come implementarlo http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizontal-partition-database-table/


Tuttavia, devi fare molta attenzione al partizionamento. La funzione e il tasto devono essere attentamente considerati, così come il caso d'uso. Il campo logico su cui partizionare non può mai essere usato in nessuna delle query, il che comprometterebbe le prestazioni.
JNK,

Vero ma miliardi di righe in una singola tabella influiranno anche sulle prestazioni, c'è anche la possibilità di suddividere i dati in molte tabelle, ad esempio una tabella separata per ogni anno e se si desidera visualizzare tutti i dati, è possibile utilizzare una vista ma in almeno unsert e update saranno più veloci su ogni tabella
AmmarR

gli inserimenti su una tabella enorme non sono necessariamente lenti, dipende da chiavi e indici. Eseguo caricamenti mensili di circa 30m di righe in una tabella con 700m di righe esistenti e non eseguiamo alcun partizionamento. Ho provato a partizionare ma ha causato più problemi di quanti ne abbia risolti. Questa è in realtà una domanda se si desidera verificarlo.
JNK,

Stavo pensando di spostare i dati della mia cronologia in una tabella separata e creare una vista unione in modo che possa essere utilizzata dall'applicazione quando è necessaria la cronologia delle query + dati più recenti che rappresentano circa il 25% delle query che ho nel sistema. Sarà più efficiente che avere più file di dati o suddividere la tabella in base alla colonna che contrassegna i dati come più recenti? Dalle operazioni IO che saranno più efficienti? perché il mio dubbio è che sarà lo stesso dal punto di vista IO in entrambe le soluzioni.
GAP

qualsiasi approccio tu abbia le sue migliori pratiche che possono renderlo buono o cattivo, voglio dire se hai molte tabelle la tua query sarà complicata e sarà difficile da mantenere, se hai una tabella e usi il partizionamento delle tabelle ci sono differenze come la tua edizione sql dovrebbe essere enterprise ecc., avere molti file di dati è consigliato per operazioni IO migliori ma ha anche le sue migliori pratiche, per le prestazioni sql non esiste un modo semplice ...
AmmarR

0

Forse una Partitioned View funzionerebbe.

Dal Utilizzando vista partizionata articolo MSDN :

Le viste partizionate consentono di suddividere i dati in una tabella di grandi dimensioni in tabelle dei membri più piccole. I dati sono partizionati tra le tabelle dei membri in base a intervalli di valori di dati in una delle colonne. Gli intervalli di dati per ciascuna tabella dei membri sono definiti in un vincolo CHECK specificato nella colonna di partizionamento. Viene quindi definita una vista che utilizza UNION ALL per combinare le selezioni di tutte le tabelle dei membri in un singolo set di risultati. Quando le istruzioni SELECT che fanno riferimento alla vista specificano una condizione di ricerca nella colonna della partizione, Query Optimizer utilizza le definizioni del vincolo CHECK per determinare quale tabella dei membri contiene le righe.

Non sono sicuro di come differisca da una tabella di partizionamento di cui AmmarR ha fornito informazioni nella sua risposta.

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.