Délais I/O aléatoires sur serveur MySQL avec SSD NVMe

Posté par richard34 le 15/05/2025
RÉSOLU

richard34

Membre depuis le 24/03/2019

Salut la tech team ! j'ai un truc de fou sur notre gros serveur MySQL. il a des SSD NVMe en RAID0 et normalement ça torche. mais des fois, on voit des délais I/O qui montent en flèche pour quelques secondes, genre 500ms sur des reads, alors que d'habitude c'est 0.1ms. ça arrive pas souvent mais c'est super pénible pour l'appli.

Commentaires

godard-antoinette

Membre depuis le 14/03/2019

t'as vérifié les stats iostat -x 1 ou atop pendant ces pics de latence ? voir ce qui sature ou ce qui attend sur les disques.

richard34

Membre depuis le 24/03/2019

oui, iostat montre des %util à 100% mais les r/s et w/s sont pas si élevés, genre 1000 IOPS alors que les NVMe peuvent faire 500k. ça colle pas avec l'utilisation à fond. les queues depth montent pas non plus énormément.

fpons

Membre depuis le 04/04/2019

c'est quel scheduler I/O que t'utilises sur ces disques ? pour les NVMe, le mieux c'est souvent noop ou none. si t'as un scheduler plus complexe comme deadline ou cfq, il peut ajouter des latences inutiles car le hardware NVMe a son propre scheduler hyper optimisé.

godard-antoinette

Membre depuis le 14/03/2019

et les queues depth de tes disques ? côté driver nvme. si c pas assez profond dans la config du kernel, ça peut aussi créer des blocages même si le hardware est ultra rapide. le kernel fait attendre les requêtes.

clemence-gilbert

Membre depuis le 06/05/2024

regarde aussi si t'as pas des process qui font des fsync fréquents ou des writes non optimisés qui bloquent le buffer cache. MySQL lui-même peut générer ça si sa config de transaction (genre innodb_flush_log_at_trx_commit) est trop agressive.

richard34

Membre depuis le 24/03/2019

on est sur mq-deadline. j'avais lu que c'était pas mal pour les SSD. pas noop parce qu'on a aussi des disques SAS pour d'autres workloads et je voulais un truc homogène.

fpons

Membre depuis le 04/04/2019

mq-deadline c'est pas idéal pour NVMe même si c'est mieux que cfq. change pour none (anciennement noop pour les vieux kernels) juste pour tes devices NVMe. ça laisse les NVMe gérer l'ordonnancement directement. c'est fait pour ça, ils sont plus intelligents que le kernel sur ce point.

godard-antoinette

Membre depuis le 14/03/2019

et vérifie les IRQ de tes cartes NVMe. si elles sont mal distribuées sur les CPUs, ça peut créer des hot-spots sur un seul core et des latences car ce core est surchargé. regarde /proc/interrupts et la config de irqbalance.

richard34

Membre depuis le 24/03/2019

j'ai changé le scheduler pour none sur les devices NVMe seulement. après quelques tests de charge, ça a l'air beaucoup plus stable ! plus de pics étranges, la latence est super basse et constante. c'était bien le scheduler du kernel qui mettait le bazar. merci les gars pour l'aide précieuse !

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire