web-dev-qa-db-fra.com

Réglage de la réponse du serveur Web -

J'ai cette même question sur StackOverflow et on m'a conseillé de la poser ici dans l'espoir d'obtenir plus d'informations. Voici la question:

Je suis dans une situation plutôt défavorable. J'ai aspdotneststore application e-commerce avant et addon de recherche appelé VibeTrib. Je n'ai pas de code source pour les deux. Le magasin fonctionnant sur StoreFront et VibeTrib propose près de 250 000 produits. Nous avons aussi beaucoup de filtres. J'ai parlé à des représentants de ViTrib et ils veulent de l'argent supplémentaire pour pouvoir optimiser les requêtes qu'ils utilisent. L'argent dont ils ont besoin n'a pas d'importance, mais le problème est que je ne leur fais plus confiance. Ce que nous avons est très différent de ce qui est annoncé.

Pour raccourcir la longue histoire. J'exécute le magasin sur Amazon AWS maintenant, et quel que soit le serveur de base de données (MsSQL 2012) que j'ai défini (j'ai essayé 32 Go RAM instances de monstres), il est lent. La recherche Ajax utilise la recherche en texte intégral et affiche les mots clés de recherche assez rapidement, mais une fois la recherche effectuée (pour afficher tous les résultats), elle est toujours lente. !!!

Il y a quelque chose que je pourrais faire pour accélérer la vitesse de mon côté? J'ai le contrôle total sur l'instance EC2 (serveur Web Server 2012 et IIS 8). Puis-je configurer IIS pour qu'il intervienne dans la recherche et en cache une partie? J'espérais cacher au moins quelques mots les plus courants.

Mon meilleur pari est IIS 8 :)

Y a-t-il de l'aide dans mon cas?

Merci

1
Vedran Maricevic.

À la base, il s’agit presque certainement d’un problème de base de données. La première chose à vérifier est les index sur les tables. Si la recherche en texte intégral est rapide et que SELECT est lent, il est probable que des opérations JOINS pouvant tirer parti des index, voire même des index composites.

Vous devrez profiler l'application (exécuter une trace à l'aide de SQL Profiler ) et observer la valeur Durée des requêtes. Vous pouvez même afficher le plan d'exécution de la requête . L'avantage de cette configuration est que vous n'avez pas besoin d'accéder à la source de l'application; vous ajoutez simplement des index à la base de données. Une indexation appropriée fera toute la différence dans les grands ensembles de données.

3
dartonw

Vous pouvez prendre des mesures pour optimiser la base de données. Par exemple, vous pouvez avoir des champs d’indexation de texte intégral qui augmentent considérablement le temps de réponse des requêtes de recherche SQL (en particulier s’il inclut des corps de texte de taille moyenne à grande).

Au-delà de cela, vous devez examiner le problème. Sans accès au code source, c'est difficile, mais il me semble que si la vitesse est trop lente, le code n'est probablement pas très efficace. Il se peut qu'il crée des centaines, voire des milliers de requêtes de base de données individuelles pour de petits éléments de données au lieu de les regrouper. Si vous ne pouvez pas modifier le code source, vous ne pouvez rien faire pour changer cela.

Commencez donc par examiner la structure de la base de données et essayez de vous assurer qu'elle est entièrement indexée, etc. Si elle est toujours trop lente, vous devez soit accéder au code source afin de pouvoir modifier le logiciel vous-même ou trouver un produit différent.

J'espère que ça aide.

Indexation des liens:

Documentation officielle

Blog de performance MySQL

Optimisation MySQL

P.S. Les recherches SQL sont extrêmement rapides - essayer de conserver les résultats du cache IIS ne serait pas nécessairement très productif. Si votre base de données est bien indexée, cela est probablement dû au nombre de requêtes, par opposition au temps nécessaire pour répondre à chaque requête. N'oubliez pas que chaque nouvelle requête effectuée par le code entraîne des frais généraux, tels que le temps nécessaire pour établir la connexion, les actions en lecture/écriture, etc.

2
Marvin