Bonjour tout le monde
J'ai un ralentissement très bizarre sur une base de données… besoin d'idées.
C'est un serveur Odoo 10 et Postgresql 10 sur Ubuntu 18.04 dans un VPS assez gros (8 coeurs, 16 Go de Ram). Le VPS était sous VMWare, l'hébergeur l'a déplacé sur un autre VMWare. Le déplacement a été fait en copiant le système de fichiers, pas en déplaçant ou copiant l'image disque. Migration à froid donc. On a aussi changé d'IP.
Depuis il y a un très gros ralentissement dès que l'ERP Odoo a besoin d'ouvrir des articles: Odoo gère aussi le site ecommerce, et une page web d'article met près de 5 secondes à s'afficher, en backend la moindre recherche dans les articles (ou dans les lignes de commandes) prend de 30 à 120 secondes. Les autres pages du site (blog, à propos, accueil, …) et les autres menus de gestion ont un temps de réponse normaux. Il y a très peu d'articles, environ 4000 avec les variantes.
J'ai tout examiné, il y a eu d'autres petits problèmes, mais sur Postgresql on ne trouve rien, c'est clean. Et c'est la panne sèche aux idées. Des pistes quelqu'un ?
# quelques pistes
Posté par totof2000 . Évalué à 6 (+4/-0).
[^] # Re: quelques pistes
Posté par totof2000 . Évalué à 3 (+1/-0).
Ah .. je me rappelle aussi d'une commande passée régulièrement pour réorganiser les tables, mais je ne sais plus si c'est une commande intégrée à postgres ou si elle avait été développée pour le cas spcifique de l'application. C'est loin donc je ne me rappelle plus, et je n'ai plus accès au serveur, donc je ne peux pas donner plus de détails : d'autres pourront confirmer. Sinon voir la log des diverses couches pour voir ce que ça retourne (BDD, application, etc ..).
[^] # Re: quelques pistes
Posté par BAud (site web personnel) . Évalué à 4 (+2/-0).
https://reorg.github.io/pg_repack/ ?
remove bloat from tables and indexes, and optionally restore the physical order of clustered indexes. Unlike CLUSTER and VACUUM FULL it works online, without holding an exclusive lock on the processed tables during processing. pg_repack is efficient to boot, with performance comparable to using CLUSTER directly.
faut trouver les bonnes options ;-)
[^] # Re: quelques pistes
Posté par orfenor . Évalué à 2 (+0/-0).
Bon ben,… rien. J'ai d'abord été prudent : les index sur les tables les plus sollicitées, finalement la base étant toute petite j'ai fait un repack sur l'ensemble.
Je n'ai pas joué à déplacer les tables et indexs, ça vaut le coup ?
[^] # Re: quelques pistes
Posté par orfenor . Évalué à 4 (+2/-0).
Merci de ta réponse.
1. Les disques sont un peu plus lents en effet
2. L'utilitaire vacuumdb en mode analyse n'a rien trouvé. C'est une toute petite base par rapport aux capacités de Postgres.
Ce qui me laisse à court d'idées — sauf des idées ésotériques — c'est le ralentissement aussitôt après la migration et qui semble lié a une seule table (la base Odoo en contient des centaines).
[^] # Re: quelques pistes
Posté par cg . Évalué à 3 (+1/-0).
Comme la base n'a pas l'air très grande, voici une autre idée pour diagnostiquer (ce n'est pas forcément une solution à long terme) : mettre des buffers suffisamment gros pour que la base soit entièrement en RAM. Ainsi, si le problème est au niveau du stockage ou sur l'alignement de la partition, ça devrait redevenir rapide. Si le problème est au niveau des CPUs ou d'index corrompus, le problème persistera.
[^] # Re: quelques pistes
Posté par orfenor . Évalué à 2 (+0/-0).
Bonne idée, merci
[^] # Re: quelques pistes
Posté par orfenor . Évalué à 2 (+0/-0).
Bon c'est un peu mieux, c'était une bonne idée ! merci.
# Les index
Posté par guitou . Évalué à 4 (+3/-0).
Hello,
A verifier a tout hasard, possible qu'il aient ete corrompus pour une raison x ou y, et que l'optimiseur de requete les zappe.
Sinon, plus globalement, pour avoir une petite idee de ce qui peche, il faut d'abord identifier la (ou les) requete(s) problematique(s), puis tu peux les rejouer avec
explain
/analyze
pour identifier ce qui cause le ralentissement.++
Gi)
[^] # Re: Les index
Posté par orfenor . Évalué à 2 (+0/-0).
Merci merci
Je ne vois pas trop pourquoi des requêtes deviendraient problématiques en changeant de machine. Tu veux dire pour identifier des trous dans l'index ?
(moi aussi j'adore le Génie des alpages)
[^] # Re: Les index
Posté par Elfir3 . Évalué à 3 (+1/-0).
Comme je ne sais pas exactement ce que tu veux dire par une copie du système de fichier (un bête cp/rsync ?) ni si ça concerne aussi la base de données.
Je ne connais pas suffisamment Postgres pour avoir la moindre certitude, mais j'imagine qu'il existe des possibilités pour qu'une copie du système de fichier puisse avoir changé un détail qu'utilise Postgres et qui ferait que les index ne sont plus utilisé.
Donc
1. Est-ce que les index sont toujours en place ?
2. Est-ce que les index sont utilisés ? (il y a la possibilité de demander à postgres de logger les requêtes)
Il me semble qu'un backup (ou restore?) de db fait avec les mauvaises options peut aussi faire perdre les index au passage.
Outre les problèmes de surbooking cités ailleurs, les soucis d'index sont un bel exemple de cause de ralentissements donc même si peu probable avec la méthode suivie, ça ne coute pas grand chose à verifier.
Ah oui, et si tu veux voir un peu où se perdent les perfs, y'a pgbadger qui permet de voir quelles sont les requêtes potentiellement problématiques.
[^] # Re: Les index
Posté par orfenor . Évalué à 2 (+0/-0).
Merci.
L'hébergeur m'a parlé d'une copie du système de fichier, sûrment parce qu'il devait changer de pool VMWare, d'une grappe de serveur à une autre, peut-être localisée ailleurs.
[^] # Re: Les index
Posté par orfenor . Évalué à 2 (+0/-0). Dernière modification le 21 novembre 2024 à 17:54.
(doublon)
# Pg_activity pour investiguer, mais pas que.
Posté par xandercagexxx . Évalué à 4 (+3/-0).
Je peux te conseiller d'utiliser cet outil pour investiguer les requêtes longues https://github.com/dalibo/pg_activity
Autres outils pratique : https://www.postgresql.org/docs/current/pgstatstatements.html
(À activer dans postgresql.conf avec restart de postgres)
Enfin, peut-être revoir les config de ton postgres avec https://pgtune.leopard.in.ua/
(Peut-être une meilleure optimisation à faire sur la nouvelle machine).
[^] # Re: Pg_activity pour investiguer, mais pas que.
Posté par orfenor . Évalué à 3 (+1/-0).
Merci pour l'outil.
La nouvelle machine est la même que l'ancienne, donc pas de config Postgres à ré-optimiser.
[^] # Re: Pg_activity pour investiguer, mais pas que.
Posté par orfenor . Évalué à 2 (+0/-0).
Hélas, rien de notable à signaler avec pg_activity. Tant mieux d'un autre côté.
# changer de machine "VMware"
Posté par steph1978 . Évalué à 4 (+2/-0). Dernière modification le 19 novembre 2024 à 22:36.
Demande à changer de machine puisque c'est ce qui a déclenché le problème.
Cette machine a peut être un problème de disque ou san.
[^] # Re: changer de machine "VMware"
Posté par orfenor . Évalué à 3 (+1/-0).
L'hébergeur me l'a proposé hier. Je le ferai, après avoir vérifié la bdd, faudrait pas que ce 2e changement de machine dégrade encore plus les choses :-)
# points à vérifier
Posté par B r u n o (site web personnel) . Évalué à 5 (+4/-0).
Vérifier la latence réseau entre l'applicatif odoo et le serveur pg, en environnement virtualisé, il y a des surprises des fois. Ils sont sur une même vm ? Ou séparés ?
Pense aussi à regarder le "CPU Ready" de ta vm : tu dis qu'elle a 8 coeurs, si le serveur hôte est plus sollicité ou dispose de moins de coeurs que le précédent, cela peut jouer : quand vmware veut faire tourner ta vm, il doit attendre d'avoir 8 coeurs disponibles. Vouloir mettre trop de coeurs sur une vm n'est pas toujours une bonne idée, surtout que ta base de données ne semble pas énorme.
[^] # Re: points à vérifier
Posté par totof2000 . Évalué à 5 (+3/-0).
effectivement, souvent, les hyperviseurs sont configurés pour faire du surbooking.
[^] # Re: points à vérifier
Posté par orfenor . Évalué à 3 (+1/-0).
Je vais regarder ça, merci du tuyau, je n'aurais pas pensé au surbooking.
Postgres et Odoo sont sur la même machine virtuelle, donc pas de réseau.
[^] # Re: points à vérifier
Posté par orfenor . Évalué à 2 (+0/-0).
Sauf incompréhension, pour choper le CPU Ready il faut être l'hébergeur. Or je suis dans la machine virtuelle. Il y a bien des outils à lancer sur la VM mais il faut d'abord avoir un tas d'infos sur les machine hôtes de l'hyperviseur.
Non ?
Si ?
[^] # Re: points à vérifier
Posté par totof2000 . Évalué à 4 (+2/-0).
vmstat te donne l'info :
The final field st represents the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor. Essentially, the steal time cycle counts the amount of time that your virtual machine is ready to run but could not run due to other virtual machines competing for the CPU.
[^] # Re: points à vérifier
Posté par orfenor . Évalué à 2 (+0/-0).
Merciii ! ce que c'est de lire les pages de man jusqu'au bout!
Bon, c'est zéro depuis le dernier boot donc c'est pas ça.
[^] # Re: points à vérifier
Posté par B r u n o (site web personnel) . Évalué à 2 (+1/-0).
Pas certain que cela soit valable dans ton cas, il semble que l'affichage du
steal time
sur la virtualisation vmware ne soit supportée que depuis le kernel 5.7, cf https://serverfault.com/questions/1161442/cpu-steal-time-vs-cpu-ready-timeJ'ai sous la main des vms qui affichent un
st
à 0 alors que dans la console vmware lecpu ready time
est largement > 0.[^] # Re: points à vérifier
Posté par totof2000 . Évalué à 2 (+0/-0).
Est-c que ça ne dépendrait pas également de la présence des VMWare Tools ?
[^] # Re: points à vérifier
Posté par B r u n o (site web personnel) . Évalué à 3 (+2/-0).
Je pense qu'il faut les VMWare Tools puisqu'il faut que l'hyperviseur échange des infos avec la vm. Mais ce n'est pas suffisant : il faut aussi que le hardware de la vm soit en version 13 minimum pour pouvoir ajouter dans la configuration une entrée
stealclock.enable
àTRUE
. Infos prises ici : https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ab02bb3f55f58e7608a88188000c3353398ebe3bAvec cela et un noyau > à 5.7 j'ai réussi à afficher le
st
danstop
etvmstat
sur une vm VMWare sous Ubuntu 20.04 (merci au passage, je n'y avais jamais fait attention avant).[^] # Re: points à vérifier
Posté par totof2000 . Évalué à 2 (+0/-0).
Merci pour les infos complémentaires et la mise en pratique ( je n'avais jamais eu l'occasion d'utiliser cette fonctionnalité).
# DNS ?
Posté par NeoX . Évalué à 3 (+0/-0). Dernière modification le 21 novembre 2024 à 19:17.
tu as changé d'IP, tu as mis à jour tes enregistrements DNS pour que ton serveur odoo trouve toujours ta base de données, que l'utilisateur venant d'une autre IP puisse toujours se connecter ?
tu as mis à jours les certificats avec la nouvelle IP ?
une firewall configuré qui laissait passer des flux venant de l'ancienne IP vers un equipement externe ou une source de données qui ne serait plus autorisé à cause de la nouvelle IP ?
[^] # Re: DNS ?
Posté par orfenor . Évalué à 2 (+0/-0).
Oui les DNS sont à jours. Mais pourquoi les certificats ?
[^] # Re: DNS ?
Posté par NeoX . Évalué à 3 (+0/-0).
parce que parfois on met les IPs dans le certificat pour quand meme faire du SSL/TLS quand on se connecte via l'IP du serveur plutot que son nom DNS
[^] # Re: DNS ?
Posté par orfenor . Évalué à 2 (+0/-0).
Ah oui. En principe je ne le fais pas, mais j'ai vérifié quand même (RAS). Merci pour l'idée.
[^] # Re: DNS ?
Posté par ted (site web personnel) . Évalué à 2 (+0/-0).
Est ce que tu utilise un nom d'hôte pour la base? Est ce que l'application tente une résolution en ipv6, puis seulement après une en ipv4?
Un LUG en Lorraine : https://enunclic-cappel.fr
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.