Performances I/O aléatoires sur serveur DB MySQL/Percona

Posté par mace-aimee le 07/09/2024
RÉSOLU

mace-aimee

Membre depuis le 24/02/2020

hello ! j'ai un serveur mysql/percona sur un dédié avec des ssd nvme (type intel p4510), et je constate des perfs i/o super aléatoires. des fois ça carbure à 100k+ iops, des fois ça tombe à 5k iops et la latence monte en flèche (plusieurs centaines de ms) pour des opérations qui devraient être instantanées. `iostat -x 1` montre des %util qui fluctuent pas mal.

# exemple iostat
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.14    0.00    2.53    6.78    0.00   85.55

Device             r/s     w/s     rkB/s     wkB/s   rrqm/s   wrqm/s  %rrqm  %wrqm r_await w_await aqu-sz rareq-sz wareq-sz  svctm  %util
nvme0n1         342.18 1024.18  12345.67 54321.09     0.00     0.00   0.00   0.00    0.34    5.67   6.12    36.12    53.00   0.89  12.15
# Et parfois, w_await monte à 200+ ms

J'ai déjà checké le CPU et la RAM, ils sont loin d'être saturés. Des pistes pour ce genre de comportement erratique?

Commentaires

navarro-nath

Membre depuis le 20/01/2020

Salut ! Premier truc à voir, c'est quel scheduler I/O est utilisé sur tes NVMe. Pour les SSD, `noop` ou `mq-deadline` sont généralement meilleurs que `cfq`. Tu peux vérifier avec `cat /sys/block/nvme0n1/queue/scheduler` et changer si besoin. `echo noop > /sys/block/nvme0n1/queue/scheduler`.

michelle31

Membre depuis le 22/08/2024

Vérifie aussi tes options de mount pour le filesystem de ta DB. `noatime` et `barrier=0` peuvent améliorer les perfs sur les SSD. Par contre `barrier=0` demande à faire confiance au cache d'écriture du disque, attention.

navarro-nath

Membre depuis le 20/01/2020

taille des blocs du filesystem (ex: xfs, ext4) et alignement avec le disque nvme. si tes blocs sont pas alignés ou trop petits pour la charge, ça peut générer plus d'opérations physiques. `blockdev --getbsz /dev/nvme0n1` et `fdisk -l` pour voir les offsets.

benoit-caron

Membre depuis le 19/04/2019

La valeur de `swappiness`? Si elle est trop haute, le kernel peut commencer à swapper la mémoire de la DB vers le disque, même si t'as de la RAM libre, et ça tue les perfs I/O. Mets-la à 1 ou 10 sur un serveur DB.

michelle31

Membre depuis le 22/08/2024

Pas de processus background qui font du I/O lourd au même moment? Genre des backups qui utilisent `rsync` ou des snapshots LVM? Ça peut créer des micro-pauses qui se transforment en gros lag sur la DB.

navarro-nath

Membre depuis le 20/01/2020

Problème de firmware NVMe? J'ai déjà vu des firmwares buggés sur certaines marques de NVMe qui causaient des perfs I/O instables. Vérifie si y a des mises à jour dispo pour tes P4510.

benoit-caron

Membre depuis le 19/04/2019

Si c une VM, y a-t-il un overhead de l'hyperviseur? Certaines configs de virtualisation peuvent impacter le passthrough I/O des NVMe. Regarde les métriques I/O de l'hyperviseur si tu peux.

navarro-nath

Membre depuis le 20/01/2020

Et enfin, si t'utilises `mdadm` ou `lvm` au-dessus de tes NVMe, vérifie que les stripe sizes sont bien optimisées pour tes workloads et alignées avec les blocs de tes disques.

mace-aimee

Membre depuis le 24/02/2020

Gros merci à tous ! Plusieurs pistes intéressantes. Le `swappiness` était à 60, je l'ai mis à 10. Et surtout, il y avait un vieux script de rotation de logs qui faisait un `tar.gz` sur des dizaines de gigas toutes les heures. Ça créait des pics. En le décalant et l'optimisant, les IOPS sont stables maintenant ! C'était un mix de petits trucs en fait.

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