Défense de type slam
Un cache mal structuré peut faire plus de mal que de bien. Dans le pire des cas, un cache peut accroître la charge du serveur de base de données au lieu de la diminuer. Une situation de surcharge peut survenir si un grand nombre d'entrées partagées du cache expirent (débandade du cache).
Les entrées du cache sont partagées et réutilisées à différents degrés suivant le mode de stockage utilisé. Le gestionnaire de stockage par défaut stocke les entrées en mémoire. Ainsi, une entrée du cache peut être réutilisée pendant la durée de vie du processus. Les autres processus PHP ne peuvent pas y accéder. Si Memcache est utilisé, une entrée du cache peut être partagée pour plusieurs processus PHP, sur différentes machaines, suivant la configuration utilisée.
Si un grand nombre d'entrées partagées du cache stockées par exemple dans Memcache expirent, plusieurs clients se verront informés de l'absence de l'entrée dans le cache. A ce moment, vu que ces clients ne peuvent récupérer les données depuis le cache, ils tentent de les récupérer depuis le serveur de base de données. Tant que l'entrée du cache n'est pas mise à jour, de plus en plus de clients contacteront le serveur de base de données. Dans le pire des cas, cela peut conduire à une perte totale du service.
La surcharge peut être évitée en utilisant un gestionnaire de stockage qui limite la réutilisation d'une entrée du cache à un nombre limité de clients. Alors, si le cas extrême est rencontré, ce ne sera qu'un nombre limité de clients qui tenteront de mettre à jour l'entrée du cache en même temps.
De plus, le mécanisme de défense interne de type slam peut et doit être utilisé. Si cette défense est activée, une entrée du cache expirée reçoit une extension de durée de vie. Le premier client qui récupère une entrée manquante car expirée tentera de la mettre à jour pendant la durée de cette extension. Tous les autres clients demandant cette entrée sont temporairement servis depuis le cache malgré le fait que le TTL original de cette entrée a expiré. Les autres clients ne recevront pas comme réponse le fait que l'entrée n'est pas présente dans le cache tant que cette extension de vie ne sera pas atteinte.
mysqlnd_qc.slam_defense=1 mysqlnd_qc.slam_defense_ttl=1
Le mécanisme de défense de type slam est activé avec la direction de configuration PHP mysqlnd_qc.slam_defense. L'extension de durée de vie d'une entrée du cache est définie avec la directive mysqlnd_qc.slam_defense_ttl.
La fonction mysqlnd_qc_get_core_stats() retourne un tableau de statistiques. Les statistiques slam_stale_refresh et slam_stale_hit sont incrémentées si une défense de type slam est mise en place.
Il n'est pas possible de fournir une recommandation générale concernant la configuration de la défense de type slam. Les utilisateurs sont encouragés à surveiller et tester leur configuration et d'ajuster leur configuration en conséquent.
Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-mysqlnd-qc.slam-defense.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.