Spostamento del database SQL Server su un nuovo disco mentre è online


11

Ho un database SQL Server da 1,4 TB che sta lottando enormemente con l'I / O del disco. Abbiamo installato un nuovo array SSD nel server che risolverà tutti i nostri problemi, stiamo solo discutendo il modo migliore per spostare il database. Idealmente, se possiamo farlo senza tempi di inattività, è meglio. Ma se la scelta è tra due giorni di scarso rendimento (ad es. Durante la copia dei dati) rispetto a due ore di inattività, quest'ultimo potrebbe essere preferibile.

Finora, le soluzioni che abbiamo trovato sono:

  • Semplice copia. Porta offline il DB, copia i file, modifica le posizioni in SQL Server e riportalo online. I dati approssimativi stimano che ci vorranno fino a cinque ore, il che non è davvero accettabile, ma è la soluzione più semplice.

  • Copia a livello di blocco. Usando un'utilità simile a rsync, copiamo i file in background mentre il DB è attivo. Quando siamo pronti per la migrazione, portiamo il DB offline, eseguiamo una copia differenziale attraverso questa utility, quindi puntiamo il server SQL verso i nuovi file e lo portiamo online. Il tempismo qui non è noto. Non sappiamo quanto tempo ci vorrà per fare un'analisi differenziale di 1,4 TB e copiarla. La nostra altra preoccupazione è che la copia a livello di blocco lascerà i file in alcuni stati illeggibili da SQL Server e avremo tempo perso.

  • Migrazione SQL. Crea un nuovo file di dati SQL da 1,4 TB sul nuovo disco e disabilita la crescita automatica su tutti gli altri file. Quindi eseguire DBBC SHRINKFILE (-file_name-, EMPTYFILE) su tutti gli altri file di dati a turno. Una volta che tutti i dati sono stati trasferiti, ad un certo punto prenderò una finestra pianificata per spostare il file MDF sull'SSD e rimuovere gli altri file non utilizzati. Mi piace perché riduce al minimo i tempi di fermo. Ma non ho idea di quanto tempo ci vorrà e se causerà un degrado delle prestazioni mentre sta accadendo.

Non abbiamo alcun tipo di ambiente di carico e prestazioni per testarlo. Posso verificare che le strategie funzioneranno nel nostro ambiente di gestione temporanea, ma non l'impatto e non le prestazioni.


I tuoi file di dati sono memorizzati su una partizione LVM?
— Marco,

1
don't know how long it will take to do a differential analysis of 1.4TBalmeno quanto basta per leggere quei dati. Non credo che l'idea rsync risparmi molto se non altro. rsync è fatto per far fronte a reti lente.
— usr

2
Invece di usare EMPTYFILE, ricostruirei tutti gli indici in un nuovo filegroup che si trova sull'SSD. In questo modo gli indici appaiono belli e deframmentati. EMPTYFILE potrebbe frammentarli, non sono sicuro.
— usr

Risposte:


14

Un metodo per spostare l'intero database è con BACKUPe RESTORE. Il database non sarà disponibile durante lo switch finale ma i tempi di inattività dovrebbero essere minimi con la pianificazione. Questa procedura presuppone il modello di recupero FULLo BULK_LOGGED:

1) Eseguire un backup COMPLETO (o utilizzare quello esistente).

2) Ripristinare l'ultimo backup completo su un nome di database diverso, specificando l' WITH MOVEopzione per riposizionare i file sull'archivio SSD come desiderato e l' NORECOVERYopzione in modo da poter ripristinare i successivi backup differenziali e di registro.

3) Applicare modifiche incrementali al nuovo database fino al momento del cut-over finale con i backup del registro delle transazioni e RESTORE...WITH NORECOVERY. Ciò ridurrà al minimo i tempi di inattività per il passaggio finale al nuovo database.

4) Per passare al nuovo database, portare offline l'applicazione, eseguire un backup del registro delle transazioni finale e applicare al nuovo database WITH RECOVERY. Infine, rinominare il database originale con un nome diverso e rinominare il database trasferito con il nome originale. Rilascia il vecchio database a tuo piacimento.

Nel modello di recupero SEMPLICE, è possibile utilizzare un processo simile ma senza il backup / ripristino del registro delle transazioni del passaggio 3. Utilizzare invece un backup / ripristino del database differenziale nel passaggio finale. Ciò potrebbe richiedere più tempi di inattività, a seconda della quantità di modifiche dal FULLbackup iniziale .


Sì, non viene in mente nulla di più semplice e veloce per lo stesso movimento di db del server.
— Marian,

-6
Good approach is to use SQL REPLICATION between two server
once all data replicated on SSD server then take current server offline 
and switch to SSD server.

2
Stai ricevendo voti negativi perché non rispondi alla domanda. C'è solo un server nella situazione in discussione.
— AakashM,

Anche un buon approccio per spostare dbs sono il mirroring, il log shipping, i gruppi di disponibilità, i backup e ... altri. Questo non risolve i problemi, sfortunatamente.
— Marian,

Su un server possiamo creare due istanze ed eseguire la replica tra due istanze.
— Avinash Mendse,
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.