Optimiser requête lourde (Copy to tmp table?)
jerryone3
Messages postés
58
Statut
Membre
-
jerryone3 Messages postés 58 Statut Membre -
jerryone3 Messages postés 58 Statut Membre -
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 ?
Quoi qu'il en soit, existe-t-il un moyen de se débarrasser de cette étape ? En augmentant un cache, ou autre...
Merci !
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 :
[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 !
A voir également:
- Optimiser requête lourde (Copy to tmp table?)
- Optimiser son pc - Accueil - Utilitaires
- Table ascii - Guide
- Table des matières word - Guide
- Qwerty to azerty - Guide
- Exact audio copy - Télécharger - Conversion & Extraction