SQLCMD + DELETE [Résolu]

yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 7 août 2006 à 12:25 - Dernière réponse : yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Derniè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
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
cs_skweeky
Messages postés
261
Date d'inscription
mercredi 3 mai 2006
Dernière intervention
11 janvier 2010
- 7 août 2006 à 18:11
3
Merci
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 !

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration

Merci cs_skweeky 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_skweeky
cs_skweeky
Messages postés
261
Date d'inscription
mercredi 3 mai 2006
Dernière intervention
11 janvier 2010
- 7 août 2006 à 13:02
0
Merci
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.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Commenter la réponse de cs_skweeky
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 7 août 2006 à 13:08
0
Merci
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
Commenter la réponse de yanis7518
cs_skweeky
Messages postés
261
Date d'inscription
mercredi 3 mai 2006
Dernière intervention
11 janvier 2010
- 7 août 2006 à 13:20
0
Merci
Pendant l'execution du DELETE il n'y aurait rien d'autre qui bloquerait ?


Par exemple un SELECT fait sur le même table ?

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Commenter la réponse de cs_skweeky
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 7 août 2006 à 13:22
0
Merci
nan ds mon fichier je n'ai ke des delete

mais le sqlcmd ne fait -il pas un select * de la table pr la charger en memoire???
Commenter la réponse de yanis7518
cs_skweeky
Messages postés
261
Date d'inscription
mercredi 3 mai 2006
Dernière intervention
11 janvier 2010
- 7 août 2006 à 14:42
0
Merci
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).

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Commenter la réponse de cs_skweeky
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 7 août 2006 à 15:19
0
Merci
alors pour les personnes connecté je peut te le dire ya personne a par moi

j'ai quand meme verifier au cas ou LOL

jvien de tester avec plusieur ligne apparement ben ca marche normalment j'ai collé tout un bloc de 10 delete et ca a pris kelke seconde
Commenter la réponse de yanis7518
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 7 août 2006 à 15:28
0
Merci
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
Commenter la réponse de yanis7518
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 7 août 2006 à 16:22
0
Merci
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????
Commenter la réponse de yanis7518
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 8 août 2006 à 09:34
0
Merci
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é???

en tout cas merci pour ton aide
Commenter la réponse de yanis7518
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 8 août 2006 à 11:51
0
Merci
est ce que en faisant une transaction ca irai beaucoup plus vite???

si oui pourrai tu m'expliquer comment on ecrit une transaction. avec un exemple stp
Commenter la réponse de yanis7518
cs_skweeky
Messages postés
261
Date d'inscription
mercredi 3 mai 2006
Dernière intervention
11 janvier 2010
- 8 août 2006 à 12:57
0
Merci
Un index n'est pas nécessairement unique, il ne doit pas contenir trop de doublons tout de même.


Avec une transaction çà ne changera rien aux perf çà sera peut être pire même.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
Commenter la réponse de cs_skweeky
yanis7518
Messages postés
283
Date d'inscription
mercredi 7 décembre 2005
Dernière intervention
9 juillet 2010
- 8 août 2006 à 12:59
0
Merci
bon alors j'ai pas de solution. en tout cas merci pour ton aide skweeky c'est sympa.
Commenter la réponse de yanis7518

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.