J'ai besoin de trouver une certaine mesure de la durée de mes interrogations et de la charge sur le serveur si possible. P>
Je doute que c'est possible, mais j'aimerais aussi gagner la consommation de la CPU. P>
Des idées? P>
7 Réponses :
Regardez le profileur de la requête. Cela peut faire le temps de requête de ce dont vous avez besoin. P>
https://www.digitalocean.com/ Communauté / Tutoriels / How-User-MySQL-Query-Profiling P>
https://dev.mysql.com/doc/ Refman / 5.5 / fr / show-profil.html p>
Il existe différents outils pour voir la charge sur le serveur p>
Mais je ne vois pas comment sortir cela dans PHP? Je veux vraiment avoir des erreurs piégeant dans PHP que je peux envoyer un email si les choses deviennent mauvaises.
Vous pouvez activer le profilage au début du script, puis faire un Afficher les profils code> à la fin. Vous pouvez utiliser les fonctions PHP standard que vous avez utilisées.
Le lien n'existe plus
Le lien est brisé à nouveau
syntaxe php puis calculez la différence entre $ Starttime et $ dedtime. p> p> p>
Je voterais pour vous, mais vous ne devez utiliser que la syntaxe de la syntaxe pour le code.
Comme la base de données et le serveur Web sont sur différents serveurs, cela ne pourra pas distinguer si la base de données allait lentement ou le serveur Web.
Considérant que la page PHP attend simplement que la requête MySQL ait fini, cela est probablement suffisamment bon pour déterminer le temps d'exécution de la requête. Il est peu probable que même un serveur Web lent aurait une incidence sur la vitesse indiquée; Si c'était si lent, alors vous auriez d'autres problèmes plus évidents. Mais pour des raisons que vous avez déjà mentionnées, cela ne vous aidera pas à trouver l'utilisation de la CPU.
@Matthew, c'est le temps du mur, pas le temps de la CPU.
est presque impossible que votre base de données et votre serveur Web se trouvent différemment
De plus, vous essayez de l'atteindre à l'aide de PHP
la limitation b> p> Solution de contournement b> p> Incorporer un cronjob dans votre serveur de base de données, ou p> à la base de données,
UpTime code> sur chaque exécution de la requête, est Overkill li>
ul>
Envoyé périodiquement un e-mail si la charge du serveur est allée haut p>
Envoyé périodiquement email sur la requête en cours d'exécution en utilisant
Afficher la liste complète des processus CODE> P> $con = mysqli_connect(...) or die('unable to connect');
$sql = "show full processlist";
$res = mysqli_query($con, $sql) or die($sql);
/* optional path is /tmp */
$fp = fopen('/tmp/'.date('YmdHis'), 'w+');
while ($row = $res->fetch_row())
{
fputcsv($fp, $row);
}
$res->free_result();
J'utilise un serveur partagé avec mon package d'hébergement du FSI, pour que je puisse distinguer quel temps / charge est de ma faute?
@Jules - à peu près sûr que votre base de données est isolée avec d'autres. Demandez à vos FAI de commencer à profiler le Afficher la liste de processus complète CODE> et vous envoyer un e-mail comme un enregistrement ou stocké dans un serveur pour vous accéder ultérieurement.
@Jules - Vous pouvez utiliser le Afficher la liste complète de la liste code> à l'aide de votre connexion de base de données
J'ai demandé à mon ISP Demandez à votre fournisseur de services Internet de démarrer le profil de la liste de processus d'affichage et de vous envoyer un e-mail comme un enregistrement ou stocké dans un serveur pour accéder ultérieurement CODE> et il a dit qu'il n'était pas ce que vous voulez dire. Nous avons essayé que le commandez-le pympmyadmin et cela ne devrait que ce qui fonctionnait à ce moment-là. Il a un serveur Windows.
OMG, cela signifie-t-il que votre serveur d'hébergement est dans la fenêtre? Si votre serveur d'hébergement est une boîte Linux, demandez-lui de définir un cron qui explicitement Afficher la liste de processus complète code> sur votre base de données et tuez-la dans un fichier e-mail ou de disque. N'importe où, votre FAI incapable de suivre l'endroit où la charge provient (une grande question 1), et le gars que vous avez contacté ne sait pas comment configurer un planificateur (une grande question deux). Ceci est ironique.
Vérifiez à nouveau avec l'ISP, ont-ils des utilitaires du planificateur de tâches Windows. Si le serveur le comporte, vous pouvez conseiller votre fournisseur de services Internet de démarrer une tâche moniteur Afficher la liste de processus complète code> chaque minute. La sortie peut envoyer un email ou une sortie dans un emplacement sur votre serveur. Donc, chaque fois que votre serveur ayant une pointe sur charge, vous pouvez vérifier quelles sont les requêtes qui fonctionnent en même temps. S'il n'y a rien d'une requête lente significative, votre application n'est probablement pas le coupable.
Il n'y a pas une telle tâche de faire tout ça.
Sûr sûr que la fenêtre ou la boîte Linux est capable d'effectuer le planificateur. Lisez ceci - Stackoverflow.com/ Questions / 132971 / ... . Pouvez-vous accéder et installer planificateur sur votre serveur Web de fenêtre? L'alternative est pour vous de configurer un planificateur et do Afficher la liste de processus complète code> à votre base de données.
Oui, la planification d'une tâche peut être effectuée facilement, mais analysant Afficher la liste de processus complète code> à un fichier (s) puis en désactivant uniquement les éléments qui sont pour moi, puis envoyer un courrier électronique à la messagerie électronique.
Plus facile, vous préparerez un script PHP, exécutez la requête de spectacle, itérer les résultats (fetch_row) et fppTcsv dans un fichier à l'aide du nom de fichier comme "20101122080000". Se référer à des résultats mis à jour
Il y a beaucoup d'informations que vous pouvez obtenir à propos de la base de données à l'aide de
SHOW STATUS;
Last_Query_cost semble toujours retourner zéro. Je n'ai pas accès à des requêtes lentes car elle détient des requêtes d'autres clients d'hébergement. Les requêtes ralentissent également sont zéro.
Utiliser Pour la charge du serveur, voir http://www.php.net /manual/fr/function.sys-getloadavg.php . L'utilisation du processeur est principalement non pertinente, car la mySQL sera la plus basse du disque. P> microtime code> pour mesurer le temps requis pour une requête. P>
Pour des statistiques plus détaillées, vous devez utiliser mysqli :: get_connection_stats (si vous utilisez php 5.3 +) p>
http://www.php.net/manual/ fr / mysqli.get-raccord-statists.php p>
php ne peut vraiment que le temps du mysql_query () code> l'heure d'exécution, qui inclut tout le trajet aller-retour, la latence et les temps de transfert. Pour avoir une pause, vous devrez utiliser le profileur MySQL comme mentionné déjà. Le code suivant devrait émettre les informations que vous devez savoir. Si vous souhaitez incorporer le profilage dans votre processus PHP, vous devrez utiliser le profileur et sélectionner des champs pertinents à partir de la table informations_schema.profiling code>, mais s'il s'agit simplement de vérifier les performances ci-dessous suffisantes. . <?php
$con = mysql_connect("localhost","root","my-password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my-database", $con);
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
mysql_query("set profiling=1;");
$starttime = microtime_float();
$query = mysql_query("SELECT * FROM my-table");
$endtime = microtime_float();
$trans_result = mysql_query("select sum(duration) as transtime from information_schema.profiling where query_id=1");
$transtime = mysql_result($trans_result, 0, 'transtime');
$total_time = ($endtime - $starttime);
$transtime = ($total_time - $transtime);
echo 'Total time: '.$total_time.' secs<br />';
echo 'Transfer time: '.$transtime.' secs<br />';
echo 'Query time break-down;<br />';
$debug_result = mysql_query("show profile cpu for query 1;");
while ($row = mysql_fetch_assoc($debug_result)) {
echo $row['Status'].' (Time: '.$row['Duration'].', CPU_User: '.$row['CPU_user'].', CPY_sys: '.$row['CPU_system'].')<br />';
}
?>
La question, la base de données et le serveur Web sont les mêmes?
Non, car les temps pris pour traiter une requête ne montrent pas l'utilisation de la CPU sur le serveur. Cela pourrait être une requête rapide / grande ou une requête lente.
MySQL 5.6 a le module de performance. Cela peut aider.