Maison > base de données > Redis > Journal des requêtes lentes d'exploitation et de maintenance Redis

Journal des requêtes lentes d'exploitation et de maintenance Redis

齐天大圣
Libérer: 2020-05-14 11:55:51
original
1788 Les gens l'ont consulté

Pour bien utiliser Redis, vous devez non seulement savoir comment utiliser l'API, mais aussi savoir comment empêcher Redis de se bloquer et vérifier et analyser le blocage. Aujourd'hui, parlons de la façon de découvrir le blocage de Redis : trouver les commandes bloquées via des requêtes lentes.

Comme Mysql, Redis a également des enregistrements de requêtes lents. Lorsque le temps d'exécution de la commande dépasse la valeur définie, la commande sera enregistrée dans la liste des requêtes lentes. Avec des requêtes lentes, nous pouvons améliorer nos programmes. Empêchez Redis de se bloquer.

Configuration

Il existe deux paramètres de configuration pour les requêtes lentes :

  • slowlog-log- plus lent que

  • slowlog-max-len

slowlog-log-slower-than est utilisé pour définir un seuil en microsecondes. la valeur est 10 000, soit 10 millisecondes.

  • Lorsque la valeur est inférieure à 0, aucune commande ne sera enregistrée

  • Lorsque la valeur est égale à 0, toutes les commandes; sera enregistré.

slowlog-max-len indique le nombre maximum d'enregistrements, la valeur par défaut est 128, par exemple, définissez-la sur 10, lorsque la 11ème requête lente est insérée, puis les données à la la tête de file d'attente sera hors de la file.

Ces deux configurations prennent également en charge la configuration dynamique. Lorsque le projet vient de démarrer et que le nombre de visites n'est pas très important, la valeur de slow-log-slower-than peut être définie plus grande. À mesure que le nombre de visites augmente, vous devrez peut-être modifier sa valeur pour une valeur plus petite. Mais nous ne voulons pas arrêter le service Redis, nous pouvons donc modifier dynamiquement la configuration.

127.0.0.1:6379> config set slowlog-log-slower-than 1000
OK  
# 在线修改配置
127.0.0.1:6379> config rewrite
OK
# 将修改的配置持久化到配置文件中
Copier après la connexion

Suggestions de fonctionnement et de maintenance : lorsque le nombre de visites est important, nous recommandons généralement de régler slowlog-log-slower-than à 1 000 ou moins. Lorsque cette valeur est de 1 000, cela signifie que Redis peut prendre en charge jusqu'à 1 000 accès simultanés.

Vue des requêtes lentes

La vue des requêtes lentes de Redis est différente de celle de MySQL. Il existe des commandes spéciales pour la vue Redis.

Obtenir le journal des requêtes lentes

slowlog get [n], n représente le nombre d'entrées, la valeur par défaut est 10

127.0.0.1:6379> slowlog get
1) 1) (integer) 18004
   2) (integer) 1589424642
   3) (integer) 50
   4) 1) "slowlog"
      2) "get"
   5) "127.0.0.1:58364"
   6) ""
2) 1) (integer) 18003
   2) (integer) 1589423805
   3) (integer) 47
   4) 1) "slowlog"
      2) "get"
   5) "127.0.0.1:58364"
   6) ""
……
Copier après la connexion
  • Le premier paramètre est le numéro d'identification du journal

  • Le deuxième paramètre est l'horodatage de l'occurrence

  • Le troisième paramètre est la commande Temps d'exécution (subtil)

  • Le dernier est la commande et les paramètres.

Obtenir la longueur de la requête lente

slowlog len

127.0.0.1:6379> slowlog len
(integer) 128
Copier après la connexion

Effacer la liste des requêtes lentes

127.0.0.1:6379> slowlog reset
OK
Copier après la connexion

Persistance du journal des requêtes lentes vers mysql

En raison de la longueur de redis est limité, donc lorsqu'il y a beaucoup de requêtes lentes, il y aura une perte. Nous pouvons régulièrement accéder à Redis pour supprimer la liste des enregistrements de requêtes lentes et la conserver dans MySQL pour éviter que cela ne se produise.

Le pseudo-code est le suivant :

while (true) {
    $slowlen = $redis->slowlog('len');
    $slowlogs = $redis->slowlog('get',$slowlen);
    $insSql  = "INSERT INTO 
        slowlog(exec_time,run_time,command) VALUES";
     
    if (is_array($slowlogs) && count($slowlogs)) {
     
        foreach ($slowlogs as $slowlog) {
            $execTime = $slowlog[2];
            $runTime  = $slowlog[1];
            $command  = implode(' ', $slowlog[3]);
     
            $insSql .= "('$execTime', '$runTime','$command'),";
        }
     
        $flag = mysqli_query($mysqli, substr($insSql, 0, -1));
     
        if ($flag) {
            $redis->slowlog('reset');
        }
    }
    
    unsleep(10000);
}
Copier après la connexion

Le code ci-dessus peut réaliser la persistance de requêtes lentes dans MYSQL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal