Interrompere i servizi di SQL Server prima di deframmentare l'unità?


8

I file di dati del nostro database SQL Server 2005 di produzione vivono su un'unità fisica separata, che lo strumento di deframmentazione dischi di Microsoft Windows 2003 riporta come frammentato al 99%.

Abbiamo programmato un'attività per deframmentare questo disco alle 3:00 di sabato mattina. Il lavoro è stato completato dopo 40 minuti senza errori apparenti. Tuttavia, l'unità rimane fortemente frammentata.

Avremmo dovuto interrompere i servizi di SQL Server prima di deframmentare?

CONTESTO

Per richieste per contesto: disponiamo di un'istanza di Microsoft SQL Server 2005 (9.00.5324.00) che esegue Windows Server 2003 (SP2) a 32 bit su hardware Dell PowerEdge 2950, ​​circa 2007, con 4 GB di RAM. PowerEdge 2950 ha quattro unità da 68 GB configurate come RAID-1 per creare due dischi virtuali da 68 GB: (1) C (avvio e sistema operativo) e D (file di paging, altri dati vari); e (2) E (dati SQL). Per quanto ne so, il personale IT non ha mai deframmentato nessuna di queste unità ... Disk Defragmenter riporta la frammentazione dei file del 66% (C), 77% (D) e 99% (E). Performance Monitor riporta i seguenti risultati medi: "File di paging:% utilizzo" = ~ 6,8% ; "SQL Server: Buffer Manager - Aspettativa di vita della pagina" = 20 secondi ; e "PhysicalDisk: sec. disco medio / scrittura, unità E" = tra 300 e 1,. Tra qualche mese dovremo effettuare l'upgrade hardware e SQL Server tanto necessario (vale a dire, nuovo hardware, Windows Server 2012 a 64 bit, SQL Server 2012 a 64 bit, 12 GB di RAM), ma, a causa della fine- prestazioni dell'utente, desidera alleviare il problema il più possibile. Pertanto, l'idea di una deframmentazione dei file potrebbe essere utile per l'unità E, l'unità dati SQL principale.

Per inciso, la settimana scorsa abbiamo estratto due unità guaste e ricostruito l'array ... non sono sicuro che sia importante. Contrattiamo con un altro team IT per mantenere il server, quindi non abbiamo accesso diretto alle apparecchiature ... la nostra organizzazione paga solo per i servizi.

Possiamo permetterci i tempi di inattività durante le finestre di manutenzione regolarmente programmate (settimanalmente) e i tempi di inattività fuori banda, se necessario, durante la notte.


6
Avete qualche misura per indicare che la frammentazione del disco fisico sta avendo un impatto significativo? Puoi permetterti i tempi di fermo?
Remus Rusanu,

2
@RemusRusanu - come si può sapere se un dato livello di frammentazione sta avendo un effetto complessivo negativo sul sistema senza deframmentarlo? Ispezionare il numero di I / O divisi tramite Performance Monitor potrebbe essere utile, sebbene sarà difficile correlarlo con l'attività all'interno di SQL Server. Questo non è inteso come un confronto, tra l'altro: sono davvero curioso!
Max Vernon,

4
@MaxVernon: Per amor di teoria, suppongo XPerf . Si potrebbe anche misurare fianco a fianco creando un database non frammentato sullo stesso disco ed eseguendo un carico di lavoro acquisito. Tuttavia, per tutte le ragioni pratiche, la probabilità che i problemi di prestazioni prevalenti siano presenti nell'app rispetto alla frammentazione è schiacciante.
Remus Rusanu,

3
La mia esperienza mi dice 99 volte su 100 (o più) che sarei sicuramente d'accordo. I problemi di prestazioni sono molto più probabili a causa di alcuni ORM che eseguono ovunque SELECT *, o di altre pratiche scorrette.
Max Vernon,

1
Prima di apportare altre modifiche e certamente prima di tentare una deframmentazione, è necessario assicurarsi che gli array siano stati completamente ricostruiti. E un consiglio per il tuo nuovo sistema - ottieni tutta la RAM che puoi permetterti - vuoi avere in memoria la maggior parte dei tuoi dati SQL ad accesso regolare poiché la RAM è 1.000 volte più veloce dei dischi più veloci.
Max Vernon,

Risposte:


2

Personalmente ho usato Raxco PerfectDisk (non associato in alcun modo alla società o ai suoi dipendenti) per eseguire deframmentamenti online di LUN di SQL Server. Funziona perfettamente, se rallenta un po 'il server. Consiglierei di farlo durante i periodi di attività più leggera. Quando dico "funziona perfettamente" mi riferisco a non corrompere il volume o i file di dati SQL.

La deframmentazione integrata fa un pessimo lavoro se alcune strutture sono frammentate sull'unità. PerfectDisk mostra i dettagli su tutti gli elementi frammentati, incluse le tabelle di allocazione NTFS, le directory, i flussi di file alternativi, ecc. Ecc.

PerfectDisk deframmenta i database SQL? http://support.raxco.com/KB/a106/does-perfectdisk-defragment-sql-databases.aspx

Vedi questa copia dell'archivio di Technet News Magazine riguardante SQL Server e la frammentazione: http://web.archive.org/web/20100803204458/http://www.microsoft.com/technet/abouttn/flash/tips/tips_083104.mspx


2
Ma il commento di Remus ha molti più meriti rispetto al semplice riferimento ad alcuni prodotti. Non credo di aver mai deframmentato un disco di Windows su cui si trovava SQL e non ho mai visto una forte indicazione di cui avevo bisogno. Windows potrebbe dire che un'unità è frammentata ma l'importante è che SQL Server riscontri problemi a causa di essa. In molti casi sospetto che davvero non importa e non è necessario eseguire deframmentazione a livello di file system. Dici che "funziona perfettamente" ma hai effettivamente osservato miglioramenti misurabili? Potete fornire dettagli?
Aaron Bertrand

1
Concordo, Aaron, per la maggior parte dei casi la frammentazione fisica su un SQL Server altrimenti progettato correttamente avrà un effetto minimo. Anche come in questo caso in cui l'utente segnala una frammentazione del 99%. Tuttavia, se l'utente ha i suoi database SQL sullo stesso LUN dell'O / S e questo si trova su un singolo disco o un array RAID con un numero limitato di fusi, una frammentazione davvero eccessiva può avere un impatto.
Max Vernon,

1
Per "davvero eccessivo" intendo migliaia e migliaia di frammenti. Pensa a centinaia di migliaia. L'ho visto. Non che io sia orgoglioso o altro!
Max Vernon,

Come ha detto Brent Ozar, se si eseguono database SQL su una SAN in cui i dati sono condivisi su un array RAID gigante, eseguire una deframmentazione fisica (e in effetti una deframmentazione SQL logica) probabilmente non avrà alcun effetto misurabile positivo sull'insieme prestazioni del sistema.
Max Vernon,

Sto contrassegnando questa come la migliore risposta attuale, poiché sembra "Sì" se utilizziamo lo strumento giusto. Grazie!
iokevins,

7

Il tuo problema non è la frammentazione del disco. Il tuo problema è la RAM e le scansioni della tabella delle applicazioni:

4 GB di RAM ... 68 GB ... Aspettativa di vita della pagina 20 secondi

Hai bisogno di molta più RAM. Come nel tuo nuovo server dovrebbe avere modo, modo, modo, molto più di 12 GB. Inizia con 64 GB, costa fondamentalmente dimes . E sì, correggi la tua app per utilizzare gli indici. 20 secondi è un'indicazione molto chiara delle scansioni di tabelle che eliminano il pool di buffer. È necessario correggere l'app, aggiungere gli indici richiesti e correggere le query . Nel tuo caso la deframmentazione delle unità è tanto un'aringa rossa quanto le aringhe rosse.

Oh, e per favore sposta il registro per separare i mandrini fisici dai dati . Solo.


Grazie Remus; se solo governassi il mondo .... Contrattiamo con un fornitore di terze parti per l'app, quindi non nel nostro controllo diretto, purtroppo. Apprezzo molto la tua intuizione, grazie.
iokevins,

1
Più RAM e SSD possono facilitare l'uscita con un budget abbastanza ridotto. Ma l'app ha bisogno di una correzione.
Remus Rusanu,

Come follow-up, dopo aver deframmentato l'unità, le prestazioni sono solo leggermente migliorate. Remus sembra corretto nella sua diagnosi di un problema di RAM.
iokevins,

@RemusRusanu è importante provare a ottimizzare con i file inseriti in diversi dischi nei server virtuali (vmware)? Questa è una domanda generale sulla virtualizzazione e l'ignoranza ...
diegohb,

-4

Brad McGehee lo descrive bene qui:

http://www.bradmcgehee.com/2011/06/do-you-ever-physically-defragment-your-sql-server-mdf-ldf-files/

... se si lascia il servizio SQL Server in esecuzione durante la deframmentazione, i file del database sono aperti e quindi non deframmentati affatto.


2
Assolutamente scorretto Almeno nelle versioni recenti di Windows. Come in Windows Server 2003+ o Windows XP +
Max Vernon

1
Tutti gli strumenti di deframmentazione di Windows utilizzano le API di sistema per deframmentare i file e farlo a livello di cluster sotto le API di accesso ai file. Ecco come le cartelle possono essere deframmentate con il volume online.
Max Vernon,
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.