|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2008 Messages : 202 ![]() |
Bonjour,
J'ai un programme qui doit executer des grosses requêtes d'extraction (indépendantes) sur une base SQL Server. Pour gagner en perf, j'ai eu la (mauvaise ?) idée de découper le travail en plusieurs threads qui se chargent chacun d'une requête. Le CPU est un 4 coeur. J'ai donc créé 4 threads maxi. Mes questions sont les suivantes: - Est ce une bonne approche ? - Y a t il une optimisation à apporter également dans SQL-Server pour tirer profit des architectures multi-coeur ? - J'ai parfois cette erreur: Expiration du délai d'attente. Le délai d'attente s'est écoulé avant la fin de l'opération ou le serveur ne répond pas. Je pense que la requête est trop longue et qu'au bout d'un moment, sql server jette l'éponge. Existe t il un moyen d'augmenter la valeur de timeout ? Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
commandtimeout sur la commande si vous êtes en ADO...
qu'utilisez vous pour attaquer votre bdd? |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2008 Messages : 202 ![]() |
Merci mais j'utilise SqlConnection et SqlCommand.
|
|
|
00
|
|
|
#4 |
|
Membre éclairé
![]() Jérémy Ingénieur développement logiciels Inscription : avril 2005 Messages : 751 ![]() |
Attention si tu fais du multri-thread, tu vas exécuter tes quatre requêtes en même temps, ce qui est ton but, cela ne pose pas de problème à SQL serveur d'exécuter plusieurs requêtes (heureusement). Par contre si tu as des expirations du délais d'attente c'est que tes requêtes doivent exploiter les mêmes données et que ses données doivent être verrouillées par une autre requête. Pour pouvoir t'aider d'avantage, il nous faut la structure de la base et les requêtes que tu veux exécuter.
A plus |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() |
sqlconnection, sqlcommand=ADO.NET :-)
SqlCommand.CommandTimeOut.... Donnez nous plus détails sur les requète, que font'elle, qu'entendez vous par extraction?? comme le dis jm au cube :-) attention à ce que tes requêtes ne ciblent pas les même données... |
|
|
00
|
|
|
#6 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
Je suis pas complètement d'accord avec ça... visiblement, il s'agit de requête SELECT... Si deux requêtes ont besoin des même données, une seule lecture sera effectuée, et les données seront "envoyées" aux deux requêtes, ça peut donc être un gain de perfs ... Pour ce qui est des timeouts, il y a aussi peut être moyen d'optimiser les requêtes ! Quels temps de réponse observes-tu pour les requêtes lancée depuis SSMS par exemple ? |
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() |
Avec quoi n'êtes vous pas d'accord?
Je ne dis que ce n'était pas performant, je dis que si les deux SELECT (comme vous dites...) pointent sur les même tables/données les deux requetes seront plus longues (mais la sommes des deux le serait plus encore...) ce qui peu expliquer qu'il doivent augmenter un peu le CommandTimeOut de sa SqlCommand ADO... |
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() |
Citation:
|
|
|
|
00
|
|
|
#9 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
D'autre part, même si chaque requête engendre une demande de lecture, elles seront mutualisées au niveau du moteur de stockage, pour n'en faire plus qu'une et ainsi optimiser le tout. Donc le fait que les requêtes ciblent les mêmes données ne sera pas forcément un handicap, voire même pourra être un avantage. Là où je suis d'accord avec vous par contre, c'est qu'on a trop peu d'informations pour répondre aux questions posées. Il est en effet difficile de résoudre un problème sans en connaitre la cause, et il faudrait donc commencer par savoir pourquoi ces requêtes sont lentes ! Mais globalement, je pense qu'il sera beaucoup plus rentable de chercher à optimiser les requêtes (réécriture, indexation,...) plutôt que de chercher à paralléliser les requêtes. Surtout que SQL server est capable de tirer parti d'un multi-coeur, et peut même paralléliser l’exécution d'une requête donnée, s'il estime que c'est avantageux. |
|
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() |
Citation:
Il a de grande chances en effet que les requête ne soient pas optimales... En revanche même optimisées le timeout par défaut de la commande ADO est de 30 secondes si je ne m'abuse... cela risque de faire juste si le volume des données et/ou la complexité sont important. Alors est-ce une bonne approche boby62423? si vous ne multithreadez pas vos appels de requètes la seconde ne se lancera qu'après la fin de l'execution de la première... Comme vous l'explique aieeeuuuuu la seconde, si elle est basée sur les même données sera plus rapide car les données seront en cache... Peut-on aussi voir vos requêtes ou est-ce indiscret? |
|
|
|
00
|
|
|
#11 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
Citation:
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Citation:
)
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com