yanis7518
Messages postés283Date d'inscriptionmercredi 7 décembre 2005StatutMembreDernière intervention 9 juillet 2010
-
7 août 2006 à 12:25
yanis7518
Messages postés283Date d'inscriptionmercredi 7 décembre 2005StatutMembreDernière intervention 9 juillet 2010
-
8 août 2006 à 12:59
Salut a tous
voila j'execute un fichier a l'aide de sqlcmd dans lequel se trouve plusieur instruction DELETE.
voici le format de mon fichier
USE [MABASE]
Go
DELETE..... ;
Go
DELETE..... ;
Go
......
et voici la commende que je lance
sqlcmd -E -S[server] -ic:\test\fic.sql
Lorsque je le lance il me met comme message
"le contexte de la base de données a changé; il est maintenant 'MABASE' "
et puis il reste comme ca
pour info ma table sur laquelle je fais mes delete contient + de 7millions de ligne
Dc 1ere question
est-ce-que mon fichier est bien formaté ou pas? et si quelqu'un pouvait m'envoyer un exemple ca serai cool
2eme question
est ce que c'est normal que ca mette autant de tps? et est-ce qu'il existe un moyen plus rapide pour faire mes DELETE?????
Merci a toussssssssssssss
A voir également:
Sqlcmd n'est pas reconnu en tant que commande interne
cs_skweeky
Messages postés259Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention11 janvier 20108 7 août 2006 à 18:11
Ok, dans ce cas j'ai compris c'est dans doute que la table n'a pas d'index et / ou de clef primaire et san doute pas sur le champ qui sert à faire la sélection pour le DELETE.
Il faudrait alors créer un index sur le champ qui est présent dans le WHERE du DELETE, celà peut prendre quelques minutes, puis relancer le script celà devrait alors être quasi-instantané.
S'il y a des connexions sur d'autres bases sur le même serveur ce pas très gênant... Normalement on ne verra pas la différence.
Ce qui aurait pu l'être c'est un utilisateur qui lit des données, dans ce cas le DELETE attend !
cs_skweeky
Messages postés259Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention11 janvier 20108 7 août 2006 à 13:02
Personnellement je parie sur la lenteur du DELETE, un DELETE sur 7 millions d'enregistrements est nécessairement "un peu" lent. Il faudrait à mon avis découper le DELETE en blocs.
Par exemple au lieu de :
DELETE FROM MaTable
Ceci :
DELETE FROM MaTable WHERE Id BETWEEN @debid AND @finid
Avec une boucle... WHILE par exemple autour
Les DELETE sur une très grosse quantité de données sont en général une assez mauvaise idée, c'est pour cela qu'on fractionne.
De plus cela permettra d'avoir la progression de la suppression.
Sinon pour l'appel de sqlcmd et la structure du fichier je trouve que c'est bon.
yanis7518
Messages postés283Date d'inscriptionmercredi 7 décembre 2005StatutMembreDernière intervention 9 juillet 20103 7 août 2006 à 13:08
merci pour la reponse
en fait je fai pas un delete sur les 7million d'enregistrement je le fait que sur certain
Delete from table where id = '1';
Go
Delete from table where id = '125';
Go
etc....
donc les delete sont bien séparés. je ne fai pas de delete sur un bloc
le fichier je le cré via un prog qui determine les enregistrement a supprimé.
pr ce qui est de la lenteur c'est entre le message qui me dit /auteurdetail.aspx?ID=639972 "le contexte de la base de données a changé; il est maintenant 'MABASE' "
et le moment ou le lancement du 1er delete se fait ca met plus de 5min et dc j'arrete le processus
cs_skweeky
Messages postés259Date d'inscriptionmercredi 3 mai 2006StatutMembreDernière intervention11 janvier 20108 7 août 2006 à 14:42
Mais non, c'est pas ce que je voulais dire... Et non il ne fait pas de SELECT.
Est ce qu'il y aurait un autre utilisateur ou une autre application connecté sur la même base de données et qui ferait des opérations sur la même table ?
Sinon essaye de toi même de connecter avec sqlcmd et execute les lignes une à une pour voir le résultat.
Pour avoir des infos sur qui est actuellement connecté la procedure stockée sp_who permet de donner la liste des sessions en cours sur le serveur (Seul les SPID > 50 nous interesse).
yanis7518
Messages postés283Date d'inscriptionmercredi 7 décembre 2005StatutMembreDernière intervention 9 juillet 20103 7 août 2006 à 15:28
ya aussi le fait que j'ai 2/3 fichiers a lancé les un apres les autres et qui font la meme chose mais sur des tables differentes.
au debut pr le 1er fichier c plutot rapide et apres ca deviens plus long pour les fichier suivant (sachant que les tables sont plus importantes les unes que les autres)
j'ai vraiment l'impression que plus la table est grosse plus il met du temps a traité les choses
yanis7518
Messages postés283Date d'inscriptionmercredi 7 décembre 2005StatutMembreDernière intervention 9 juillet 20103 7 août 2006 à 16:22
j'ai une autre question(et precision a apporter)
la base se trouve sur une machine windows serveur jme connecte a la machine en tant qu'admin et je travaille directement dessus. est ce que si d'autre personne se connecte a d'autres bases du serveur SQL en tant qu'admin ca pe provoquer ce ralenti????
yanis7518
Messages postés283Date d'inscriptionmercredi 7 décembre 2005StatutMembreDernière intervention 9 juillet 20103 8 août 2006 à 09:34
deux de mes tables possèdes des clé primaires
sur les deux autres ce n'est pas possibles car le champs utilisé dans le where n'est pas unique et je ne possède aucun champs unique dans ces tables.
Est ce que le champs doit etre unique si je veux l'indexé???