2010-01-28 3 views
3

Je suis sur le point de commencer à développer un système de journalisation pour une implémentation future dans une application PHP courante afin d'obtenir des statistiques de chargement et d'utilisation à partir d'une base de données MYSQL.Enregistrement des requêtes mysql

La statistique sera plus tard utilisé pour obtenir des informations sur les appels de base de données par seconde, les temps de requête, etc.

Bien sûr, cela ne sera utilisé que lorsque l'application est en phase de test, car il sera très certainement la cause un peu de charge supplémentaire elle-même. Cependant, ma question la plus importante en ce moment est de savoir si je devrais utiliser MYSQL pour consigner les requêtes, ou opter pour un système basé sur des fichiers. Je suppose que ce serait un peu mal à la tête de créer quelque chose qui permettrait des écritures à partir de plusieurs endroits lors de l'utilisation d'un système basé sur des fichiers pour gérer les journaux?

Comment le feriez-vous?

Répondre

3

MySQL avait déjà construit la journalisation dans Chapter 5.2 du manuel les décrit. Vous serez probablement intéressé par le journal de requête générale (toutes les requêtes), le journal de requête binaire (requêtes qui modifient les données) et le journal lent (requêtes qui prennent trop de temps, ou n'utilisent pas d'index).

Si vous insistez pour utiliser votre propre solution, vous devrez écrire une couche intermédiaire de la base de données que traversent tous vos appels DB, ce qui peut gérer les aspects temporels. Quant à l'endroit où vous les écrivez, si vous êtes en développement, cela n'a pas trop d'importance, mais l'idée d'utiliser une seconde DB n'est pas mauvaise. Vous n'avez pas besoin d'utiliser une base de données entièrement distincte, pas plus que d'utiliser une instance différente de MySQL (sur une machine différente, ou juste une instance différente utilisant un port différent). J'utiliserais une seconde instance de MySQL à la place du système de fichiers - vous obtiendrez toutes vos bonnes fonctions SQL comme SUM et AVG pour analyser vos données.

1

Si vous faites des tests sur MySQL, vous devriez stocker les résultats dans une base de données différente telle que Postgres, de cette façon vous n'augmenterez pas la charge avec vos opérations.

3

Si tout ce qui vous intéresse est une analyse à long terme, en temps non réel, activez la journalisation des requêtes de MySQL. Il y a des tonnes d'outils pour faire l'analyse sur les logs de requête (à la fois réguliers et à requête lente), vous donnant des informations sur les temps d'exécution, les lignes moyennes retournées, etc. Semble être ce que vous recherchez.

5

Utilisez le journal, qui montrera l'activité des clients, y compris toutes les requêtes:

http://dev.mysql.com/doc/refman/5.1/en/query-log.html

Si vous avez besoin des statistiques très détaillées sur la durée de chaque requête prend, utilisez le journal lent avec un long_query_time de 0 (ou d'un autre temps suffisamment court):

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

utilisez ensuite http://www.maatkit.org/ pour analyser les journaux au besoin.

0

Je suis d'accord avec macabail mais j'ajouterais seulement que vous pourriez coupler cela avec un travail cron et un script simple pour extraire et générer des statistiques que vous pourriez vouloir.