Nous avons une table avec un 150+ millions d'enregistrements. Nous devons effacer / supprimer toutes les lignes. La suppression de l'opération prendrait pour toujours en raison de la rédaction des journaux T et nous ne pouvons pas modifier notre modèle de récupération pour l'ensemble de la DB. Nous avons testé l'option TRONCATE TABLE. p>
Qu'est-ce que nous avons réalisé que TRUNCATE translacote les pages de la table, et si je ne me trompe pas les rend disponibles pour la réutilisation mais ne rétrécisse pas automatiquement la DB. Donc, si nous voulons réduire la taille de la DB, nous devrions vraiment faire exécuter la commande de rétrécissement DB après tronquer la table. p>
est cette procédure normale? Tout ce que nous devons faire attention ou conscient, ou existe-t-il de meilleures alternatives? P>
6 Réponses :
" Supprimer toutes les lignes em>" ... ne serait-il pas Table de goutte forte> (et réapparaissez-vous un vide avec le même schéma / indices) être préférable? (Personnellement comme "Frais de départ" ;-)) P>
Cettedite table tronquée est tout simplement correct et oui, le filtre de lit DBCC peut être requis après si vous souhaitez récupérer l'espace. P>
Une chose à retenir avec la table tronquée (ainsi que la table de chute) va de l'avant cela ne fonctionnera pas si vous avez déjà des clés étrangères faisant référence à la table. P>
Sur SQL Server, Table de chute code> ne peut pas être utilisé s'il existe des contraintes de clé étrangère. msdn.microsoft.com/en-us/library/ms173790.aspx
@Prokiner Vous devez faire face à des références de clés étrangères, quelle que soit la question, c'est-à-dire que si la ligne (s) est supprimée, rétrécie ou déposée, tout enregistrement dans d'autres tables qui référencent que cette ligne (s) doit être supprimée d'abord ou que la contrainte est supprimée. Dans certains cas, cela peut être "automatisé" avec des déclencheurs de suppression, mais qui n'est guère applicable à 150 millions de bases de données de type.
@Prokiner, j'aurais dû être plus clair. Celles-ci étaient censées être deux pensées séparées, je voulais simplement souligner la question que l'OP avait déclaré avoir testé la méthode tronquée. J'ai nettoyé ma réponse.
@Irwin - Désolé, je n'étais pas aussi clair aussi. Vous avez raison, les deux approches nécessitent une manipulation des principes essentiels. Mon commentaire ne faisait que traiter avec l'option goutte code>. Dans les deux cas, l'opérateur a plus de travail sur ses mains qu'une simple table
tronquée; DBCC strinkfile code>.
@MJV - Tu as raison. Une chose supplémentaire à retenir que TRONCATE Table code> n'activera pas une gâchette, mais
Supprimer code> sera.
Ce référencée MSDN (si vous parlez de SQL) compare les coulisses de la suppression des rangées contre tronquage. P> tronquage code> est ce que vous cherchez. Si vous avez besoin de réduire la DB après, courez un rétrécissement. p>
Au fur et à mesure que d'autres commentaires ont noté, vous devrez faire face à vos contraintes de clé étrangère (le cas échéant), peu importe que vous choisissez de choisir. Ma préférence serait de désactiver les contraintes, tronquez code> le tableau, réactivez vos contraintes, puis
DBCC Shirinkfile Code> (donnez-vous un peu de temps).
Selon la taille de la base de données complète, le contrat peut prendre un certain temps; J'ai trouvé cela pour aller plus vite s'il est rétréci en plus petits morceaux, plutôt que d'essayer de le récupérer à la fois. P>
Vous avez une solution normale (TRUNCATE + DROWND DB) pour supprimer tous les enregistrements d'une table. strong> p>
Comme Irwin a souligné. La commande tronquée ne fonctionnera pas tout en étant référencée par une contrainte de clé étrangère. Donc, prenez d'abord les contraintes, tronquez la table et recréez les contraintes. P>
Si vous êtes préoccupé par
Comme indiqué, si vous ne pouvez pas utiliser Truncate ou Drop
SELECT 1 WHILE @@ROWCOUNT <> 0 DELETE TOP (100000) MyTable
Il peut utiliser à la fois tronquer ou tomber, mais leurs considérations possibles avec n'importe quelle opération (supprimer, goutte, tronquée) qui devront être prises en charge.