Obtenez MS SQL Server pour libérer de l'espace disque

9

Une table de base de données mal gérée est devenue énorme. 48 + concerts d'enregistrements orphelins. J'essaie de le nettoyer et de remettre mon disque dur dangereusement plein dans un état normal. Je supprimerai environ 400 millions d'enregistrements de ce tableau. Cela fonctionne comme je tape. Je remarque que je ne vois aucune baisse de l'espace sur mon disque dur mais je vois la mémoire chuter sur les requêtes de table système, je cours pour obtenir la taille de la table. La base de données utilise un "modèle de récupération simple".

Il existe de nombreuses questions similaires à celle-ci avec des réponses indiquant que vous devez réduire la base de données. Mais ils expliquent à quel point cela est mauvais / effrayant à cause de données fragmentées, etc.

  1. Étant donné que la base de données ne doit pas être de cette taille. Est-il toujours mauvais pour moi de le rétrécir?
  2. Il s'agit d'une base de données de production. Si je rétrécis, cela entraînera-t-il des temps d'arrêt ou verrouillera la base de données?
  3. Dans SQL Server Management Studio, vous avez deux options pour la réduction, la base de données ou les fichiers. Compte tenu de ma situation, quelle serait la meilleure option?
  4. existe-t-il une règle sur le pourcentage d'espace libre qu'une base de données devrait avoir?

Même en lisant la description de la balise de psy, je ne veux pas le faire. Y a-t-il un autre moyen?

jackncoke
la source

Réponses:

14

Je supprimerai environ 400 millions d'enregistrements de ce tableau.

Espérons que vous le fassiez en plusieurs parties - pour éviter de gonfler le journal des transactions.

remarquez que je ne vois aucune goutte dans mon espace de disque dur

Vous ne le ferez pas, car vous devez réduire explicitement le fichier de base de données pour libérer de l'espace. En supprimant simplement les enregistrements, le serveur SQL ne libérera pas l'espace sur le système d'exploitation .

  1. Étant donné que la base de données ne doit pas être de cette taille. Est-il toujours mauvais pour moi de le rétrécir?

C'est généralement une mauvaise pratique car les bases de données doivent être correctement dimensionnées. Si vous êtes sûr à 100% que votre base de données ne sera PAS de nouveau de cette taille, c'est OK pour vous de réduire la base de données (dans votre scénario) .

  1. Il s'agit d'une base de données de production. Si je rétrécis, cela entraînera-t-il des temps d'arrêt ou verrouillera la base de données?

La réduction d'une base de données est une opération très intensive en E / S. Il est conseillé de rétrécir en utilisant DBCC SHRINKFILEpendant la fenêtre de maintenance ou lorsqu'il y a une activité minimale.

  1. Dans le studio de gestion, vous avez deux options, Base de données ou Fichiers. Compte tenu de ma situation, quelle serait la meilleure option?

Vous devez utiliser TSQL pour effectuer la réduction. (depuis que vous avez demandé, la réduction du FICHIER est la voie à suivre au lieu de la base de données). Vous pouvez utiliser la base de données de réduction en morceaux - script tsql pour effectuer la réduction en morceaux.

N'oubliez pas que lorsque vous réduisez, vous fragmentez vos index.

  1. existe-t-il une règle sur le pourcentage d'espace libre qu'une base de données devrait avoir?

Vous pouvez vous référer à l'article Estimation de l'espace disque requis pour les bases de données . Il n'y a pas de règle fixe, vous devez prendre en compte la croissance prévue de votre base de données. Vous devez également prendre en compte la croissance automatique de vos bases de données .

Références: Pourquoi le journal des transactions continue-t-il de croître ou de manquer d'espace?

Kin Shah
la source
5

vous avez de bonnes raisons de vous inquiéter car la taille de DB dans SQL Server "suce" souvent. Paul Randal, responsable du moteur de stockage dans SQL 2005, a déclaré que ShrinkDB est très mal écrit. Il trouvera de l'espace vide en prenant les données à la toute fin et en les plaçant au tout début, et continuera ainsi jusqu'à ce qu'il ait de l'espace libre à la «fin» des fichiers DB. À ce stade, il peut ensuite libérer l'espace de SQL Server et le restituer au système d'exploitation. Vous inversez efficacement vos fichiers de base de données, vous verrez donc généralement une fragmentation massive. Vous pouvez lire ses opinions sur ce blog ou sur cette vidéo MCM Internals

Comme pour tout, vous devez d'abord les tester dans votre environnement. Une meilleure façon de procéder consiste à déplacer les données vers un autre groupe de fichiers. Vous pouvez effectuer une reconstruction d'index en ligne avec l'index cluster, puis réindexer dans le nouveau groupe de fichiers. Ensuite, vous pouvez supprimer l'ancien et libérer l'espace et ne présenter presque aucune fragmentation. Notez que cela prendra environ 120% d'espace supplémentaire pendant qu'il fonctionne. Le problème avec cela est que vous avez besoin d'un espace libre supplémentaire, ce qui semble ne pas être le cas. Il s'agit d'une fonctionnalité d'entreprise.

Si l'espace libre est à un niveau si élevé, vous devrez peut-être mordre la balle et rétrécir lentement la base de données un petit morceau à la fois pour éviter de longs processus. Notez que vos données seront fortement fragmentées et vous voudrez tout réindexer à nouveau. Notez qu'après avoir tout réindexé, vous remonterez un peu votre espace utilisé et reviendrez à l'espace libre supplémentaire. Voir les conseils de Brent ici .

En ce qui concerne la quantité d'espace libre qui vous convient, il s'agit de savoir dans quelle mesure vous pouvez vous permettre des activités de fragmentation et de croissance de fichiers. Avec IFI activé, la croissance du fichier est presque instantanée mais vous obtenez toujours une fragmentation. Une bonne règle de base est de pré-allouer autant d'espace que vous pensez en avoir besoin, ou de surveiller la croissance et de l'ajuster périodiquement si nécessaire. Cela réduit la fragmentation physique.

La croissance des fichiers journaux est également beaucoup plus importante. Des fichiers journaux supplémentaires peuvent provoquer une fragmentation VLF. Cela rend vos restaurations beaucoup plus lentes et peut affecter le point de contrôle / tronque. Voici quelques risques de performances que vous prenez avec un journal fragmenté. Faites un DBCC LOGINFO();sur chaque base de données. Essayez de garder le nombre autour de 50ish par Kim Tripp, mais si vous voyez des centaines, vous avez des problèmes de fragmentation, ce qui signifie que vos fichiers journaux ont dû augmenter pour prendre en charge les opérations. Un bon moyen de voir ce que devrait être votre fichier journal selon Paul Randal est de le laisser croître pendant une semaine et de réindexer. Cela pourrait être un bon point, peut-être que vous pouvez y ajouter un peu plus d'espace libre au cas où. Assurez-vous que vos journaux ne sont pas fragmentés avec DBCC LOGINFO (); encore et s'ils le sont, cela signifie qu'ils ont beaucoup grandi. Réduire et ré-développer le fichier journal à l'aidecette méthode .

Ali Razeghi
la source
2

Il est normal que vous le réduisiez suffisamment pour vous assurer que votre serveur ne tombera pas en panne pendant le temps qu'il vous faudra pour évaluer vos besoins de stockage et planifier le matériel / les services d'hébergement de manière appropriée (voir question 4). Non, cela ne le verrouillera pas. Voir restrictions . Rétrécissez la base de données car elle simplifie les choses.

Je suggère de contracter l'expertise pour mener l'étude et rédiger le plan.

user41207
la source