Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
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, 18h28   #1
Nouveau Membre du Club
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 33
Points : 33
Par défaut Optimiser requête lourde (Copying to tmp table ?)

Hello à vous

je suis en ce moment en train de concevoir un outil permettant de générer un tableau de statistiques assez malléable, avec une requête MySQL qui s'adapte en fonction des besoins de l'utilisateur.

La masse de données dans la base est conséquente (comprendre des tables de plusieurs millions de lignes) et en constante expansion. Aussi, je me suis très vite heurté à des problèmes de performances assez drastiques.

Notez qu'il s'agit d'une requête avec plusieurs left / inner join, avec un group by sur deux champs pas nécessairement de la même table, et un order by également sur deux champs pas nécessairement dans la même table.

Donc, j'ai commencé par améliorer mes index, créer des index doubles là où c'était nécessaire / utile... Pas concluant. Optimisation des données de my.cnf à l'aide de tuning primer... je mets les données telles qu'elles sont après optimisation :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
[mysqld]
character-set-server            = latin1
init-connect                        ='SET NAMES  latin1'
default-character-SET           = latin1
user                                            = mysql
port                                            = 3306
socket                                          = /var/run/mysqld/mysqld.sock
pid-file                                        = /var/run/mysqld/mysqld.pid
log-error                                       = /var/log/mysql/mysqld.err
basedir                                         = /usr
datadir                                         = /var/lib/mysql
skip-locking
key_buffer                                      = 128M
max_allowed_packet                      = 16M
table_cache                             = 512
sort_buffer_size                        = 8M
net_buffer_length                       = 8K
read_buffer_size                        = 1M
read_rnd_buffer_size            = 512K
myisam_sort_buffer_size         = 8M
LANGUAGE                                        = /usr/share/mysql/english
query_cache_size                = 64M
query_cache_limit               = 1M
max_connections                 = 50
join_buffer_size                = 1M
thread_cache_size               = 64
tmp_table_size                  = 64M
max_heap_table_size             = 64M
Le fait est que ça ne réduit pas. En observant, on se rend compte que la requête reste longtemps en statut "Copying to tmp table". Je suppose que c'est le fait d'écrire la requête sur le DD, non ?

Quoi qu'il en soit, existe-t-il un moyen de se débarrasser de cette étape ? En augmentant un cache, ou autre...

Merci !
JerryOne3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 09h55   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Montre nous la requête, le résultat de son EXPLAIN et la structure des tables impliquées.
Il y a peut-être tout simplement moyen d'améliorer la requête.
__________________
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 10h13   #3
Nouveau Membre du Club
 
Inscription : novembre 2008
Messages : 78
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 78
Points : 33
Points : 33
Hello,

j'ai réussi à résoudre une bonne partie du problème en installant un index triple. Si jamais au fur et à mesure que les données rentrent je rencontre de nouvelles difficultés, je rouvrirai le sujet.

Merci CinePhil
JerryOne3 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web