Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
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 10/03/2011, 21h04   #1
Nouveau Membre du Club
 
Inscription : janvier 2003
Messages : 93
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 93
Points : 39
Points : 39
Par défaut Lenteurs accès site internet

Bonsoir,

J'utilise SQL Serveur + IIS + PHP pour un site internet.
Jusqu'a très récemment, SQL SRV était installé sur la meme machine que IIS.
Par soucis de sécurité, nous avons déplacé la base de donnée sur un autre serveur.
Le problème est que lorsque j'accède maintenant à mon site celui-ci est très lent alors qu'avant ca fonctionnait ...
Je ne sais pas d'ou cela peut provenir, avez-vous une idée ?
Merci d'avance
Mathieu
mathieu77186 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 07h53   #2
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Très bonne démarche, SQL SERVER doit être installé sur un serveur qui lui est entièrement dédié...

Essayez d'analyser vos lenteurs, temps d’exécution des requêtes (sql profiler...)
Latence réseau intervenant désormais lors des allez retour IIS->SQL SERVER puis SQL SERVER->IIS.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h51   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
n'auriez vous pas par hasard des requêtes SQL lancées à l'intérieur de boucles PHP ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h30   #4
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
n'auriez vous pas par hasard des requêtes SQL lancées à l'intérieur de boucles PHP ?
Typique des problèmes de performances des applications actuelles...
30 petites requetes envoyées au server alors qu'une seule plus grosse suffirait..

Résultat: on prend trente fois la latence du réseau... au lieu d'une

Vos problèmes apparaissent précisement car maintenant que vos serveurs sont séparés, les données transitant entre SQL SERVER et IIS subissent les latences du réseau d'ou l'interet de faire le moins d'appel possible en rationnalisant ces appels et en limitant au maximum le volume des informations échangées...

Pour celà les ORM sont une catastrophe: texte de requetes enormes, allez retour incessants pour instancier des objets enormes seulement pour afficher le nom et le prenom de l'utilisateur+ ce satané lazy loading.

J'entends encore l' "architecte .NET" d'une grande SSII avec LINQ : "c'est génial avec le lazy loading plus besoin de gérer ce que l'on doit appeler... on ne demande les données que si on en a besoin..." oui mais bonjour le résultat!


Sur ce... excusez moi ce long monologue...

Et pardon Mathieur ne le prends pas pour toi
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 15h42   #5
Membre actif
 
Inscription : octobre 2006
Messages : 353
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 353
Points : 158
Points : 158
Hm, en théorie, entre le serveur web et le serveur BDD, c'est du très haut débit.
Oui avoir une requête au lieu de 30, c'est mieux, mais pour moi, sauf réseau pourri, ça ne peut pas vraiment avoir un impact lourd sur les perfs du site.

Pour ma part, autant je suis extrêmement attentif aux flux client-serveur, autant pour les flux serveur web-serveur BDD, je me "contente" de ne pas faire de superflu niveau requêtes, sans chercher l'optimisation maximale.

Bon après, les appels serveur BDD dans des boucles, je suis ok pour dire que c'est à proscrire autant que possible (et dans 99,99% des cas c'est possible)

En l'occurrence je pense que plusieurs questions s'imposent :
- qu'en est-il du réseau entre tes deux serveurs ?
- les lenteurs sont-elles systématiques : sur toutes les pages, toutes les requêtes, quelque soit la configuration du poste client etc...
nox75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 16h33   #6
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
Hm, en théorie, entre le serveur web et le serveur BDD, c'est du très haut débit.
Oui avoir une requête au lieu de 30, c'est mieux, mais pour moi, sauf réseau pourri, ça ne peut pas vraiment avoir un impact lourd sur les perfs du site.
Certes mais vous sous-estimez, je crois, le nbr de requetes que peuvent générer les développeurs pour l'affichage d'une seule page.

Pour ma part, le record est de 6500 requetes pour une page...
Je vous accorde c'est de la bêtise pure mais ne serait ce que 200/300 requete/pages ce n'est pas rare or même avec une latence très faible, avouez qu'il est difficile d'afficher la page en moins de 3/4 de secondes...


Ceci dis nous parlons dans le vide est c'est ma faute...

Attendons les réponses de l'initiateur de ce 'topic'.

J'ajouterais: qu'entendez vous pas lent?
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 16h45   #7
Membre actif
 
Inscription : octobre 2006
Messages : 353
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 353
Points : 158
Points : 158
C'est vrai que là je bosse avec du LINQ (2 Entity, en 3.5 c'est pas glop...) et ça génère un grand nombre de requêtes.

Mais effectivement, ça n'est pas parce que c'est moins sensible que les flux client-serveur qu'il faut bâcler cette partie. Je suis bien d'accord.

L'objet de mon message était plutôt (et nous sommes donc encore une fois d'accord ) de dire qu'il nous faut plus d'indications, et préciser le problème avant de commencer à fouiller le code PHP pour diminuer les appels en base.

PS : pour info, à combien avez-vous pu réduire les 6500 ? Ca venait d'où ?
nox75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 17h17   #8
Nouveau Membre du Club
 
Inscription : janvier 2003
Messages : 93
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 93
Points : 39
Points : 39
Merci beaucoup pour toutes vos réponses, quel beau débat !
Toutes les pages sont très longues à atteindre, et certaines pages ont très peu de requêtes ...
Juste une beau petit "SELECT" qui va aller chercher une liste d'enregistrement dans une table avec 1 ou 2 jointures...
Je continue de chercher ...

Merci encore,

mathieu
mathieu77186 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 18h25   #9
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Tracer la longueur des fonction dans lesquelles vous faites vos requêtes vous serez fixé....


Pour les 6500...de mémoire j'etais tombé à 6...

Pages affichant des résultats médicaux pour un patient le long de la journée...

Table html générée dans des foreach imbriqués dans des foreach imbriqués dans des foreach avec des SQLCONNEction.open()dans les foreach...

A oui j'oubliais le code "propre" avec des fonctions dans les couches prenant en entrée la PK d'une table:
GetImageOFClient(idclient integer)
GetNomOFClient(idclient integer)
GetPrenomOFClient(idclient integer)
etc...
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 18h27   #10
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Pour infos j'ai quitté la boite depuis... c'est le directeur technique en place qui avait fait l'appli et la "modelisation"....
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 15h07   #11
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par iberserk Voir le message
Tracer la longueur des fonction dans lesquelles vous faites vos requêtes vous serez fixé....


Pour les 6500...de mémoire j'etais tombé à 6...

Pages affichant des résultats médicaux pour un patient le long de la journée...

Table html générée dans des foreach imbriqués dans des foreach imbriqués dans des foreach avec des SQLCONNEction.open()dans les foreach...

A oui j'oubliais le code "propre" avec des fonctions dans les couches prenant en entrée la PK d'une table:
GetImageOFClient(idclient integer)
GetNomOFClient(idclient integer)
GetPrenomOFClient(idclient integer)
etc...
Hé bien, je dirais que vous avez la solution sous les yeux...
A la différence d'une requête SQL ramenant toutes les données en un seul aller retour entre client et serveur, la succession d'appel de fonction que vous avez dans votre code provoque un appel d'AR à chaque donnée.
Sachant que les round-trip, c'est ce qu'il y a de plus couteux dans une solution distribuée (par ce que Ethernet n'est pas un protocole déterministe), vous avez devant vous un développement des plus stupide !

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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 16h16   #12
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : novembre 2004
Messages : 1 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
la succession d'appel de fonction que vous avez dans votre code provoque un appel d'AR à chaque donnée
Ce n'était que l'explication du nombre insolent de requête qu'effectuait l'application que j'avais audité...

Peut-être le code de mathieu77186 ne possède pas les même travers...
iberserk 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 00h04.


 
 
 
 
Partenaires

Hébergement Web