Salut. Si
await
est haut etsvctm
bas, ça sent le file system ou le scheduler I/O. T'as quoi comme FS et quel scheduler est actif sursdb
?cat /sys/block/sdb/queue/scheduler
pour voir. Et la taille des queues du FS genreio_setup
ounr_requests
si c'est du blk-mqEt regarde aussi le nombre d'inodes libres sur tes FS. Un manque d'inodes peut causer des latences bizarres pour les écritures de petits fichiers ou des créations/suppressions fréquentes. Ça impacte le temps que le système met à trouver un bloc libre
ok pour le scheduler c'est
mq-deadline
(par défaut je crois), et le FS c'est duext4
. Inodes libres j'ai check c'est ok. Pour les queues, je suis en blk-mq, la queuenr_requests
est à 256. Ça me semble pas déconnant. Mais le fait queawait
soit 450ms etsvctm
8ms c'est vraiment chelouLe
await
est le temps d'attente moyen des requêtes incluant le temps en queue,svctm
c'est le temps de service réel du device. Un gros écart comme ça indique que les requêtes attendent beaucoup dans la queue I/O avant d'être traitées. Leaqu-sz
(average queue size) à 50 confirme ça. Essaye de passer le scheduler ennone
si tu utilises un RAID hardware ou si t'es sur du NVMe ultra rapide, des fois le scheduler fait plus de mal que de bienSi t'es sur une VM, la couche de virtualisation peut aussi introduire des soucis. T'es sur quel hyperviseur ? Et quel type de disque virtuel ? Virtio-blk ? Virtio-scsi ? Si c'est virtio-blk,
mq-deadline
est pas toujours le meilleur,none
ounoop
peuvent être mieux. et check les métriques i/o au niveau de l'hyperviseur pour voir si le problème vient pas de làC'est une VM oui, sur Proxmox avec des disques VirtIO. Je vais tenter de passer le scheduler à
none
pour voir si ça change quelque chose. On a pas de métriques hyperviseur pour l'instant je vais voir pour en mettre en place. Je redémarre le service postgreSQL pour appliquer le changement et je vous disouais sur virtio
none
est souvent le meilleur choix car le scheduler est déjà géré par l'hyperviseur ou le storage backend. Double scheduler ça fait double peineExactement. Et vérifie aussi l'alignement des partitions du FS par rapport aux blocs du disque physique et du RAID. Des misalignements peuvent pénaliser les performances I/O, surtout pour les écritures
MILLE MERCIS !! Le passage à
none
sur le scheduler a fait chuter l'await à des valeurs normales (genre 2-3ms). Le serveur respire enfin et PostgreSQL est content. C'était bien ce foutu double scheduling qui foutait la merde. Content de l'avoir trouvé !Vous devez être connecté pour poster un message !
Recevoir les derniers articles gratuitement en créant un compte !
S'inscrire
foucher-amelie
Membre depuis le 03/09/2024actif
Salut la tech ! J'ai un serveur de base de données (PostgreSQL) qui se plaint de latences I/O monstrueuses, genre plusieurs centaines de ms pour des écritures qui devraient être en ms. J'ai checké le disque physique, pas d'erreurs SMART, RAID ok.
iostat
me montre des%util
élevé (90%+) mais desw/s
etr/s
pas délirants (quelques centaines). Le CPU est pas saturé. C'est comme si le disque est occupé à rien faire. Des idées pour creuser ?