Contacts

Comment éteindre le journal des demandes lentes. Se connecter à MySQL. Analyse des données de profilage de requête

Quertiements de profilage dans MySQL Utilisé pour évaluer les performances de votre application. Lorsque vous développez des applications multimédias et grandes, il est nécessaire de traiter des centaines de demandes distribuées selon votre code, qui sont exécutées chaque seconde. Aucune technique de profilage de requête n'est très difficile à trouver en raison de la souffre de la vitesse de votre application.

Quelles sont les questions lentes dans MySQL?

L'ampleur des demandes lentes dans MySQL est un journal, notant des demandes lentes et potentiellement problématiques. MySQL par défaut prend en charge une telle fonctionnalité, mais elle est désactivée. En utilisant Configuration de certaines variables de serveur, nous pouvons spécifier les demandes que nous sommes intéressés. Le plus souvent, nous avons besoin de requêtes nécessitant une certaine quantité de temps sur leur exécution ou leurs demandes qui manipulent de manière incorrecte les index.

Définition du profilage variable

Variables de base pour la mise en place de journaux de demande:

Slow_Query_log g Slow_query_log_file g long_query_time g / s log_queries_not_utilisateur_indexes g min_exaMined_row_limit g / s

Commenter: G - Variables globales, Variables du système S

  • slow_query_log - Valeur booléenne comprenant le journal
  • sLOW_QUERY_LOG_FILE est un chemin absolu avec le fichier journal. Le propriétaire du catalogue devrait être un utilisateur mysqld.Et le répertoire doit avoir des permis corrects pour la lecture et l'écriture. Le plus souvent, le démon mysql fonctionne au nom de l'utilisateur mysql.

Pour vérifier, exécutez les commandes suivantes:

PS -EF | Grep bin / mysqld | Cut -D "" -F1

La sortie de la commande vous donnera le nom de l'utilisateur actuel et de l'utilisateur MySQLD. Exemple de configuration de répertoire / var / journal / mysql:

CD / var / journal sudo mkdir mysql sudo chmod 755 mysql sudo chown mysql: mysql mysql

  • long_query_time - heure en secondes pour vérifier la durée de la requête. Par exemple, avec 5, chaque demande de plus de 5 secondes sera enregistrée dans le journal.
  • log_queries_not_utilisateur_index - Valeur booléenne, comprend des demandes d'enregistrement qui n'utilisent pas d'index. Ces demandes sont très importantes lors de l'analyse.
  • min_examined_row_limit - Indique la valeur minimale du nombre de séries de données pour analyse. La valeur de 1000 ignore les demandes qui renvoient moins de 1000 lignes de valeurs.

Vous pouvez définir ces variables dans le fichier de configuration MySQL, de manière dynamique via une invite de commande MySQL GUI ou MySQL. Si les variables sont répertoriées dans le fichier de configuration, le serveur les installera au prochain lancement. Habituellement, ce fichier est situé à / etc, / usr, /etc/my.cnf ou /etc/mysql/my.cnf. Voici les commandes de recherche de fichiers de configuration (parfois, vous devriez élargir la recherche d'autres répertoires racines):

Trouver / etc -Name my.cnf trouve / usr -name my.cnf

Lorsque vous trouvez un fichier, ajoutez les variables requises dans la section:

; ... SLOW-Query-journal \u003d 1 Requête lente-journal-file \u003d /var/log/mysql/localhost-slow.log long_query_time \u003d 1 ligne de journal-requêtes-net-utilisation-index; Il n'y a pas de valeur

Les modifications n'auront lieu qu'au prochain lancement MySQL, si vous avez besoin d'un changement dynamique de paramètres, utilisez d'autres méthodes d'installation de variable:

MYSQL\u003e SET GLOBAL SLOW_QUERY_LOG \u003d "ON"; MySQL\u003e SET GLOBAL SLOW_QUERY_LOG_FILE \u003d "/var/log/mysql/localhost-slow.log"; MySQL\u003e SET GLOBAL LOG_QUERIES_NOT_USTION_IDEXES \u003d "ON"; mysql\u003e Séance Session Long_Query_Time \u003d 1; mySQL\u003e SET SESSION MIN_EXAMINE_ROW_LIMIT \u003d 100;

Vérifiez que les valeurs des variables peuvent être les suivantes:

Mysql\u003e montrer des variables globales comme "Slow_Query_Log"; MySQL\u003e Afficher les variables de session comme "long_query_time";

L'inconvénient principal des valeurs d'installation dynamique sera perdue au démarrage du système. Il est recommandé de spécifier des paramètres importants dans la configuration MySQL.

La note: La syntaxe du paramètre dynamique paramètre via la commande SET et à l'aide du fichier de configuration est légèrement différente, telle que SLOW_QUERY_LOG / SLOW-QUERY-LOG. Dans la documentation officielle du SGBD, vous trouverez une description complète de la syntaxe. Le format d'option-File est utilisé pour le fichier de configuration, Nom de la variable système - noms de variable lorsqu'il définit dynamiquement des valeurs.

Génération de données pour le profilage de la demande

Nous avons examiné les principaux éléments de configuration de profilage, créez maintenant des demandes qui vous intéressent. Cet exemple a été utilisé sur le serveur MySQL en cours d'exécution sans paramètres de journal antérieur. Des exemples de demandes peuvent être exécutés via des commandes MySQL GUI et DBMS. Lors de la surveillance du journal de la requête de la fente, deux fenêtres avec connexion sont souvent ouvertes: une pour démarrer des demandes, une autre - pour afficher le journal.

$\u003e mysql -u -p mysql\u003e créer de la base de données profil_sampling; Mysql\u003e utiliser profile_sampling; Mysql\u003e Créer des utilisateurs de table (ID Tinyint TIXYINT CLES PRIMAIRES Auto_Increment, Nom Varchar (255)); MySQL\u003e Insert dans les valeurs des utilisateurs (nom) ("Walter"), ("Skyler"), ("Jesse"), ("Hank"), ("Walter Jr."), ("Marie"), ( "Saul"), ("Gustavo"), ("Hector"), ("Mike"); mysql\u003e SET GLOBAL SLOW_QUERY_LOG \u003d 1; MySQL\u003e SET GLOBAL SLOW_QUERY_LOG_FILE \u003d "/var/log/mysql/localhost-slow.log"; mySQL\u003e SET GLOBAL LOG_QUERIES_NOT_USTION_IDEXES \u003d 1; Mysql\u003e set long_query_time \u003d 10; mysql\u003e Ensemble min_examined_row_limit \u003d 0;

Nous avons maintenant une base de données avec des données de test. Nous avons lancé le profilage, mais le temps de réponse et le nombre de lignes que nous avons spécifiquement installées. Pour voir le journal, utilisez l'équipe:

CD / var / journal / mysql ls -l

Selon l'idée, le fichier journal ne doit pas encore exister, car nous n'avons pas apporté aux demandes de la base de données. S'il existe, cela signifie que le profilage a été configuré plus tôt, ce qui peut déformer les résultats de l'exemple. Effectuer dans la console:

Mysql\u003e utiliser profile_sampling; MySQL\u003e Sélectionnez * à partir des utilisateurs où ID \u003d 1;

Notre demande utilise l'index de clé primaire de la table. La demande a travaillé très rapidement à l'aide de l'index, de sorte que dans le journal, cela ne devrait pas refléter. Veuillez noter que le fichier journal ne doit pas être créé.

Maintenant, procédez comme suit:

MySQL\u003e Sélectionnez * à partir des utilisateurs où nom \u003d "Jesse";

Ici, nous n'avons pas utilisé d'index. Maintenant, nous devons voir cette requête dans le journal:

Sudo chat /var/log/mysql/localhost-slow.log # heure: 140322 13:54:58 # [Email protégé]: root @ localhost # Query_Time: 0.000303 LOCK_TIME: 0.000090 Rowsent_Sent: 1 Row_Examiné: 10 Utilisez Profile_sampling; Définir horodatage \u003d 1395521698; Sélectionnez * à partir des utilisateurs où nom \u003d "JESSE";

Considérer un autre exemple. Soulevez le nombre de lignes en réponse et suivez la demande suivante:

Mysql\u003e Ensemble min_examined_row_limit \u003d 100; MySQL\u003e Sélectionnez * à partir des utilisateurs où nom \u003d "Walter";

La demande n'affectera pas le journal, car nous n'avons pas dépassé 100 lignes en réponse à la demande.

La note: Si les données ne sont pas affichées dans le journal, il faut d'abord envisager les facteurs suivants. Le premier est le droit au répertoire où le fichier journal est stocké. Le groupe et l'utilisateur doivent correspondre à l'utilisateur MySQLD, les droits doivent être - chmod 755. Le second - il est possible de profiler auparavant configuré. Supprimez toutes les valeurs existantes des variables de profilage du fichier de configuration et redémarrez le serveur ou définissez les variables de manière dynamique. Si vous avez utilisé la méthode dynamique, vous partirez et revenez à la console MySQL.

Analyse des données de profilage de requête

Considérons l'exemple ci-dessus:

# Temps: 140322 13:54:58 # [Email protégé]: root @ localhost # Query_Time: 0.000303 LOCK_TIME: 0.000090 Rowsent_Sent: 1 Row_Examiné: 10 Utilisez Profile_sampling; Définir horodatage \u003d 1395521698; Sélectionnez * à partir des utilisateurs où nom \u003d "JESSE";

Nous voyons ici:

  • Le moment où la demande a été lancée
  • L'utilisateur qui a exécuté la demande
  • Horaires d'ouvertures
  • Durée de verrouillage
  • Nombre de chaînes sélectionnées
  • Nombre de chaîne analysée

Ces données sont très utiles, car avec leur aide, nous pouvons trouver et éliminer la cause du ralentissement du système. De plus, le développeur ou l'administrateur de MySQL sera toujours en mesure de voir des demandes de problèmes et de noter qu'ils les trouvent beaucoup plus rapides ici que d'apprendre l'application de code d'application. Avec un profilage long, vous pouvez suivre les conditions de fonctionnement à basse vitesse.

En utilisant mysqldumpslow

Connectez-vous en constante enregistrement des données, en règle générale, il écrit beaucoup plus qu'il en a lu. Avec une grande taille de journal, il devient problématique de le lire. Le MySQL comprend l'outil MySQLDUMDUMLOW, qui aide à maintenir l'intégrité du journal. Le programme lui-même est combiné avec MySQL (sur les systèmes Linux). Pour l'utiliser, exécutez la commande nécessaire et transmettez le chemin d'accès au fichier journal:

Sudo mysqldumpslow -t 5 -s à /var/log/mysql/localhost-slow.log.log

Il existe un certain nombre de paramètres pour aider à configurer la sortie de la commande. Dans l'exemple ci-dessous, nous verrons les cinq dernières demandes triées par une durée moyenne. En conséquence, la lecture du journal devient beaucoup plus pratique. (La sortie est modifiée pour afficher les valeurs réelles dans le journal):

Count: 2 TIME \u003d 68.34S (136S) LOCK \u003d 0.00S (0S) rangées \u003d 39892974.5 (79785949), [Email protégé] Sélectionnez PL.PL_TITTLE, P.PAGE_TITTLE DE PAG INIGN INIGHIQUE PAGELINKS PL ON PL.PL_NAMESPACE \u003d p.Page_Namespace \u003d n ...

Ce que nous voyons sont:

  • Compte - le nombre de demandes dans le journal
  • Temps - Temps de requête moyen et total
  • Lock - Table de verrouillage de table
  • Lignes - nombre de lignes sélectionnées

La commande élimine les données numériques et de chaîne de la demande, c'est-à-dire des requêtes avec la même situation où l'état sera considéré comme le même. Grâce à cet instrument, vous n'avez pas à parcourir constamment le journal. En raison du grand nombre de paramètres de commande, vous pouvez trier la sortie car elle vous convient. Il existe également le développement de développeurs tiers ayant des fonctionnalités similaires, telles que PT-Query-Digest.

Demandes de pilotes

Il devrait être versé à un autre outil qui vous permet de casser des requêtes complexes. Le plus souvent, vous devez prendre une demande sur le journal, puis l'exécuter directement dans la console MySQL. Vous devez d'abord activer le profilage, puis exécuter la requête:

MySQL\u003e Définir le profilage de la session \u003d 1; Mysql\u003e utiliser profile_sampling; MySQL\u003e Sélectionnez * à partir des utilisateurs où nom \u003d "Jesse"; Mysql\u003e montrer des profils;

Après avoir activé le profilage, Afficher les profils affichera la fixation de la table Query_id et SQL Expression. Trouvez la requête correspondante et suivez la demande suivante (remplacez le # à votre requête):

Mysql\u003e Sélectionnez * à partir d'informations_schema.profiling où diery_id \u003d #;

Un exemple de sortie:

SEQ State Durée 1 Démarrage 0.000046 2 Vérification des autorisations 0.000005 3 Tables d'ouverture 0.000036

État - étape dans le processus d'exécution de la requête, Durée. - Démarrer la durée en secondes. Cet outil n'est pas aussi souvent utilisé, mais il peut parfois être extrêmement utile pour déterminer la raison de la réduction de la vitesse de la demande.

Description de la colonne détaillée:

Une description détaillée des étapes:

La note: Cet outil ne doit pas être utilisé dans le mode de fonctionnement du serveur, à l'exception de l'analyse de requêtes spécifiques.

Vitesse de vitesse de vitesse

La dernière question est la manière dont le profilage est affecté par la vitesse du serveur dans son ensemble. Dans le mode produit du serveur, il est possible d'utiliser une telle journalisation en toute sécurité, elle ne doit pas affecter la CPU sur les I / O. Néanmoins, il convient de faire attention à la taille du fichier journal, il ne devrait pas devenir prohibitif. De plus, de l'expérience, je voudrais noter que définir la valeur de la variable long_query_Time coûte égale à 1 seconde et plus.

Important: Vous ne devez pas utiliser l'outil de profilage - Définir le profilage \u003d 1 - Pour enregistrer toutes les demandes, c'est-à-dire. La variable générale_log dans le produit et à de grandes charges n'est pas recommandée à utiliser.

Conclusion

Le profilage de la requête peut vous aider à mettre en évidence une demande de problèmes et dans l'évaluation globale des performances. Le développeur peut également explorer comment les demandes de MySQL fonctionnent à ses applications. L'outil MySQLDUMPLOWSLOW aide à afficher et à traiter le journal de la demande. Après avoir défini des demandes de problèmes, vous devrez les configurer pour une performance maximale.

Le profilage de la requête MySQL est une méthode utile pour analyser la performance globale des applications basée sur la base de données. Lorsque vous développez des applications multimédias et grandes, en règle générale, des centaines de demandes sont distribuées sur une base de code importante et la base de données traite de nombreuses demandes par seconde. Sans requêtes de profilage, il devient très difficile de déterminer la conclusion et les raisons de la survenue d'applications étroites. Certaines méthodes de profilage de requêtes utiles sont décrites dans ce manuel à l'aide des outils MySQL intégrés.

MYSQL SLOW QUESTES

Le journal de demande lente MySQL (ou le journal de requête lente) est un journal dans lequel MySQL envoie des demandes lentes et potentiellement problématiques.

Cette fonctionnalité est livrée avec MySQL, mais la valeur par défaut est désactivée. MySQL détermine quelle demande d'ajouter à ce journal à l'aide de variables spéciales vous permettant de profiler une demande basée sur les exigences de performance de l'application. Typiquement, des requêtes sont apportées à ce journal, dont le traitement prend plus de temps et des requêtes qui sont des index incorrects.

Profilage variable

Variables de serveur de base Pour configurer le journal des demandes MySQL lentes sont:

slow_query_log Global
Slow_query_log_file Global
Long_query_time global / sessional
log_queries_not_utilisateur_indexes global
min_exaMined_row_limit Global / Sessional

sLOW_QUERY_LOG est une variable logique pour activer et désactiver les demandes lentes.

sLOW_QUERY_LOG_FILE est le chemin absolu du fichier journal de requête. Le répertoire de fichiers doit appartenir à l'utilisateur MySQLD et avoir des droits de lecture et d'écriture appropriés. Le démon MySQL sera probablement lancé comme mySQL, mais pour vous assurer de démarrer la commande dans le terminal Linux:

pS -EF | Grep bin / mysqld | Cut -D "" -F1

La sortie affiche l'utilisateur actuel et l'utilisateur MySQLD.

cD / var / journal
mkdir mysql
Chmod 755 mysql
Chown mysql: mysql mysql

  • long_query_time - heure en quelques secondes pour vérifier la longueur de la requête. Si 5 dans le journal enregistre toutes les demandes, dont le traitement prend plus de 5 secondes.
  • log_queries_not_uce_indexes - une valeur logique qui détermine si vous devez enregistrer des demandes qui n'utilisent pas d'index. Lors de l'analyse, ces demandes sont importantes.
  • min_examined_row_limit - Définit le nombre minimum de lignes pour analyse. Avec la valeur de 1000, toutes les demandes qui analysent moins de 1000 lignes seront ignorées.

Les variables de serveur MySQL peuvent être installées dans le fichier de configuration MySQL ou de manière dynamique à l'aide de la ligne de commande utilisateur ou de la ligne MySQL. Si les variables sont installées dans le fichier de configuration, elles seront enregistrées lorsque le serveur est redémarré, mais pour les activer, vous devez redémarrer le serveur. Le fichier de configuration MySQL est généralement dans /etc/my.cnf ou /etc/mysql/my.cnf. Pour trouver un fichier de configuration, entrez (vous devez peut-être développer la recherche d'autres répertoires racines):

trouver / etc -name my.cnf
Trouver / usr -name my.cnf

Après avoir trouvé un fichier de configuration, ajoutez les variables requises à la section:


….
Requête lente-journal \u003d 1
Slow-Query-journal-file \u003d /var/log/mysql/localhost-slog.log.log.log
Long_query_time \u003d 1.
Demandes de journal-NUT-UTILISATION-INDEXES

Pour modifier les modifications, vous devez redémarrer le serveur. Si les modifications doivent être activées immédiatement, définissez les variables de manière dynamique:

mYSQL\u003e SET GLOBAL SLOW_QUERY_LOG \u003d "ON";
MySQL\u003e SET GLOBAL SLOW_QUERY_LOG_FILE \u003d "/var/log/mysql/localhost-slow.log";
MySQL\u003e SET GLOBAL LOG_QUERIES_NOT_USTION_IDEXES \u003d "ON";
mysql\u003e Séance Session Long_Query_Time \u003d 1;
mySQL\u003e SET SESSION MIN_EXAMINE_ROW_LIMIT \u003d 100;

Pour vérifier les valeurs des variables:

mysql\u003e montrer des variables globales comme "Slow_Query_log";
MySQL\u003e Afficher les variables de session comme "long_query_time";

L'une des lacunes du changement dynamique des variables MySQL est que les variables seront perdues lorsque le serveur est redémarré. Par conséquent, toutes les variables importantes qui doivent être enregistrées doivent être ajoutées au fichier.

Demande génération de profilage

Maintenant, vous connaissez les réglages des journaux des demandes lentes. Essayez de générer les données de demande de profilage.

Noter: L'exemple ici est exécuté sur l'instance d'exécution de MySQL sans configuration des journaux des demandes lentes. Ces requêtes de test peuvent être effectuées via l'interface graphique ou l'invite de commande MySQL.

Lors de la surveillance d'un journal de requête lente, il est utile d'ouvrir deux fenêtres terminales: une connexion pour envoyer des opérateurs MySQL et la seconde pour afficher le journal de la requête.

Accédez au serveur MySQL à l'aide de la console en tant qu'utilisateur avec des privilèges Super Admin. Pour commencer, créez une base de données de test et une table, ajoutez-y des données fictives et allumez le journal de demande de créneau.

Noter: Idéalement, cet exemple est préférable de fonctionner dans un support sans autre application utilisant MySQL pour éviter d'encombrer le journal de la requête.

$\u003e Mysql -u -p
mySQL\u003e Créer une base de données profil_sampling;

Mysql\u003e utiliser profile_sampling;


Mysql\u003e Créer des utilisateurs de table (ID Tinyint TIXYINT CLES PRIMAIRES Auto_Increment, Nom Varchar (255));


MySQL\u003e Insert dans les valeurs des utilisateurs (nom) ("Walter"), ("Skyler"), ("Jesse"), ("Hank"), ("Walter Jr."), ("Marie"), ( "Saul"), ("Gustavo"), ("Hector"), ("Mike");


mysql\u003e SET GLOBAL SLOW_QUERY_LOG \u003d 1;


MySQL\u003e SET GLOBAL SLOW_QUERY_LOG_FILE \u003d "/var/log/mysql/localhost-slow.log";


mySQL\u003e SET GLOBAL LOG_QUERIES_NOT_USTION_IDEXES \u003d 1;


Mysql\u003e set long_query_time \u003d 10;


mysql\u003e Ensemble min_examined_row_limit \u003d 0;

Vous avez maintenant une base de données de test et une table avec une petite quantité de données. Log Demandes lentes incluses. Nous avons délibérément installé le temps de traitement élevé et éteint le nombre de lignes. Pour afficher le journal, entrez:

cD / var / log / mysql
Ls -l

Jusqu'à présent, il ne devrait y avoir aucun journal dans le dossier dans le dossier, car il n'y avait aucune demande pour le moment. Si un tel journal est déjà présent, cela signifie que la base de données a déjà rencontré des demandes lentes puisque vous avez inclus prise en charge du journal des demandes lentes. Cela peut déformer les résultats de cet exemple. Retournez à l'onglet MySQL et lancez-vous:

mysql\u003e utiliser profile_sampling;
MySQL\u003e Sélectionnez * à partir des utilisateurs où ID \u003d 1;

La demande exécutée récupère simplement les données et utilise le premier indice de clé de la table. Cette demande était rapide et utilisée l'index, il n'est donc pas enregistré dans le journal des demandes de création d'emplacement. Retournez dans le répertoire et assurez-vous que le journal de la demande n'a pas été créé. Revenez maintenant à la fenêtre MySQL et courez:

mysql\u003e

Cette requête n'utilise pas l'index. Désormais dans le journal /var/log/mysql/localhost-slow.log, une telle entrée doit apparaître:

# Heure: 140322 13:54:58

utiliser profile_sampling;
Définir horodatage \u003d 1395521698;

Un autre exemple. Augmentez le nombre minimum de lignes pour analyse et envoyer une telle demande:

mysql\u003e Ensemble min_examined_row_limit \u003d 100;
MySQL\u003e Sélectionnez * à partir des utilisateurs où nom \u003d "Walter";

Les données ne seront pas ajoutées au journal, car moins de 100 lignes ont été analysées lors de la demande.

Noter: Si les données n'ont pas été ajoutées au journal, vous devez vérifier plusieurs facteurs. Tout d'abord, vérifiez les droits de répertoire dans lesquels le journal est créé. Il devrait appartenir à l'utilisateur / groupe mysqld et avoir des privilèges Chmod 755. Ensuite, vous devez vérifier s'il n'y a pas de requêtes lentes sur le serveur, qui remplacent vos paramètres. Réinitialisez les valeurs par défaut pour supprimer toutes les variables de requêtes lentes dans le fichier de configuration et redémarrer le serveur. Vous pouvez également définir de manière dynamique les variables globales à leurs valeurs standard. Si vous apportez des modifications de manière dynamique, quittez le système et connectez-vous à MySQL pour mettre à jour les paramètres.

Demande d'analyse des données de profilage

Considérez de telles données:

# Heure: 140322 13:54:58
# [Email protégé]: root @ localhost
# Query_Time: 0.000303 Lock_Time: 0.000090 Rowsent_Sent: 1 Row_Examiné: 10
utiliser profile_sampling;
Définir horodatage \u003d 1395521698;
Sélectionnez * à partir des utilisateurs où nom \u003d "JESSE";

Cette entrée affiche:

  • Demande de temps d'exécution
  • Qui l'a envoyé
  • Combien de temps la demande a été traitée
  • Longueur
  • Combien de lignes ont été retournées
  • Combien de lignes ont été analysées

Ceci est utile car toute demande qui enfreint les exigences de performance spécifiées dans les variables tombe dans le journal. Cela permet au développeur ou à l'administrateur de surveiller rapidement les demandes de non-travail. De plus, les données de profilage de la demande vous aideront à déterminer quelles circonstances réduisent les performances des applications.

En utilisant mysqldumpslow

Le profilage peut être inclus dans les applications BD pour fournir un flux de données modéré.

Au fur et à mesure que la taille du journal augmente, il devient difficile de démonter toutes les données et les demandes de problèmes sont facilement perdues. MySQL propose l'outil mysqldumplow qui aide à éviter ce problème en séparant la Société des demandes lentes. Le fichier binaire est associé à MySQL (sous Linux) afin que vous puissiez simplement exécuter la commande:

mysqldumpslow -t 5 -s à /var/log/mysql/localhost-slow.log.log

Pour configurer la sortie, la commande peut recevoir divers paramètres. Dans l'exemple ci-dessus, les 5 premières demandes triées par intermédiaire du temps de requête seront affichées. De telles lignes sont plus lisibles, ainsi que groupées sur demande.

Count: 2 TIME \u003d 68.34S (136S) LOCK \u003d 0.00S (0S) rangées \u003d 39892974.5 (79785949), [Email protégé]
Sélectionnez pl.pl_title, p.page_title
De la page P.
Rejoindre intérieur Pagelinks pl
Sur pl.pl_namespace \u003d p.page_namespace
Où p .page_namespace \u003d n

La sortie reflète ces données:

  • Compte: combien de fois la demande a-t-elle été entrée dans le journal.
  • Temps: temps moyen et total de la requête (entre parenthèses).
  • Verrouillage: heure de blocage de la table.
  • Rangées: le nombre de lignes retournées.

La commande élimine les valeurs numériques et de chaîne, car les mêmes demandes avec différentes conditions sont perçues comme identiques. L'outil MySqLDumpslow élimine la nécessité de parcourir constamment le journal des demandes lentes, permettant ainsi des contrôles automatiques réguliers. Les paramètres de commande MYSQLDUMLUMPLOW vous permettent d'effectuer des expressions complexes.

Demandes de pilotes

Un autre outil de profilage sur lequel devrait être rappelé est un outil pour une ventilation complexe des demandes. Il vous permet d'identifier les demandes de problèmes dans un journal de requête lente et de l'exécuter dans MySQL. Tout d'abord, vous devez activer le profilage, puis exécuter la requête:

mySQL\u003e Définir le profilage de la session \u003d 1;
Mysql\u003e utiliser profile_sampling;
MySQL\u003e Sélectionnez * à partir des utilisateurs où nom \u003d "Jesse";
Mysql\u003e montrer des profils;

Après allumage, Afficher les profils montrera une table qui lie Query_id avec une expression SQL. Trouvez Query_ID qui répond à la requête démarrée et lancez la demande suivante (remplacez # votre requête_Id):

mysql\u003e Sélectionnez * à partir d'informations_schema.profiling où diery_id \u003d #;

L'équipe retournera la table:

Seq. État Durée.
1 départ. 0.000046
2 vérification des autorisations 0.000005
3 tables d'ouverture 0.000036

L'état est une étape dans le processus d'exécution d'une requête et la durée est nécessaire pour terminer cette étape en secondes. Ce n'est pas un outil très utile, mais cela peut aider à déterminer quelle partie de l'exécution de la requête provoque le plus grand retard.

Noter: Cet outil ne doit pas être utilisé dans l'environnement de production.

Performance du journal de demande actuelle

Il reste seulement de comprendre comment le bordereau de demandes lentes affecte la productivité. En général, pour exécuter le journal des requêtes lentes dans l'environnement de production est en sécurité; Ni la CPU, ni I / S ne devraient en souffrir. Cependant, vous devez avoir une stratégie de surveillance de la taille du journal afin que le journal soit trop volumineux pour le système de fichiers. En outre, lors du lancement d'une société de demandes lentes dans l'environnement de production, définissez Long_Query_Time Value 1 ou supérieure.

Conclusion

Le journal des demandes lentes peut aider à identifier les demandes de problèmes et à évaluer la performance globale des demandes. Dans le même temps, le développeur peut avoir une idée détaillée de la manière dont les requêtes MySQL sont exécutées dans l'application. L'outil MySqldumpSlow vous permet de contrôler les journaux des demandes lentes et de les inclure facilement dans le processus de développement. Décidez des demandes de problèmes, vous pouvez optimiser le traitement des demandes d'accroître la productivité.

Mots clés:

Concept

Journaux de serveur (journal du serveur, journal de serveur) - Fals stockés sur le serveur contenant des informations d'information système, ainsi que loger toutes les données possibles sur le visiteur de la ressource Web.

Les journaux sont utilisés par les administrateurs système pour analyser les visiteurs.Étudier les schémas du comportement de certains groupes d'utilisateurs, ainsi que la réception de diverses informations à leur sujet, telles que: le navigateur utilisé, l'adresse IP, les données sur la position géographique du client et bien plus encore. Par l'analyse, de cette manière, vous pouvez en savoir plus sur l'accès non autorisé au site, plus précisément, de savoir qui a été produit exactement et transmettre les données sur ce cas aux autorités compétentes.

Les données dans le fichier journal, sous sa forme pure, ne seront pas claires aux utilisateurs ordinaires qui seront vus dans tout cela juste un ensemble de caractères dans l'ordre incompréhensible. Mais pour les administrateurs système et les développeurs Web, il s'agit de texte assez lisible et d'informations assez utiles.


Séquence d'événements

Avec l'accès de chaque client à la ressource Web, plusieurs événements sont déclenchés immédiatement, dont la séquence que nous allons parler.

1. Demande de page. Lorsque vous entrez l'adresse à la ligne de navigateur ou lorsque vous allez sur un lien Web actif, disons, à partir de la page Résultats de la recherche, le navigateur recherche et se connecte au serveur sur lequel la page est située et implémente sa demande. Dans le même temps, il transmet ces informations au serveur:
- l'adresse IP de l'ordinateur du client, qui demande à la page (en cas d'utilisation d'un serveur proxy, l'adresse IP de votre proxy);
- adresse demandée par l'utilisateur de la page Internet (adresse IP);
- heure et date exactes lorsqu'une demande a été faite;
- des données sur l'emplacement réel du client (si un serveur proxy est utilisé, alors l'adresse proxy réelle);
- des informations sur le navigateur utilisé par le client (nom, version, etc.);
- Données sur une page Web avec laquelle la transition du client a été effectuée.

2. Transfert de données demandées. La transmission des données demandées est survenue (page Internet, fichiers, cooki, etc.) du serveur à l'ordinateur de l'utilisateur.

3. Enregistrez le journal du serveur. Après tout, le journal est enregistré, ce qui indique toutes les données figurant dans les deux derniers événements. Il s'agit de toutes les informations envoyées dans le premier paragraphe, ainsi que des informations sur les données transmises.

Comment voir les journaux de serveur

Log Fichiers stockés dans le fichier access.log. Ne dépendez pas de quel type de serveur Web que vous utilisez (Apache, NGinx, un serveur proxy Squid, etc.) Ce fichier est un document texte, sur chaque ligne qui est enregistrée par une poignée. Formats d'enregistrement B. Access.log. Beaucoup, mais le plus populaire est combiné, dans lequel l'enregistrement a la forme et la séquence suivantes:

Code:% h% l% u% t \\ "% r \\"%\u003e s% b \\ "% (référenant) i \\" \\ "% (agent utilisateur) i \\"
Où:

% H. - l'adresse hôte / IP à partir de laquelle la demande a été faite;
% T. - Demandez le temps pour le serveur de serveurs et de fuseau horaire;
% R. - version, contenu et type de requête;
% S. - code d'état http;
% B. - le nombre d'octets desservis par le serveur;
% (Référenant) - Source de requête URL;
% (Agent utilisateur) - titre http, avec demande d'informations (application client, langue, etc.);
% (HÔTE) - Le nom de l'hôte virtuel, à laquelle il y a un appel.

sur la forme finie, cette chaîne présente sur la forme suivante:

127.0.0.1 - "Obtenir /index.php http / 1..0 (compatible; MSIE 7.0; Windows NT 5.1)"

Pour la lecture des journaux dans le manuel, cela prendra beaucoup de temps et de force. Par conséquent, les webmasters expérimentés utilisent des logiciels spéciaux qui appellent des «fichiers journaux». Ils analysent toutes les données assez complexes à lire par la personne et à émettre des données structurées. Ce sont de tels programmes tels que: Analogique, WebAnalisateur, Webalizer, Awstats, Webtrends, etc. Les espèces de logiciels spéciales sont beaucoup, parmi lesquelles il existe des programmes payants et gratuits. Par conséquent, je suis sûr que tout le monde trouvera quelque chose comme ça.

Où trouver des journaux de site

Si vous avez un hébergement ordinaire, vous devrez probablement écrire sur votre hôte et demander des journaux. De même, assez souvent, vous pouvez les demander via le panneau de logement. À différents hosters - de différentes manières. Par exemple, pour demander à mon hébergement, il suffit de faire un clic sur la page principale du panneau:


Si vous avez accès aux dossiers du système de serveur, vous pouvez trouver des journaux à adresser. / etc / httpd / journaux / access_log Dans 99 cas sur 100.

Error Log Error.log.

Error.log. - Le fichier dans lequel les journaux sont également en cours. Mais pas visiteurs, mais sur les erreurs de serveur. Comme dans le cas de access.log.Chaque ligne de fichier est responsable d'une erreur. L'enregistrement est effectué en tenant compte de ces informations que: la date et l'heure exactes de l'événement d'erreur, l'adresse IP dont une erreur a été émise, le type d'erreur, ainsi que la raison de son événement.

Conclusion

Les journaux sont un outil assez puissant et informatif avec lequel il est nécessaire de travailler. Mais à notre époque, ils sont remplacés par de tels outils tels que Yandex.metrica, Google Analytics, etc., simplifiant ainsi notre vie. Toutefois, si vous envisagez de développer, développez et connaissiez quelque chose de nouveau, vous vous recommandez sans aucun doute de vous familiariser avec ce sujet plus près.

Les journaux d'événements sont le premier et le plus simple outil pour déterminer l'état du système et identifier les erreurs. Principaux journaux dans MySQL quatre:

  • Journal d'erreur. - journaux d'erreur standard collectés lors de l'opération de serveur (y compris le début et l'arrêt);
  • Journal binaire. - le journal de toutes les commandes de la modification BD est nécessaire pour la réplication et les sauvegardes;
  • Journal général de requête. - le journal principal des demandes;
  • Journal de requête lente. - Journal des demandes lentes.

Erreur de journal

Ce magazine contient toutes les erreurs survenues lors de l'opération de serveur, y compris les erreurs critiques, ainsi que l'arrêt, permettre des serveurs et des avertissements (avertissements). Vous devez commencer en cas d'échec du système. Par défaut, toutes les erreurs sont affichées dans la console (STDRERR), vous pouvez également enregistrer des erreurs dans Syslog (par défaut dans Debian) ou un fichier journal distinct:

Log_error \u003d / var / journal / mysql / mysql_error.log

# Les erreurs seront écrites dans mysql_error.log

Nous vous recommandons de garder ce magazine activé pour définir rapidement des erreurs. Et pour comprendre quelle est l'erreur qui signifie l'une ou l'autre, l'utilitaire Perror est présent dans MySQL:

Shell\u003e Perror 13 64 OS Code d'erreur 13: Autorisation refusée Code d'erreur du système d'exploitation 64: La machine n'est pas sur le réseau

# Explique les valeurs des codes d'erreur

Journal binaire (un binaire)

Toutes les commandes de changement de base de données sont enregistrées dans le journal binaire, il est utile pour réplication et récupération.

Allumez ceci:

Log_bin \u003d /var/log/mysql/mysql-bin.log expire_logs_days \u003d 5 max_binlog_size \u003d 500m

# Indique l'emplacement, la vie de la vie et la taille maximale du fichier

Notez que si vous n'allez pas accumuler le système et implémenter la tolérance aux pannes, le journal binaire ne doit pas inclure. Il est exigeant des ressources et réduit les performances du système.

Demandes de journal

Ce journal contient toutes les requêtes SQL reçues, des informations sur les connexions clientes. Il peut être utile d'analyser les index et l'optimisation, ainsi que d'identifier des demandes erronées:

Général_Log_File \u003d /var/log/mysql/mysql.log. général_log \u003d 1.

# Tourne sur le journal et indique l'emplacement du fichier

Vous pouvez également activer / désactiver le fonctionnement du serveur MySQL:

Définir Global General_Log \u003d "On"; Définir Global General_Log \u003d "Off";

# Pour une utilisation, vous n'avez pas besoin de redémarrer le serveur

Journal des demandes lentes

Le magazine est utile pour déterminer lentement, c'est-à-dire des demandes inefficaces. Lire la suite cet article.

Regardes les connexions

Pour voir les journaux sur Debian (Ubuntu), vous devez effectuer:

# Erreurs de journal queue -f / var / journal / syslog # queue -f /var/log/mysql/mysql.log.log # Log Demandes lentesqueue -f /var/log/mysql/mysql-slow.log.

# Si les journaux ne sont pas spécifiés séparément, vous êtes dans / var / lib / mysql

Rotation des bûches

N'oubliez pas de compresser (archiver, faire pivoter) les fichiers journaux afin qu'ils occupent moins d'espace sur le serveur. Pour ce faire, utilisez l'utilitaire logrotate.En modifiant le fichier de configuration /etc/logrotate.d/mysql-server:

# - Je mettais tout dans un bloc et ajouté Sharedscripts, de sorte que MySQL obtient # rinçage "D" D une seule une fois. Autre Les journaux binaires augmenteraient automatiquement par N Times tous les jours. # - Le journal d'erreur est obsolète, les messages vont à Syslog maintenant./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log. (Tourner quotidiennement 7 mangeOk Créez 640 MySQL ADM Compress Sharedscripts Postrotate Test -x / USR / BIN / MYSQLADMIN || Quitter 0 # Si cela échoue, vérifiez Debian.conf! Myadmin \u003d "/ usr / bin / mysqladmin --default-file \u003d / etc / mysql / debian.cnf" Si [-z "` $ myadmin ping 2\u003e / dev / null` "]; Puis. # Vraiment pas de mysqld ni plutôt un utilisateur manquant de Debian-Sys-Main-Main-à-propos? # Si cela se produit et n'est pas une erreur, veuillez signaler un bogue. #si ps CAX | grep -q mysqld; Puis. Si killall -q -s0 -umysql mysqld; Ensuite, sortez 1 fi sinon $ myadmin flush-grumbs firstcript)

# Compresse et archive les journaux souhaités, efface les fichiers

Journal DDL.

MySQL mène également un journal de langue description des données. Drop_Table et alter_table sont collectés. Le journal est utilisé pour restaurer après des échecs survenus lors de l'exécution de ces opérations. DDL Log est un fichier binaire qui n'est pas dédié à l'utilisateur, alors ne modifiez pas et ne le supprimez pas.

La chose la plus importante

Allumez toujours le journal d'erreur, utilisez le journal de la demande pour vérifier la connexion de l'application avec la base de données, les chèques et les contrôles de travail. Le bordereau de requêtes lentes est utile pour optimiser le travail de MySQL.



Avez-vous aimé l'article? Partagez-le