Démon mysql qui prend tout le proc - SQL/NoSQL - Programmation
Marsh Posté le 05-11-2009 à 18:58:28
logguer moins ?
partitionner la table ?
ajouter des index ajoute un surcout à l'insertion, c'est pas toujours intéressant
Marsh Posté le 05-11-2009 à 20:21:21
All right. Alors le partitionnement, je crois que ça fonctionne depuis MySQL 5 uniquement, ça vaudrait surement le coup que je passe à cette version pour tenter le coup. Logger moins malheureusement c'est impossible.
Et pour ce qui est des index, je vais essayer d'en mettre moins, si c'est contreproductif. Merci pour ta réponse
Marsh Posté le 05-11-2009 à 20:43:21
c'est un *poil* agressif ta signature
sans indiscretion , tu fais quoi pour réussir a mettre à genoux une bdd juste en logant ? Est ce que tu n'aurai pas intéert a faire juste du log dans un fichier , puis relecture au fil de l'eau ?
Marsh Posté le 05-11-2009 à 21:08:31
flo850 a écrit : c'est un *poil* agressif ta signature |
Ca peut être une idée ouaip. Le problème c'est qu'il faudrait changer toute l'infra du serveur en question donc ça demanderait un changement de fond assez lourd.
Par ailleurs, c'est un serveur qui sera très très fortement sollicité à l'avenir (des dizaines de milliers d'insert et de select par jour)
Marsh Posté le 05-11-2009 à 21:13:36
c'est pas tant que ça
100 000 insert par jours, ça fait quoi , 10 par seconde ?
sinon, il faut aussi te poser la question du dimensionnement du serveur. Mais dnas tous les cas , une mise a jour logiciel fera pas de mal
Marsh Posté le 05-11-2009 à 21:20:26
Yep Merci pour le tip. Et sinon, le serveur en question était sur une VM, à voir si le fait de le mettre seul sur une machine physique ne peut pas améliorer les choses
Marsh Posté le 05-11-2009 à 21:23:00
on ne mets JAMAIS une bdd sur une VM
ça plombe les perfs d'une force ( à cause des accès disques)
Marsh Posté le 05-11-2009 à 21:33:02
fait un test avec la base de données sur le serveur physique
Marsh Posté le 05-11-2009 à 23:08:26
flo850 a écrit : on ne mets JAMAIS une bdd sur une VM |
Je sais pas sur quoi tu bases cette affirmation mais moi j'ai pas de scrupules à mettre de l'oracle et du sql server en production sur des VM : tout est question de dimensionnement et de besoins
Tiens un peu de lecture : http://blogs.vmware.com/performanc [...] s-why.html
Marsh Posté le 05-11-2009 à 23:21:28
Pour revenir au problème, je pense qu'il faudrait déjà isoler le problème. Le CPU est bouffé par mysqld, OK, mais sous quels conditions ? Quelles sont les commandes exécutées ?
Passer de MyISAM vers du InnoDB n'était pas forcément la meilleure des solutions, pour le peu que je comprend de ton problème c'est beaucoup d'insertion et de lecture : MyISAM aurait mieux fait l'affaire que InnoDB, à partir du moment où tu n'as pas besoin des fonctionnalités d'InnoDB
Après je ne suis pas un expert MySQL, mais disons qu'il devrait exister des pistes pour décomposer ce que fais ce fameux process, à l'instar de ce que permet Oracle ou SQL Server : bien dissocier la charge CPU entre ton application (tes fameux INSERT et SELECT) et la base (écritures de log, journalisation, etc.)
En résumé : identifier et isoler les points de contusion (applicatif ? base de données ?)
Ensuite la/les solution(s) viendront d'elles-mêmes : tuning SQL, paramétrage plus fin de la base via my.cnf, upgrade hardware, paramétrage OS, etc.
Marsh Posté le 05-11-2009 à 23:38:04
Quelques pistes si tu arrives à isoler la cause de ton soucis :
Si problème d'insertion : mysql en ISAM possède une fonctionnalité intéressante pour le bulk insert, voir http://dev.mysql.com/doc/refman/4. [...] layed.html
Si problème de selection : grande chance que ce soit un plan d'exécution foireux
Cela peut aussi être un hardware et/ou OS mal dimensionnés
Si problème avec le fonctionnement même de mysql : revoir la configuration du moteur, pour peu que tu aies des paramètres par défaut pas adaptés (journalisation des requêtes SQL, etc.)
Après je sais pas si avec MySQL tu peux faire des trucs extrêmement pointus comme le permettent d'autres moteurs (taille des blocs, nombre de curseurs, taille des buffers...)
Marsh Posté le 05-11-2009 à 18:09:24
J'ai un blème avec un serveur Apache/PHP/MySQL, la version de MySQL est la 4.1.22. En gros, je fais de multiples accès à ma base avec des index placés de manière assez basique (en gros dès que je fais un select en base avec un WHERE, je rajoute l'index au niveau de la colonne associée au WHERE) mais qui me semblent efficaces.
Seul problème, à force de rajouter des lignes dans ma table de logs, et de rechercher des infos dans cette même table de logs, le processus mysqld finit par prendre 50 à 60% du proc à lui tout seul (dans le cas de tests poussés) là où il n'en prenait que 5% grand max quand la table en question était vide.
Les tables sont toutes en MyISAM, j'ai tenté de les changer en InnoDB, et ça change rien. Quelqu'un saurait-il me dire comment optimiser ce point, si tant est qu'on puisse faire quelque chose ?
---------------
Atari 520 ST 256 Ko