Arrêter les services SQL Server avant de défragmenter le lecteur?

8

Les fichiers de données de notre base de données de production SQL Server 2005 vivent sur un disque physique séparé, que l'outil Défragmenteur de disque de Microsoft Windows 2003 rapporte comme étant fragmenté à 99%.

Nous avons programmé une tâche pour défragmenter ce lecteur à 3h00 du matin un samedi matin. Le travail s'est terminé après 40 minutes sans aucune erreur apparente. Cependant, le lecteur reste fortement fragmenté.

Aurions-nous dû arrêter les services SQL Server avant la défragmentation?

LE CONTEXTE

Par demandes de contexte: nous avons une instance Microsoft SQL Server 2005 (9.00.5324.00) exécutant Windows Server 2003 (SP2) 32 bits sur le matériel Dell PowerEdge 2950, ​​vers 2007, avec 4 Go de RAM. Le PowerEdge 2950 possède quatre disques de 68 Go configurés en RAID-1 pour créer deux disques virtuels de 68 Go: (1) C (démarrage et système d'exploitation) et D (fichier d'échange, diverses autres données); et (2) E (données SQL). À ma connaissance, le personnel informatique n'a jamais défragmenté aucun de ces disques ... Le Défragmenteur de disque signale une fragmentation de fichiers de 66% (C), 77% (D) et 99% (E). L'analyseur de performances signale les résultats moyens suivants: "Fichier d'échange:% d'utilisation" = ~ 6,8% ; "SQL Server: Buffer Manager - Durée de vie de la page" = 20 secondes ; et "PhysicalDisk: Moyenne de disque / écriture, lecteur E" = entre 300 et 1,. Nous devons procéder à une mise à niveau matérielle et SQL Server très nécessaire dans quelques mois (à savoir, nouveau matériel, Windows Server 2012 64 bits, SQL Server 2012 64 bits, 12 Go de RAM), mais, en raison de la fin les performances des utilisateurs, souhaitent atténuer le problème autant que possible. Ainsi, la réflexion sur la défragmentation d'un fichier peut aider le lecteur E, le principal lecteur de données SQL.

En passant, la semaine dernière, nous avons retiré deux disques défectueux et reconstruit la baie ... pas sûr que cela compte. Nous passons un contrat avec une autre équipe informatique pour assurer la maintenance du serveur, nous n'avons donc pas d'accès direct à l'équipement ... notre organisation ne paie que les services.

Nous pouvons nous permettre les temps d'arrêt pendant les fenêtres de maintenance planifiées régulièrement (chaque semaine) ainsi que les temps d'arrêt hors bande, si nécessaire, pendant la nuit.

iokevins
la source
6
Avez-vous des mesures pour indiquer que la fragmentation du disque physique a un impact significatif? Pouvez-vous vous permettre le temps d'arrêt?
Remus Rusanu
2
@RemusRusanu - comment savoir si un niveau donné de fragmentation a un effet global négatif sur le système sans le défragmenter? L'inspection du nombre d'E / S fractionnées via l'Analyseur de performances peut être utile, bien qu'il soit difficile de corréler cela avec l'activité dans SQL Server. Soit dit en passant, ce n'est pas une confrontation - je suis vraiment curieux!
Max Vernon
4
@MaxVernon: Pour la théorie, je suppose que XPerf . On pourrait également mesurer côte à côte en créant une base de données non fragmentée sur le même disque et en exécutant une charge de travail capturée. Cependant, pour toute raison pratique, la probabilité que les problèmes de performances courants soient dans l'application par rapport à la fragmentation est écrasante.
Remus Rusanu
3
Mon expérience me dit 99 fois sur 100 (ou plus) que je serais certainement d'accord. Les problèmes de performances sont beaucoup plus susceptibles d'être le résultat de certains ORM SELECT *partout, ou d'une autre faute professionnelle.
Max Vernon
1
Avant d'apporter d'autres modifications, et certainement avant de tenter une défragmentation, vous devez vous assurer que les tableaux ont été complètement reconstruits. Et un conseil pour votre nouveau système - obtenez autant de RAM que vous pouvez vous le permettre - vous voulez autant de vos données SQL régulièrement consultées en mémoire car la RAM est 1000 fois plus rapide que les disques les plus rapides.
Max Vernon

Réponses:

2

Personnellement, j'ai utilisé Raxco PerfectDisk (non associé à la société ou à l'un de leurs employés) pour effectuer des défragmentation en ligne des LUN SQL Server. Fonctionne parfaitement, si cela ralentit un peu le serveur. Je recommanderais de le faire pendant les périodes d'activité plus légère. Quand je dis "fonctionne parfaitement", je fais référence à cela ne corrompant pas le volume ou les fichiers de données SQL.

Le défragmenteur intégré fait un très mauvais travail si certaines structures sont fragmentées sur le lecteur. PerfectDisk vous montre des détails sur tous les éléments qui sont fragmentés, y compris les tables d'allocation NTFS, les répertoires, les flux de fichiers alternatifs, etc. etc.

PerfectDisk défragmente-t-il les bases de données SQL? http://support.raxco.com/KB/a106/does-perfectdisk-defragment-sql-databases.aspx

Voir cette copie d'archive du magazine Technet News concernant SQL Server et la fragmentation: http://web.archive.org/web/20100803204458/http://www.microsoft.com/technet/abouttn/flash/tips/tips_083104.mspx

Max Vernon
la source
2
Mais le commentaire de Remus a beaucoup plus de mérite que de simplement pointer vers un produit. Je ne crois pas avoir défragmenté un disque Windows sur lequel SQL était installé, et je n'ai jamais vu d'indication forte que j'en avais besoin. Windows peut dire qu'un lecteur est fragmenté, mais l'important est de savoir si SQL Server rencontre des problèmes à cause de cela. Dans de nombreux cas, je soupçonne que cela n'a pas vraiment d'importance et qu'il n'est pas nécessaire d'exécuter des défragmentations au niveau du système de fichiers. Vous dites que cela "fonctionne parfaitement", mais avez-vous observé une amélioration mesurable? Pouvez-vous fournir des détails?
Aaron Bertrand
1
Je suis d'accord, Aaron, pour la plupart des cas, la fragmentation physique sur un serveur SQL correctement conçu aura un effet très minimal. Tout comme dans ce cas où l'utilisateur signale une fragmentation de 99%. Cependant, si l'utilisateur a ses bases de données SQL sur le même LUN que l'O / S et que cela se trouve sur un seul disque ou une matrice RAID avec un petit nombre de broches, une fragmentation vraiment excessive peut avoir un impact.
Max Vernon
1
Par "vraiment excessif", je veux dire comme des milliers et des milliers de fragments. Pensez à des centaines de milliers. J'ai vu ça. Pas que je sois fier ou quoi que ce soit!
Max Vernon
Comme l'a dit Brent Ozar, si vous exécutez vos bases de données SQL sur un SAN où les données sont partagées sur une baie RAID géante, effectuer une défragmentation physique (et en fait une défragmentation SQL logique) n'aura probablement aucun effet positif mesurable sur l'ensemble performances du système.
Max Vernon
Je marque cela comme la meilleure réponse actuelle, car il semble "Oui" si nous utilisons le bon outil. Merci!
iokevins
7

Votre problème n'est pas la fragmentation du disque. Votre problème est lié à la RAM et aux analyses des tables d'application:

4 Go de RAM ... 68 Go ... Durée de vie de la page 20 secondes

Vous avez besoin de beaucoup plus de RAM. Comme dans votre nouveau serveur, il devrait y avoir beaucoup plus de 12 Go. Commencez avec 64 Go, cela coûte essentiellement dix sous . Et oui, corrigez votre application pour utiliser les index. 20 secondes est une indication très claire des analyses de table qui jettent le pool de mémoire tampon. Vous devez corriger l'application, ajouter les index requis et corriger vos requêtes . Pour votre cas, la défragmentation des disques est autant un hareng rouge que les harengs rouges.

Oh, et veuillez déplacer le journal pour séparer les broches physiques des données . Seul.

Remus Rusanu
la source
Merci Remus; si seulement je dirigeais le monde ... Nous passons un contrat avec un fournisseur tiers pour l'application, donc pas sous notre contrôle direct, malheureusement. J'apprécie votre perspicacité, merci.
iokevins
1
Plus de RAM et de SSD peuvent faciliter votre sortie avec un budget assez mince. Mais l'application a besoin d'un correctif.
Remus Rusanu
À titre de suivi, après la défragmentation du disque, les performances ne se sont que légèrement améliorées. Remus semble correct dans son diagnostic d'un problème de RAM.
iokevins
@RemusRusanu est-il important d'essayer d'optimiser avec des fichiers placés sur différents disques dans des serveurs virtuels (vmware)? Ceci est une question générale d'ignorance de la virtualisation ...
diegohb
-4

Brad McGehee le décrit bien ici:

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

... si vous laissez le service SQL Server en cours d'exécution pendant votre défragmentation, les fichiers de base de données sont ouverts et donc pas du tout défragmentés.

DBA_ANDY
la source
2
Absolument incorrect. Au moins sur les versions récentes de Windows. Comme dans Windows Server 2003+ ou Windows XP +
Max Vernon
1
Tous les outils de défragmentation de Windows utilisent les API système pour défragmenter les fichiers, et le font au niveau du cluster sous les API d'accès aux fichiers. C'est ainsi que les dossiers peuvent être défragmentés avec le volume en ligne.
Max Vernon