Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/09/2011, 14h55   #1
Invité de passage
 
Inscription : octobre 2003
Messages : 6
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 6
Points : 0
Points : 0
Par défaut Linux MSSQL et lenteur

Bonjour,
je suis tombé sur un problème que je n'arrive pas à expliquer et j'aurais besoin de vos lumières...
je possède 2 serveurs 1 web et 1 sql serveur qui constituent un serveur web
le web (linux) attaque la bdd via mssql (freetds)
tout se passe bien dans le meilleur des mondes sauf dans un cas, en effet plus mes requêtes sont longues plus les réponses du serveur le sont, vous allez me dire c'est normal mais je n'en ai pas l'impression.
par exemple un select sur 2 champs avec genre un in (.........) si le in fait plus de 1000 caractères la réponse revient quelques secondes plus tard (une centaine de ligne) alors que sont temps de réponse en local sont instantanées...
j'ai pensé dans un premier temps a un souci de connexion entre les serveurs mais ce n'est pas ca.
de plus c'est exponentiel genre 500 lignes 10 sec , 1000 ligne 30sec 2000 80 etc... alors que la même requête en local est retournée instantanément.
Ca me donne l'impression d'être mis dans un buffer et de rester en attente...
Pour info si je mets ma grosse requête dans une procedure et que j'appelle celle-ci via mon script web le retour est instantanée...
dès que je transfert une grosse quantité de datas ca tombe en fait.

merci a vous

Franck
la_bouleaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 19h02   #2
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Citation:
tout se passe bien dans le meilleur des mondes sauf dans un cas, en effet plus mes requêtes sont longues plus les réponses du serveur le sont, vous allez me dire c'est normal mais je n'en ai pas l'impression.
Non, ce n'est pas normal. SGBDR n'est pas synonyme de lenteur.

Citation:
par exemple un select sur 2 champs avec genre un in (.........) si le in fait plus de 1000 caractères la réponse revient quelques secondes plus tard (une centaine de ligne) alors que sont temps de réponse en local sont instantanées...
j'ai pensé dans un premier temps a un souci de connexion entre les serveurs mais ce n'est pas ca.
de plus c'est exponentiel genre 500 lignes 10 sec , 1000 ligne 30sec 2000 80 etc... alors que la même requête en local est retournée instantanément.
Ca me donne l'impression d'être mis dans un buffer et de rester en attente...
Pour info si je mets ma grosse requête dans une procedure et que j'appelle celle-ci via mon script web le retour est instantanée...
En fait vous faites passer votre chaîne de requête à travers le réseau ... or les réseau est ce qu'il y a de plus lent dans une infrastructure, après les disques mécaniques ...

Ensuite il faut que SQL Server parse le IN, le trie, ce qui prend du temps CPU, et si le nombre de valeurs est grand, peut prendre plusieurs secondes ...

En supposant que vous n'utilisez pas EXEC sp_executesql, à chaque fois que vous soumettez une requête, celle-ci doit d'abord être comparée à toutes celles qui sont déjà dans le cache et dont les filtres sont "en dur" : vous voyez le boulot.
Ensuite, comme la requête n'est pas trouvée, elle doit être compilée, puis exécutée, et enfin le résultat doit passer de nouveau à travers le réseau.
Vous le dites vous même : quand vous passez par une procédure stockée le résultat revient dans un temps correct.

Vous rejoignez en cela l'idée des SGBDR dits "épais", qui vous évitent ce tracas.

D'autre part, j'évoque ici les raisons pour lesquelles il est bien mieux d'utiliser des procédures stockées.

Enfin si vous voulez voir où se situe la lenteur, vous pouvez utiliser les statistiques du client

@++
__________________
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
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h19.


 
 
 
 
Partenaires

Hébergement Web