web-dev-qa-db-fra.com

Libérer de l'espace libre dans le fichier MDF au système d'exploitation

Nous avons une base de données de 120 Go. Il y avait une table avec 60 Go de données qui est inutile et nous l'avons tronqué.

Maintenant, la taille de la base de données est de 120 Go avec espace libre 60 Go. La base de données ne grandira pas jusqu'à 60 Go dans au moins 3 mois. Alors pouvons-nous réduire le fichier de données.

Je suis conscient du problème de la fragmentation. Je peux reconstruire mon index depuis que notre n'est pas une base de données 24 * 7.

S'il vous plaît des conseils sur la rétrécissement MDF fichier

4
Pரதீப்

Qu'est-ce que vous essayez exactement de réaliser en rétrécissant la base de données? Vous devriez planifier la croissance de la base de données et disposer d'un espace réservé pour cette croissance.

Alors, pourquoi ne le laissez-vous pas car il s'agit d'avoir alloué de l'espace pour de nouvelles données venant à votre DB.

Il a été discuté tant de fois que vous ne souhaitez pas réduire vos bases de données. Vérifiez cela et réfléchissez deux fois avant de vous rétrécir:

Arrêtez de rétrécir vos fichiers de base de données. Sérieusement. Maintenant. par Brent Ozar

6
George K

Veuillez lire mon post sur Comment réduire une base de données , que je vais résumer ici:

Regardez votre taille de fichier de données

Regardez la taille de tous les fichiers de votre groupe de fichiers. Vous souhaitez que tous les fichiers du groupe soient de taille uniforme et que vous souhaitez autoriser la croissance de la croissance, la maintenance d'index, etc. Il est plus logique de faire preuve de plus en plus difficile de quitter la base de données un peu trop grande que de se rétrécir pour être trop petit . Personnellement, je tiendrais compte d'au moins 6 mois de croissance de ma taille de la cible.

SELECT
     LogicalName = dbf.name
    ,FileType = dbf.type_desc
    ,FilegroupName = fg.name
    ,PhysicalFileLocation = dbf.physical_name
    ,FileSizeMB = CONVERT(DECIMAL(10,2),dbf.size/128.0)
    ,UsedSpaceMB = CONVERT(DECIMAL(10,2),dbf.size/128.0 - ((dbf.size/128.0)
               - CAST(FILEPROPERTY(dbf.name, 'SPACEUSED') AS INT) /128.0))
    ,FreeSpaceMB = CONVERT(DECIMAL(10,2),dbf.size/128.0
           - CAST(FILEPROPERTY(dbf.name, 'SPACEUSED') AS INT)/128.0)
FROM sys.database_files dbf
LEFT JOIN sys.filegroups fg ON dbf.data_space_id = fg.data_space_id
ORDER BY dbf.type DESC, dbf.name;

Considérer les effets secondaires

Il semble que vous ayez déjà fait cela, et vous êtes correct avec la maintenance de l'index à la suite de votre rétrécissement. Assurez-vous de planifier suffisamment de temps pour rétrécir et effectuer une maintenance de l'index lors de votre fenêtre de maintenance. Il peut être plus rapide et plus facile d'utiliser la fenêtre de maintenance pour migrer dans une base de données fraîche ou reconstruire tous les index dans un nouveau groupe de fichiers, plutôt que de rétrécir l'existant.

Rétrécir votre base de données

Toujours utiliser SHRINKFILE et jamais SHRINKDATABASE. Utilisez les informations que vous avez déterminées à l'étape 1 pour créer votre ou vos instructions SHRINKFILE.

USE [DatabaseName];
DBCC SHRINKFILE(LogicalName, TargetSize);

Examiner la fragmentation et réorganiser les index

Si vous avez un travail d'entretien régulier, il suffit de lancer ce travail et de le faire faire de la magie. Cela va prendre beaucoup plus de temps que la normale, car tout sera vraiment fragmenté. Vous générerez beaucoup plus de journal de transaction que d'habitude. Vous aurez donc de plus grandes sauvegardes de journal de transaction, et vous verrez également les effets dans une expédition de journal, des groupes de disponibilité, la mise en miroir, etc.

5
AMtwo

Utilisez ce code ci-dessous. Détails ici . 7 est en MB.

USE UserDB;  
GO  
DBCC SHRINKFILE (DataFile1, 7);  
GO  
1
SqlWorldWide