IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

MYSQL : Premier SELECT très long


Sujet :

Requêtes MySQL

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    J'ai bien accès à la configuration de MySQL

    J'ai mis key_buffer_size à 32M

    C'est pareil, même après l'optimisation.
    Le disque gratte à chaque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT COUNT(*) AS nb_lignes
    FROM product

  2. #22
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par re12 Voir le message
    Le disque gratte à chaque
    Que veux-tu dire par là ?

    Tu disais plus haut qu'il s'agit d'une machine virtuelle. Dans une baie de virtualisation bien dimensionnée ?

    Combien de mémoire vive est affectée à cette machine virtuelle ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    Alors la VM est installé sur le disque de ma machine.

    1Go de mémoire vive, une debian avec MySQL 5.1.61
    J'utilise VirtualBox

  4. #24
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1 Go de mémoire pour un SGBD, ce n'est pas beaucoup. Si en plus cette RAM est partagée entre la machine principale et la machine virtuelle, pas étonnant que Debian swappe !

    Je pensais à un serveur virtuel sur une baie VMWare.

    Au fait, pourquoi avoir virtualisé cette machine sur ta machine ?
    Elle est sous Winbug ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  5. #25
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    même si c'est le cas c'est pas le soucis... vilain linuxien normand...

    c'est vrai qu' 1go c'est pas beaucoup... surtout pour brasser une bd qui contient une table avec 20M tuples et des jointure dessus...

    donc augmente déjà ça...

    après une question qui me turlupine... tu as mis quoi en index de clé primaire dans cette colossale table? parce que même si mysql s'y reprend à plusieurs fois pour générer le count... on parle toujours de product ou d'une autre table?

    le show table status dit quoi pour la taille d'index?

    et oui précise ce que tu appelle "le disque gratte" car si sa se trouve si tu as un vieux DD, il est juste en train de mourir, ce qui expliquerait ses contre-performances...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    Alors je viens de passer à 3Go.

    Je passe à 15s pour le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) as total
    FROM product

    Je l'ai virtualité car c'est pour une application en cours de développement.
    Je travaille sur Mac.

    Le show table status donne :


    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
    		"Name": "product",
    			"Engine": "InnoDB",
    			"Version": 10,
    			"Row_format": "Compact",
    			"Rows": 16156729,
    			"Avg_row_length": 43,
    			"Data_length": 705691648,
    			"Max_data_length": 0,
    			"Index_length": 0,
    			"Data_free": 714080256,
    			"Auto_increment": 16156434,
    			"Create_time": "2012-05-21 15:27:09",
    			"Update_time": null,
    			"Check_time": null,
    			"Collation": "utf8_unicode_ci",
    			"Checksum": null,
    			"Create_options": "",
    			"Comment": ""
    Ce que j'entend par le disque gratte c'est qu'il y a une lecture qui est faite sur le disque.

  7. #27
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    <troll>un mac qu'elle idée, on parle de vrais ordinateurs ou serveurs</troll>

    bon on avance... la virtualisation jouant énormément sur le reste...

    Citation Envoyé par re12 Voir le message
    "Max_data_length": 0,
    "Index_length": 0,
    bizarre ces 2 valeurs... elles devraient pas être nulles...

    à savoir qu'innodb est beaucoup plus lent que mysiam de par son aspect relationnel... si le besoin d garantir les transaction sur cette table n'est pas avéré autan la passer en myisam... tu y gagneras temps d'accès encore un peu...

    oublie pas d'augmenter la taille du buffer d'index au début de la section [mysqld] vu que les réglage innodb sont à part...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  8. #28
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Si tu n'as pas besoin du nombre exact d'enregistrements, tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TABLE_ROWS As total FROM information_schema.TABLES WHERE   TABLE_NAME="product"

  9. #29
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    Malheureusement j'ai besoin du nombre exact de ligne

  10. #30
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Et quand vous faites un explain sur la requete il utilise bien l'index ?

  11. #31
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    Voici le résultat de l'explain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXPLAIN SELECT COUNT(*) AS total
    FROM product

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
    1	SIMPLE	product	index	NULL	PRIMARY	4	NULL	16156729	Using index

  12. #32
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    à priori il utilise l'index...

    donc essaye de gonfler encore la configuration de ta VM si tu peux...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  13. #33
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    J'ai passé la vm 4 à core, 8Gb de ram.

    Mais il y a encore et toujours cette lecture du disque dur au premier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COUNT(*) AS total
    FROM product
    La requête met 9 secondes à s'exécuter

  14. #34
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Il fait combien de Mo votre index en fait ?

  15. #35
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    c'est normal, ton index ne représente pas que la taille des données mais aussi la taille du btree qui les organise... donc avec environ 20M tuplues tu va te retrouver avec un index qui doit faire entre 50 et 200M selon l'ordre du btree qu'utilise mysql (ils le dis pas... 2 mini mais on ne sait pas si l'ordre augmente pour limiter la taille sur des gros index) donc ils faudra plusieurs lecture pour le passer en revue...

    essaye de doubler les valeur innodb...

    après comme je l'avais déjà dit soit tu devras passer à un sgbd qui as des possibilité de prendre, avec des réglages de bases des tables plus conséquentes... ou tu devras peut-être revoir ton modèle de données et scinder ta table horizontalement selon des critères bien choisis...

    même si tu n'as pas un dédié ça ne passera pas pour les requêtes... vu que 9 secondes, ce n'est pas acceptable pour une simple requête de comptage...
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  16. #36
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    D'après ce que je comprend ça n'est qu'à la 1ere execution que le select met 9 secondes à s'executer.

    Donc... c'est le moment où le SGBD met en RAM l'index qui est sur disque (après plus de problème au niveau de l'execution vu que tout ce passe depuis la RAM).

  17. #37
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    On est bien d'accord que c'est trop long pour une simple requête.

    Voici les stats de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Données		740		Mio
    Index		        148,7 	Mio
    Concernant le choix d'un autre SGBD que me conseilleriez vous ? postresql souffre apparemment du même problème

  18. #38
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Nan mais là remettez en cause :
    - votre matèriel
    - la VM
    - le combo mac / linux

    Je ne pense pas que cela vienne de MySql.

  19. #39
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    hmm,

    je viens de relire le thread et un truc ne me semble pas précis.

    Vous dites avoir mis 3go puis 8go de ram a votre VM.

    Soites. Mais avez-vous, par la même occasion, impacté les paramètres de MySql (comme le suggérait Eric) ?

    Car juste mettre de la ram sans rien touché ne va pas servir à grand chose.

    Vu que votre table est en innobdb : http://www.mysqlperformanceblog.com/...fer_pool_size/

  20. #40
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2005
    Messages : 35
    Points : 5
    Points
    5
    Par défaut
    Effectivement je n'ai pas augmenté la config linux derrière.

    Je vais faire le test sur une machine dédiée, car effectivement c'est peut-être un problème de matériel.

Discussions similaires

  1. Driver JDBC et Oracle - select très long
    Par mgax07 dans le forum JDBC
    Réponses: 5
    Dernier message: 20/02/2014, 10h03
  2. [Perfs] Insert+select très long
    Par farenheiit dans le forum Administration
    Réponses: 39
    Dernier message: 07/08/2009, 14h36
  3. Démarrage de windows vraiment très long
    Par krfa1 dans le forum Windows XP
    Réponses: 16
    Dernier message: 23/10/2005, 12h37
  4. delete très long
    Par slefevre01 dans le forum Oracle
    Réponses: 7
    Dernier message: 06/10/2005, 13h16
  5. Très long texte dans Quick Report - Comment faire ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/08/2005, 22h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo