Maison >base de données >Redis >Introduction aux solutions d'analyse et de surveillance des performances Redis

Introduction aux solutions d'analyse et de surveillance des performances Redis

尚
avant
2020-03-10 09:20:072516parcourir

Introduction aux solutions d'analyse et de surveillance des performances Redis

1. Analyse redis slowlog

Sous-commande SLOWLOG [argument]

Voici les paramètres de configuration des requêtes lentes de redis .conf :

slowlog-log-slower-than 10000     #查询时间超过10ms的会被记录
slowlog-max-len 128     #最多记录128个慢查询

Les paramètres ci-dessus peuvent être interrogés dynamiquement ou définis dans redis : utilisez les commandes config get et config set

pour lire les requêtes lentes : vous pouvez obtenir les quelques requêtes lentes spécifiées

🎜>

127.0.0.1:6320> slowlog get 1
 1) 1) (integer) 394689     #slowlog的唯一编号
    2) (integer) 1480851711     #此次slowlog事件的发生时间
    3) (integer) 10639     #耗时
    4) 1) "HGET"     #slowlog事件所对应的redis 命令
       2) "hash:submit_sent_150004"
       3) "15000429648122734363745165312"

Réinitialiser les statistiques de slowlog :

SLOWLOG RESET
Analyse des commandes lentes de Redis :

1. Redis utilise un seul thread pour traiter les requêtes des clients. lorsque la demande est servie lentement, tous les autres clients attendront que cette demande soit traitée. Si vous devez exécuter de nombreuses commandes lentes, il est recommandé de placer des requêtes lentes sur l'esclave Redis pour exécution.

2. À propos de la commande keys : Une source très courante de retard provoquée par l'exécution de commandes lentes est l'utilisation de la commande KEYS dans un environnement de production. Comme indiqué dans la documentation Redis, KEYS ne doit être utilisé qu'à des fins de débogage.

Redis2.8 a introduit de nouvelles commandes pour interroger de grandes collections. Veuillez consulter les commandes SCAN, SSCAN, HSCAN et ZSCAN pour plus d'informations.
  • SCAN parcourt l'ensemble de clés dans la base de données Redis actuellement sélectionnée.
  • SSCAN parcourt les éléments du type de collection d'ensembles.
  • HSCAN parcourt les champs de types de hachage et leurs valeurs associées.
  • ZSCAN parcourt les éléments du type d'ensemble trié et leurs scores associés.

Comme ces commandes permettent une itération incrémentielle, ne renvoyant qu'un petit nombre d'éléments par appel, elles peuvent être utilisées en production sans les inconvénients des commandes comme KEYS ou SMEMBERS, qui lorsqu'elles sont appelées Grandes collections de clés ou d'éléments peuvent bloquer le serveur pendant une longue période (voire quelques secondes).

2. Comment utiliser les commandes SCAN, SSCAN, HSCAN et ZSCAN

SCAN est un itérateur basé sur un curseur. Cela signifie qu'à chaque appel à la commande, le serveur renvoie un curseur mis à jour que l'utilisateur doit utiliser comme paramètre de curseur lors du prochain appel.

L'itération commence lorsque le curseur est mis à 0, et se termine lorsque le curseur renvoyé par le serveur est 0. Voici un exemple d'itération SCAN :

127.0.0.1:6319> scan 0
1) "65536"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
127.0.0.1:6319> scan 65536
1) "884736"
2)  1) "list:submit_sent_2016-12-01-17:55_175010"
    2) "list:submit_sent_2016-12-02-18:28_138052"
    3) "list:submit_sent_2016-12-01-18:17_150243"
    4) "list:submit_sent_2016-12-01-11:22_137606"
    5) "list:submit_sent_2016-12-01-21:15_183748"
    6) "list:submit_sent_2016-12-02-11:47_155212"
    7) "list:submit_sent_2016-12-01-11:01_137065"
    8) "list:submit_sent_2016-12-02-08:03_181202"
    9) "list:submit_sent_2016-12-02-12:16_136096"
   10) "list:submit_sent_2016-12-01-18:12_159893"

démarre une itération avec une valeur de curseur de 0 et appelle SCAN jusqu'à ce que le curseur renvoyé soit à nouveau 0, ce qui est appelé une itération complète.

L'option de comptage de l'analyse : Spécifiez le nombre de sorties

127.0.0.1:6319> scan 0 count 20
1) "884736"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
   11) "list:submit_sent_2016-12-01-17:55_175010"
   12) "list:submit_sent_2016-12-02-18:28_138052"
   13) "list:submit_sent_2016-12-01-18:17_150243"
   14) "list:submit_sent_2016-12-01-11:22_137606"
   15) "list:submit_sent_2016-12-01-21:15_183748"
   16) "list:submit_sent_2016-12-02-11:47_155212"
   17) "list:submit_sent_2016-12-01-11:01_137065"
   18) "list:submit_sent_2016-12-02-08:03_181202"
   19) "list:submit_sent_2016-12-02-12:16_136096"
   20) "list:submit_sent_2016-12-01-18:12_159893"

L'option de correspondance de l'analyse : Semblable à la commande de touches correspondant par motif, ajoutez simplement le paramètre MATCH a6f114c758be113d08282881423b4728 fin de la commande SCAN

127.0.0.1:6319> scan 0 match *submit_sent*
1) "65536"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
127.0.0.1:6319> scan 0 count 15  match *submit_sent*     #查找匹配的数据并返回15个
1) "2031616"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
   11) "list:submit_sent_2016-12-01-17:55_175010"
   12) "list:submit_sent_2016-12-02-18:28_138052"
   13) "list:submit_sent_2016-12-01-18:17_150243"
   14) "list:submit_sent_2016-12-01-11:22_137606"
   15) "list:submit_sent_2016-12-01-21:15_183748"

La méthode d'interrogation par sscan de la collection d'ensembles :

redis 127.0.0.1:6379> sadd myset 1 2 3 foo foobar feelsgood
(integer) 6
redis 127.0.0.1:6379> sscan myset 0 match f*
1) "0"
2) 1) "foo"
   2) "feelsgood"
   3) "foobar"
redis 127.0.0.1:6379>

La méthode d'interrogation par hscan de la collection de hachage :

redis 127.0.0.1:6379> hmset hash name Jack age 33
OK
redis 127.0.0.1:6379> hscan hash 0
1) "0"
2) 1) "name"
   2) "Jack"
   3) "age"
   4) "33"

Quand un noyau Linux active le fonction de pages énormes transparentes, Redis utilise des appels fork. Il y aura alors une pénalité de latence importante pour la persistance des données sur le disque.

Vous pouvez utiliser cette méthode pour désactiver cette fonctionnalité du noyau système :

echo never > /sys/kernel/mm/transparent_hugepage/enabled

Remarque : redis doit être redémarré pour prendre effet.

3. Vérifiez si redis est affecté par l'utilisation du swap par le système :

查找redis进程id:
redis-cli -p 6319 info|grep process_id
process_id:32139
查看redis进程的内存使用信息:
cd /proc/32139
查看该进程使用swap分区的统计信息,以不使用或只有少量的4kB为佳:
cat smaps | grep 'Swap:'
同时打印出内存映射和swap使用信息:查看那些较大的内存消耗是否引发了大的swap使用
cat smaps | egrep '^(Swap:Size)'
4. Utilisez redis watchdog pour localiser le délai : expérimental. fonction, veuillez vous assurer que les données Redis sont sauvegardées.

Redis software watchdog
该功能只能动态启用,使用以下命令:
CONFIG SET watchdog-period 500
注:redis会开始频繁监控自身的延时问题,并把问题输出到日志文件中去。
 
关闭watchdog:
CONFIG SET watchdog-period 0
 
注:打开watchdog功能,会对redis服务性能产生影响。

5. À propos du cadre de surveillance de la latence Redis

Cadre de surveillance de la latence Redis

Comment activer le cadre de surveillance Redis :

CONFIG SET latency-monitor-threshold 100

Par défaut Dans ce Dans ce cas, le seuil est défini sur 0, ce qui désactive la surveillance Redis. En fait, l’activation de cette fonction de surveillance ajoute très peu de coûts à Redis. Cependant, pour un Redis qui fonctionne bien, il n'est pas nécessaire d'activer cette fonction de surveillance.

Comment utiliser la commande LATENCY

Afficher le dernier événement de retard :

127.0.0.1:6319> latency latest
1) 1) "command"     #event name
   2) (integer) 1480865648     #发生时间
   3) (integer) 207     #耗时,毫秒
   4) (integer) 239     #从redis启动或上次latency reset以来,这种事件的最大延时记录

Afficher les informations historiques de l'événement de retard :

Événement LATENCY HISTORY- name

Pour un événement donné, la commande retournera jusqu'à 160 éléments. Les applications peuvent souhaiter obtenir des données brutes afin d'effectuer une surveillance, d'afficher des graphiques, etc.

127.0.0.1:6319> latency history command
  1) 1) (integer) 1480865710
     2) (integer) 207
  2) 1) (integer) 1480865711
     2) (integer) 217
  3) 1) (integer) 1480865712
     2) (integer) 198
  4) 1) (integer) 1480865713
     2) (integer) 226
  5) 1) (integer) 1480865714
     2) (integer) 224

Réinitialiser les statistiques à zéro :

LATENCY RESET [event-name ... event-name]

Afficher les événements retardés sous forme de graphiques textuels :

LATENCY GRAPH event-name
127.0.0.1:6379> latency graph command
command - high 500 ms, low 101 ms (all time high 500 ms)
--------------------------------------------------------------------------------
   #_
  _||
 _|||
_||||
 
11186
542ss
sss

Remarque : Chaque colonne représente un événement retardé ; ce qui est affiché ci-dessous est la durée pendant laquelle l'événement s'est produit avant l'heure actuelle, par exemple 2 minutes ou 38 s dans les événements statistiques, l'événement de retard minimum est enregistré sous la forme d'un bref soulignement, et l'événement de retard maximum est exprimé par A # ci-dessus. Ce chiffre peut refléter une tendance changeante des événements retardés.

LATENCY DOCTOR, analyse intelligente et suggestions pour les statistiques d'événements retardés :

127.0.0.1:6379> latency doctor
Dave, I have observed latency spikes in this Redis instance.
You don't mind talking about it, do you Dave?
1. command: 5 latency spikes (average 300ms, mean deviation 120ms,
  period 73.40 sec). Worst all time event 500ms.
I have a few advices for you:
- Your current Slow Log configuration only logs events that are
  slower than your configured latency monitor threshold. Please
  use 'CONFIG SET slowlog-log-slower-than 1000'.
- Check your Slow Log to understand what are the commands you are
  running which are too slow to execute. Please check
  http://redis.io/commands/slowlog for more information.
- Deleting, expiring or evicting (becaus
rrreePour plus de connaissances sur Redis, veuillez faire attention à la colonne tutoriel redis

du site Web PHP chinois.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer