|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
Bonjour,
j ai une question pour un projet qui commence a avoir une base assez conséquente (> 100.000 entrées dans plusieurs tables et des jointures) il s agit d un projet utilisant un moteur de recherche on peut rechercher des inscrits a un concours par ville, prenom, nom ou genre (garcon/fille) + quelques autres criteres dans le moteur aucun champ n est obligatoire faut il mieux créer un index avec ville+nom+prenom+genre ou des index séparés sur nom/prenom/ville/genre voire plusieurs combinaisons pour accélérer les performances?
__________________
telecharger jeux pc |
|
|
00
|
|
|
#2 |
![]() ![]() |
Un index sur genre ne sera probablement pas utilisé par l'optimiseur car il ne comporte que trop peu de valeurs distinctes.
Pour le reste, je te renvoie chez SQLPro qui a donné des principes sur l'optimisation grâce aux index : http://sqlpro.developpez.com/cours/quoi-indexer/ http://sqlpro.developpez.com/optimis...ntenanceIndex/ Et aussi un exemple frappant : http://sqlpro.developpez.com/optimisation/indexation/
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#3 | |||
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
Bonjour,
Merci pour la réponse. j ai réussi à optimiser les temps en rajoutant des index sur les champs de recherche, mais je sèche sur des optimisations supplémentaires pour info , ma db est sur un serveur assez costaud avec 24Go de RAM , ce que je ne comprends pas est que le serveur est presque IDLE (conso de RAM et proc base alors que MySQL mets parfois 2 minutes a venir a bout de certaines requêtes. suite aux remaniements des index, c est mieux, mais j ai toujours des requêtes a 5-6 secondes alors . visiblement les requêtes, dont voici un exemple plus bas , utilisent une table temporaire. J ai reussi a optimiser en indiquant a mysql d utiliser la ram (avec tmp_table_size, max_heap_table_size) Code :
Citation:
Quelles seraient a votre avis les optimisations possibles ? création d'une VIEW ? utilisation de FORCE INDEX ? autre suggestions? Merci d avance.
__________________
telecharger jeux pc |
|||
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Inscription : décembre 2008 Messages : 207 ![]() |
Mon expérience dans les VLDB est pauvre (max de 300k tuples), mais as-tu songé à utiliser un autre support que MySQL pour la recherche ? Un Lucene peut-être ?
Ok c'est autre chose à mettre en place mais ça te permettrait de fournir un outil plus complet d'une part, et de laisser ton SGBD souffler d'autre part. Sinon je rejoins CinePhil pour le genre. En outre si toutes les recherches tu as au minimum ville+nom+prenom , alors oui tu devrais créer un index composite, sinon un index "au détail" |
|
|
10
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
je ne connais pas lucene, mais je vais me renseigner dessus.
Sinon pour info, j utilise deja memcache pour laisser mysql souffler, mais les critieres de recherche étant nombreux (et non obligatoire) , impossible de cacher toutes les recherches. C est par contre les efficace pour requetes de base (ex : affichage de la HP avec les derniers participants, qui sont memcachés 5 minutes)
__________________
telecharger jeux pc |
|
|
00
|
|
|
#6 | ||||
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
il y a tout de meme un probleme que je ne comprends pas, mysql semble mal se débrouiller pour utiliser les ressources de la machine
il est dans les choux vite alors que la machine (serveur ovh mg ssd avec 24 Go de ram et Bi Xeon E5504 en proc) semble etre IDLE Code :
j ai deja mis des valeurs importantes sur les points suivants: Code :
__________________
telecharger jeux pc |
||||
|
|
00
|
|
|
#7 |
![]() ![]() |
Que donne un EXPLAIN de ta requête ?
Y a t-il un index sur PARTICIPANT_ETAPE.id_etape ? Je suppose que PARTICIPANT_ETAPE.supprime et avec_photos_participant sont des booléens ? Si oui, inutile de mettre un index dessus je pense. Ça ne coûte rien et ça économise un petit temps de recherche pour le SGBD : précise de quelle table vient la colonne avec_photos_participant. Bien sûr, il y a des index sur les colonnes de la condition de jointure PARTICIPANT.id_participant et PARTICIPANT_ETAPE.id_participant ? Un index sur PARTICIPANT_ETAPE.date_creation_participant_etape peut aussi être utile puisque c'est la colonne à ordonner. Mais effectivement, avec 24 Go de RAM sur le serveur et seulement 118 783 lignes apparemment traitées, la requête devrait être instantanée. Combien y a t-il réellement de lignes dans les deux tables de cette requête ? Ce qui peut ralentir peut-être, c'est le LIMIT 520, 8.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#8 | ||
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
resultat de explain
Code :
le limit est utilisé dans le cas d une navigation par page. nombre de lignes : PARTICIPANT : 51 213 PARTICIPANT_ETAPE : 102 043
__________________
telecharger jeux pc |
||
|
|
00
|
|
|
#9 |
![]() ![]() |
Ce n'est vraiment pas beaucoup, même sur un simple PC !
Et le EXPLAIN montre que l'index permet de ne traiter que 25457 lignes. La réponse evrait donc être instantanée. Je pense qu'il y a un problème de config serveur. La requête directement exécutée sur le serveur en mode console, si tu peux y avoir accès, ou via phpMyAdmin donne quel temps de réponse ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#10 | ||
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
je soupçonne en effet un problème serveur , j ai notamment cette erreur un peu louche dans mon syslog
Code :
je ne pense pas que ca soit le hardware ou le système qui faute, mais plutôt mysql, malheureusement ma config est tout ce qu il y a de plus normale, j ai grosso modo la même config sur plusieurs autres machines sans soucis. j ai monté le sort_buffer_size pour voir si les choses s arrangent. Edit : est ce que ca te semble pas beaucoup avec entre 200 et 300 connections ouvertes (réseaux) en simultanée ?
__________________
telecharger jeux pc |
||
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Il faut peut être recalculer les stats de la table avec ANALYSE.
Sinon oui je pense que c'est le ORDER BY qui plombe, y a t il un index sur PARTICIPANT_ETAPE.date_creation_participant_etape DESC ? |
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
je comptais faire des analyse/optimize dans la nuit (il me semble que ca bloque en lecture seule les tables donc je prefere le faire quand le trafic sera faible)
oui, il y a bien un index sur PARTICIPANT_ETAPE.date_creation_participant_etape
__________________
telecharger jeux pc |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Pour info créer des index lock les tables aussi.
Je ne sais pas si mysql gère la lecture d'index à l'envère (DESC) de toute façon si la plus part des requêtes trient en DESC c'est intéressant d'avoir l'index déjà trié dans le bon sens, idem pour récupérer des données récentes. Mais je ne t'encourrage pas forcément à le créer direct en prod car je ne suis pas du tout sûr qu'il soit utilisable dans la requête en question. Dis nous ce qu'il en est après la maintenance de cette nuit. |
|
|
00
|
|
|
#14 | |
![]() ![]() |
Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#15 | ||
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
en effet, tres fort trafic
mais je pensais pas que mysql serait submergé a ce point ca fait deux jours qu on est sur les opti , on a meme changé de serveur dans le doute et les perf sont toujours autant mauvaises.. soit les developpeurs se sont plantés dans certains choix (pour l instant je ne vois que le choix d innodb qui pourrait expliquer cela) soit mysql n arrive pas a tirer parti de la machine Code :
je ne sais vraiment plus quoi faire de plus, je vais rajouter un second server en slave pour les requetes en lecture, mais de toute facon , les temps de reponse etant tres long malgré les index, le probleme sera moindre mais restera ;(
__________________
telecharger jeux pc |
||
|
|
00
|
|
|
#16 | ||
![]() ![]() |
Je repose cette question qui pourrait inculper ou disculper MySQL :
Citation:
Citation:
Par contre je ne pense pas que le moteur InnoDB soit en cause.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#17 |
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
je te confirme : ca rame autant connecté en root en local
__________________
telecharger jeux pc |
|
|
00
|
|
|
#18 |
|
Membre confirmé
![]() Inscription : avril 2004 Messages : 496 ![]() |
ce qui m etonne c est que je n en suis pas a mon premier projet mysql , ni a mon premier a fort trafic, je comprends pas pourquoi il y a un tel carnage.
je viens de rajouter un serveur slave pour les lectures, on verra si les choses s arrangent avec le moindre volume
__________________
telecharger jeux pc |
|
|
00
|
|
|
#19 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 950 ![]() |
MySQL n'a jamais été conçu pour un grand nombre de connexion en transactionnel. A partir de 5 utilisateurs effectuant des transactions, il commence à plonger, là ou du PostGreSQL, du SQL Server ou de l'Oracle sont stable jusqu'à quelques dizaines de milliers d'utilisateurs suivant config hard.
Vous ne verrez jamais du MySQL sur des gros sites web marchand. Exemples : TGV.com => Oracle, Fnac.com => SQL Server ... C'est de part sa conception qu'il ne supporte pas la charge transactionnelle. En revanche il est plus à l'aise sur de la lecture ou il n'y a pas de concurrence réelle (pas de verrous bloquant). A lire : http://blog.developpez.com/sqlpro/p9...udre-aux-yeux/ Bref, vous n'avez pas beaucoup d'autres possibilité que de gonfler encore le serveur au niveau physique ou changer de SGBDR ! 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
|
|
|
#20 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Oui mais venomelektro semble déjà avoir des problèmes avec juste un select (sûrement à cause de l'ORDER BY) et rien n'indique dans ses messages que les 300 connexions sont concurrentes, c'est peut être 299 select et 1 update.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com