Domanda

Ho quattro database SQL Server. Per i requisiti massimi di carico, ciascun file di database può essere compreso tra 1 e 2 TB di dimensioni. L'HDD è un DAS multi-disk con circa 9 TB di spazio. Durante l'aggiornamento del database, il file di registro delle transazioni per un singolo database può crescere fino a 4 TB di dimensioni. (Sì, ho aggiunto una nuova colonna a una tabella multi-miliardi di riga.) I database sono sul semplice modello di recupero.

Non riesco a trovare alcuna raccomandazione (o regola generale) da Microsoft di quanto spazio su disco ho bisogno per una determinata dimensione del database. Io ottengo che può variare ampiamente. Se la mia comprensione è corretta, è la più grande transazione che devo considerare da quando lo spazio interno al file di registro viene riutilizzato per diverse transazioni. Penso che la crescita del registro sia impostata sul 10%, ma anche se è stata impostata su 1 o 2 incrementi di concimi, penso che lo stia ancora tagliando.

C'è qualche strategia di cui ho bisogno per evitare tali enormi file di registro o devo semplicemente bisogno di più spazio su disco per evitare di esaurire lo spazio durante un aggiornamento? Se sto facendo qualcosa di sbagliato, voglio imparare come farlo il modo corretto.

Sto usando SQL Server 2012. Grazie!

È stato utile?

Soluzione

.

(Sì, ho aggiunto una nuova colonna a una tabella multi-miliardo di riga.)

Aggiunta di una colonna a un tavolo molto grande può avere implicazioni ma c'è un modo intelligente di aggiungere anche la colonna .

Da: aggiunta di colonne non nulle come operazione online < / P >.

.

A partire da SQL Server 2012 Enterprise Edition, aggiungendo una colonna non nullo con un valore predefinito è un'operazione online quando il valore predefinito è una costante di runtime. Ciò significa che l'operazione è completata quasi istantaneamente indipendentemente dal numero di righe nella tabella.

Aggiunta di una colonna non nullo con un valore predefinito che non è una costante di runtime viene sempre eseguita offline e viene acquisito un blocco esclusivo (sch-m) per la durata dell'operazione.

Enterprise Edition ( Lavori il 2008 R2 Standard Edition come da commento ) ha ALTER TABLE source_table SWITCH TO new_destination_table

.

I database sono sul semplice modello di recupero.

In semplice modello di recupero, solo un CHECKPOINT troncerà il registro.

Se stai registrando le metriche di Autogrowth durante il tuo aggiornamento tipico, una media di quelle metriche raccolte ti darebbe una buona figura iniziale. Questo script ti aiuterà a iniziare (è necessario abilitare la traccia predefinita e in esecuzione sul tuo server) .

.

Penso che la crescita del registro sia impostata sul 10%, ma anche se fosse impostata su 1 o 2 incrementi di concimi, penso che lo stia ancora tagliando.

Ti suggerirei di Modifica L'impostazione di Autogrowth dalla percentuale a MB fisso. Come @aaronbertrand dice nel suo commento:

.

Il problema è che ci vuole più tempo e più lungo nel tempo, dal momento che il 10% di un file in crescita è anche in costante crescita - è come interesse composto, ma stai pagando, non ricevendo.

Per completezza, assicurati di avere l'inizializzazione del file istantaneo abilitato, quindi il file di dati Autogrowth può usufruire di esso.

Altri suggerimenti

Nello scenario di aggiungere una colonna a una tabella di classe VLDB, potrebbe valere la pena esplorare la creazione di una nuova tabella con la nuova struttura e spostare i record dal vecchio tavolo alla nuova tabella in piccole gamme.Conserverà la dimensione individuale della transazione piccola, quindi il marchio ad alta acqua per il Tlog in semplice recupero sarebbe relativamente basso.Non è possibile evitare del tutto i requisiti acidi ma se è possibile acquisire il tuo aggiornamento come gradini più piccoli anziché una singola transazione, potresti essere in grado di funzionare attorno al vincolo dello spazio su disco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top