|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 119 ![]() |
Bonjour,
je souhaite supprimer des données dans une table de 40Go. Sans me douter que l'instruction "delete" inscrivait des choses dans tempdb, j'ai d'abord fait un "delete" (en ayant suffisamment de place sur mon disque de log). çà n'a pas marcher (saleté de tempdb, j'avais prévu pour les logs mais pas pour mes bases système). Bref je veux donc selectionner mes tuples dans une table temporaire, tronquer la table et remettre les tuples dans ma table, avec le script suivant : Code :
Combien de temps prend un truncate sur une table de 40Go (à la louche) ? Quel est l'impact sur la table pour les autres utilisateurs ? Quel est l'impact sur la base de donnée pour les autres utilisateurs ? Quel l'impacte sur l'instance pour les autres utilisateurs ? Suis-je certain que le script ci dessus ne va rien écrire (hormis mes tables #temp qui ne feront pas plus d'une centaine de Mo) sur le disque qui héberge mes bases de données système (seulement 25Go de libre sur ce disque) ? Pensez-vous que le script est viable ? sinon, comment puis-je l'optimiser ? |
||
|
|
00
|
|
|
#2 | ||||
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Bonjour,
Personnellement je ne travaillerais pas avec des tables temporaires mais plutôt avec des tables de travail classiques ce qui évitera dans un 1er temps d'aller occuper tempdb pour rien. De plus en cas d'erreur ou d'arrêt de votre instance les données seront sauvegardés. Dans une table temporaire ce n'est pas le cas. Je verrais plus un script comme cela. Code :
Citation:
Citation:
++ |
||||
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 119 ![]() |
Merci pour la réponse.
Script passé sur base de dev. Pour info, le truncate a été très rapide (<2sec). Cela ne libère pas la place sur le disque. J'ai fait un DBCC SHRINKFILE('fichier.mdf') pour libérer de la place. Contrairement à ce que je pensais , cette action a libérée 70GO !! (contre 40 attendu). A priori, le plan de maintenance mis en place ne libère pas l'espace inutilisé (il y a surement une raison) Je me demande quel est l impacte sur les performance (le fait de supprimer l'espace inutilisé) ? Si impact il y a, existe-il une autre méthode pour gérer l'espace inutilisé ? |
|
|
00
|
|
|
#4 | |||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
Citation:
Ce qui fait que TRUNCATE est plus rapide que DELETE, c'est que DELETE enregistre dans le fichier du journal des transactions de la base de données toutes les données affectées par le DELETE, de façon à pouvoir l'annuler. En revanche une instruction TRUNCATE n'est pas annulable, donc c'est une instruction à manipuler avec parcimonie Citation:
Un fichier (de données ou du fichier du journal des transactions) grossit pour pouvoir y stocker des données : jusque-là, rien de spécial. Maintenant chaque opération de grossissement de fichier étant particulièrement lente, le moteur de base de données ne rétrécit jamais de lui-même les fichiers, puisque de toute façon les fichiers sont voués à stocker de nouvelles données. Donc quand un grossissement de fichier est en cours, toutes les transactions qui doivent écrire dans ce fichier "patientent" en attendant que le fichier ait fini de grossir ... jusqu'à la prochaine fois De plus cela favorise la fragmentation du fichier, qui pénalise également les performances de votre base de données. Citation:
Comme je l'ai écrit plus haut, un rétrécissement de fichier est une manœuvre d'urgence. Au prix actuels des disques durs, cela ne doit plus être un problème @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||
|
00
|
|
|
#5 | |||
![]() ![]() |
Citation:
Avec un test "quick and dirty" ça a l'air d'être le cas : Code :
__________________
Email : http://scr.im/waldar |
|||
|
00
|
|
|
#6 | |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Citation:
++ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com