2008-09-05 8 views
6

J'ai des bases de données sq sql qui sont très volumineuses. Après examen, je trouve qu'il y a beaucoup d'espace inutilisé dans certaines tables. Je ne fais pas beaucoup de suppressions physiques, donc je ne pense pas que ce soit juste supprimé les enregistrements. DBCC SHRINK ne réduit pas le fichier. Mais, si je vide la table dans une nouvelle base de données vide, la taille diminue d'environ 80%. Au lieu de la 7gb que j'ai dans cette table dans la base de données actuelle, je me retrouve avec environ 1,5 Go dans la nouvelle base de données. C'est comme si le serveur sql alloue trop de mémoire. Quelqu'un a-t-il déjà rencontré ça? Je voudrais être capable de réduire la table en supprimant l'espace alloué inutilisé sans avoir à créer une base de données entière.Espace table SQL Server inutilisé mais alloué

Informations complémentaires:

Modèle de récupération complet utilisé. Je vais essayer de reconstruire les index, je pense que ça fait un moment. Les ldf sont rétrécis quotidiennement en utilisant un proc stocké farfelu qui les tronque.

+0

Il n'y a absolument aucun point à utiliser dans l'utilisation du modèle de récupération complète, si tout ce que vous faites pour les LDF est de les tronquer! La bonne façon de les réduire est de faire une sauvegarde des fichiers journaux, moment auquel ils seront réduits automatiquement. Quelqu'un qui comprend les chaînes de journalisation et la stratégie de sauvegarde appropriée est désespérément nécessaire pour intervenir et vous aider à faire les choses correctement. Rien de moins vous met au ** risque de perdre des données **. – ErikE

+0

Est-ce pertinent? L'article KB 924027 - [SQL Server augmente considérablement l'espace inutilisé pour certaines tables] (http://support.microsoft.com/kb/924947) –

+0

Jetez un oeil à cet article de la base de connaissances et voir si elle s'applique: http://support.microsoft.com/kb/913399 –

Répondre

0

Dans les options, vous pouvez spécifier la taille de votre choix. Par défaut, je crois que c'est 10%, donc avec une base de données de 200 Mo, lorsque vous remplissez votre dernière page, vous allouez 20 Mo d'espace supplémentaire. À 7 Go, il allouer 700 Mo.

Je ne sais pas exactement où vous pouvez le modifier après avoir créé un db, mais je sais qu'il l'a quand vous créez le db. un peu de travail Google révélera très probablement la réponse à vous. REMARQUE: ma réponse n'est pas de savoir comment résoudre le problème, mais peut-être comment empêcher/expliquer pourquoi vous pourriez voir tout cet espace non alloué.

2

J'ai trouvé que si vous ne faites pas attention à sauvegarder votre fichier journal de transistion (le LDF), vous obtiendrez quelque chose comme ce comportement. Je ne saurais trop insister sur l'importance d'avoir une bonne "sauvegarde" de la sauvegarde. Non seulement cela va-t-il sauver votre bacon si quelque chose ne va pas mais je vais aussi aider à maintenir une base de données bien serrée.

+0

D'accord, n'oubliez jamais de sauvegarder les journaux de transactions ainsi que les sauvegardes de bases de données. Le journal va se développer jusqu'à ce qu'il mange votre disque dur entier. – HLGEM

1

Je ne fais pas beaucoup physique supprime

ce que des mises à jour de la table, quel est le niveau de fragmentation. exécutez DBCC SHOWCONTIG, puis reconstruisez l'index s'il est fortement fragmenté. Après cela, faire un journal BACKUP AVEC TRUNCATE_ONLY suivi d'une commande Shrink

0

Cela a fonctionné pour moi dans le passé

USE [DBNAME] 
GO 

DBCC SHRINKFILE (N'FILENAME' , 0, TRUNCATEONLY) 

GO 
0

J'ai eu un problème similaire une fois et je crois que j'ai trouvé que réindexation/didn rétrécissement » t récupérer tout l'espace inutilisé s'il n'y avait pas d'index clusterisé sur une table donnée.

0

Il est possible que la table ait été construite avec le remplissage activé pour l'index. La raison pour laquelle les gens construisent un index rembourré est d'empêcher les divisions de page.

Cliquez avec le bouton droit sur la table dans SQL Manager et sélectionnez SCRIPT TABLE. Alors regardez pour voir si PAD_INDEX=OFF. Si PAD_INDEX est utilisé, c'est probablement là où la table occupe de l'espace.

Questions connexes