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 :
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Quoi qu'il en soit, existe-t-il un moyen de se débarrasser de cette étape ? En augmentant un cache, ou autre...
Merci !
Partager