> Tous les forums > Forum des Webmasters
 Optimiser requête lourde (Copying to tmp table ?)Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
jerryone3
  Posté le 19/09/2011 @ 18:30 
Aller en bas de la page 
Petit astucien

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 :



[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 !

Publicité
christele
 Posté le 20/09/2011 à 08:30 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour,

Vouloir faire une telle réorganisation sur des bases MySql, parait d'aprés ce que tu dis, limite raisonnable.
Tu donnes l'impression d'avoir mal choisi ton langage et tes bases de données.
De plus tes requétes paraissent tordues, ce qui ressemble a des tables mal conçues.
Bref j'aurais optée pour du langage C voir C++.

Mais bon la n'est pas le sujet, je penses que tu devrais faire tourner un PHP en tache de fond
(donc lancé par un AJAX. Pas un cron, ce n'est pas util.)
Bases toi sur ce model que j'ais conçue, et qui est bien util

http://www.fox-infographie.com/ajax_lance_php.php

La base étant pour la durée, résolue par
set_time_limit(10); dans tes boucles de traitement.


jerryone3
 Posté le 20/09/2011 à 10:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Hello,

Le langage de BDD n'est pas mon choix mais celui de la boite.

Pour ma part, je pense qu'à terme un Oracle sera nécessaire.

par contre, faire ça avec PHP n'est absolument pas un problème ;)

En tout cas, j'ai déjà un cron qui tourne la nuit pour préparer le terrain pour la requête... Sans ça ça tournait pas du tout.

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 de ton aide christele ;)

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
31,17 €XIAOMI Mi TV Stick à 31,17 €
Valable jusqu'au 05 Août

Cdiscount propose en exclusivité la nouvelle version de la clé HDMI XIAOMI Mi TV Stick à 31,17 €. Cette clé HDMI à brancher sur votre TV possède un processeur quadricoeur, 1 Go de RAM et 8 Go d'espace de stockage, le WiFi et le bluetooth. Elle intègre un Chromecast, est compatible Dolby et DTS et est fournie avec une télécommande qui peut être pilotée à la voix. Elle tourne sous Android TV 9.0 et vous allez pouvoir voir facilement Prime Video, Netflix, Disney+, YouTube, Spotify, Moltov, ... sur votre TV Full HD.


> Voir l'offre
89,09 €SSD Crucial MX500 1 To à 89,09 € livré
Valable jusqu'au 05 Août

Amazon Espagne propose actuellement le SSD Crucial MX500 1 To à 84,50 € (avec la TVA ajustée). Comptez 4,59 € pour la livraison en France soit un total de 89,09 € livré. On le trouve ailleurs à partir de 105 €. Ce SSD salué par la critique par son rapport qualité prix imbattable offre des débits de 560 Mo/s en lecture et 510 Mo/s en écriture. Il est garanti 5 ans. 

Vous pouvez utiliser votre compte Amazon France sur Amazon Espagne et il n'y a pas de douane.


> Voir l'offre
20,29 €Décapeur thermique TECCPO 2000W + 4 buses métalliques à 20,29 € avec le code 8RTEFLCV
Valable jusqu'au 06 Août

Amazon fait une promotion sur le décapeur thermique TECCPO 2000W (de 50 à 600°) avec 4 buses métalliques qui passe à 20,29 € grâce au code promo 8RTEFLCV. On le trouve habituellement autour de 30 €.

Pour profiter de l'offre, passez la souris sur le bandeau Message promotionnel et cliquez sur le bouton Appliquer à côté des 30% de réduction. Vous pouvez aussi utiliser le code 8RTEFLCV sur la page de paiement. Le prix passera à 20,29 €.


> Voir l'offre

Sujets relatifs
Requête SQL - PHP via PDO
Requete SQL avec champ nul
Optimiser pour iphone ipad
affichage table par odre alphabétique
Suppression champs table selon critère
requête BETWEEN PHP
Différence ...< div > VS < table >
probleme de requete sql
2 champs liés à une table
Urgent : optimisation de table
Plus de sujets relatifs à Optimiser requête lourde (Copying to tmp table ?)
 > Tous les forums > Forum Forum des Webmasters