La synthÚse comme l'une des méthodes d'amélioration de la performance de PostgreSQL

La synthÚse comme l'une des méthodes d'amélioration de la performance de PostgreSQL

Introduction philosophique

Comme on le sait, il existe seulement deux méthodes pour résoudre des problÚmes :

  1. La méthode d'analyse ou méthode déductive, ou de l général au particulier.
  2. La méthode de synthÚse ou méthode inductive, ou du particulier au général.

Pour résoudre le problÚme "améliorer la performance de la base de données", cela peut ressembler à ceci.

Analyse — nous dĂ©composons le problĂšme en parties distinctes et en les rĂ©solvant, nous essayons finalement d'amĂ©liorer la performance globale de la base de donnĂ©es.

En pratique, l'analyse ressemble Ă  ceci :

  • Un problĂšme survient (incident de performance)
  • Nous collectons des informations statistiques sur l'Ă©tat de la base de donnĂ©es
  • Nous cherchons les goulets d'Ă©tranglement
  • Nous rĂ©solvons les problĂšmes des goulets d'Ă©tranglement

Goulets d'Ă©tranglement de la base de donnĂ©es — infrastructure (CPU, MĂ©moire, Disques, RĂ©seau, OS), configurations (postgresql.conf), requĂȘtes :

Infrastructure: les possibilités d'influence et de changement pour l'ingénieur sont presque nulles.

Configurations de la base de données: les possibilités de changements sont légÚrement supérieures au cas précédent, mais généralement toujours assez difficiles, surtout dans le cloud.

RequĂȘtes Ă  la base de donnĂ©es : le seul domaine de manƓuvre.

SynthĂšse — nous amĂ©liorons la performance des parties individuelles, en espĂ©rant qu'en consĂ©quence, la performance de la base de donnĂ©es s'amĂ©liorera.

Introduction lyrique ou pourquoi tout cela est nécessaire

Comment se déroule le processus de résolution d'incidents de performance, si la performance de la base de données n'est pas surveillée :

Client - "nous avons tout mauvais, lent, faites-nous bien"
Ingénieur - "mauvais, c'est quoi ?"
Client - "voici comment c'est actuellement (il y a une heure, hier, la derniÚre fois c'était), lent"
Ingénieur - "et quand c'était bien ?"
Client - "il y a une semaine (deux semaines), c'était pas mal." (C'est de la chance)
Client - "je ne me souviens pas quand c'était bon, mais maintenant c'est mauvais" (Réponse habituelle)

Le résultat donne un tableau classique :

La synthÚse comme l'une des méthodes d'amélioration de la performance de PostgreSQL

Qui est responsable et que faire ?

Pour la premiÚre partie de la question, il est plus facile de répondre - c'est toujours la faute de l'ingénieur DBA.

Pour la deuxiÚme partie, ce n'est pas trop difficile non plus - il faut mettre en place un systÚme de surveillance des performances de la base de données.

La premiĂšre question se pose - que surveiller ?

Chemin 1. Nous allons surveiller TOUT

La synthÚse comme l'une des méthodes d'amélioration de la performance de PostgreSQL

La charge CPU, le nombre d'opérations de lecture/écriture sur le disque, la taille de la mémoire allouée, et encore une méga-tonne de différents compteurs que tout systÚme de surveillance fonctionnel peut fournir.

Le rĂ©sultat est une multitude de graphiques, de tableaux rĂ©capitulatifs et des alertes constantes par e-mail, ainsi qu'une occupation Ă  100 % de l'ingĂ©nieur Ă  traiter une multitude de tickets identiques, qui se formulent gĂ©nĂ©ralement de maniĂšre standard — « ProblĂšme temporaire. Aucune action requise ». Mais au moins, tout le monde est occupĂ©, et il y a toujours quelque chose Ă  montrer au client — le travail est en cours.

Voie 2. Surveiller uniquement ce qui est nécessaire, et ne pas surveiller ce qui n'est pas nécessaire.

On peut surveiller, un peu différemment : uniquement les entités et les événements :

  • Sur lesquels l'ingĂ©nieur DBA peut agir.
  • Pour lesquels il existe un algorithme d'actions en cas d'Ă©vĂ©nement ou de changement d'entitĂ©.

À partir de cette hypothĂšse et en se souvenant de «Introduction philosophique», afin d'Ă©viter la rĂ©pĂ©tition rĂ©guliĂšre de «Introduction lyrique ou pourquoi tout cela est nĂ©cessaire», il serait judicieux de surveiller la performance des requĂȘtes spĂ©cifiques, pour optimiser et analyser, ce qui devrait finalement mener Ă  une amĂ©lioration des performances de l'ensemble de la base de donnĂ©es.

Mais pour amĂ©liorer une requĂȘte lourde qui affecte la performance gĂ©nĂ©rale de la base de donnĂ©es, il faut d'abord la trouver.

Ainsi, deux questions interdépendantes se posent :

  • quelle requĂȘte est considĂ©rĂ©e comme lourde
  • comment trouver les requĂȘtes lourdes.

Évidemment, une requĂȘte lourde est celle qui utilise beaucoup de ressources systĂšme pour obtenir un rĂ©sultat.

Passons Ă  la deuxiĂšme question — comment chercher et ensuite surveiller les requĂȘtes lourdes ?

Quelles options de surveillance des requĂȘtes existent dans PostgreSQL ?

ComparĂ© Ă  Oracle, les options sont un peu limitĂ©es, mais quelques actions peuvent tout de mĂȘme ĂȘtre entreprises.

La synthÚse comme l'une des méthodes d'amélioration de la performance de PostgreSQL

PG_STAT_STATEMENTS

Pour trouver et surveiller les requĂȘtes lourdes dans PostgreSQL, l'extension standard pg_stat_statements est utilisĂ©e.

AprĂšs l'installation de l'extension, une vue du mĂȘme nom apparaĂźt dans la base de donnĂ©es cible, qui doit ĂȘtre utilisĂ©e Ă  des fins de surveillance.

Colonnes cibles de pg_stat_statements pour construire un systĂšme de surveillance :

  • queryid Code de hachage interne, calculĂ© Ă  partir de l'arbre d'analyse de l'instruction.
  • max_time Temps maximum consacrĂ© Ă  l'instruction, en millisecondes.

En accumulant et en utilisant des statistiques sur ces deux colonnes, on peut construire un systĂšme de surveillance.

Comment pg_stat_statements est utilisé pour surveiller les performances de PostgreSQL

La synthÚse comme l'une des méthodes d'amélioration de la performance de PostgreSQL

Pour surveiller les performances des requĂȘtes, on utilise :
Du cĂŽtĂ© de la base de donnĂ©es cible — la vue pg_stat_statements
Du cĂŽtĂ© de serveurs et de la base de donnĂ©es de surveillance — un ensemble de scripts bash et de tables de service.

Étape 1 - collecte de donnĂ©es statistiques

Sur l'hÎte de surveillance, un script est exécuté réguliÚrement par cron, qui copie le contenu de la vue pg_stat_statements de la base de données cible dans la table pg_stat_history de la base de données de surveillance.

Ainsi, l'historique de l'exĂ©cution des requĂȘtes individuelles est constituĂ©, ce qui peut ĂȘtre utilisĂ© pour gĂ©nĂ©rer des rapports de performance et configurer des mĂ©triques.

Étape 2 - configuration des mĂ©triques de performance

Sur la base des donnĂ©es collectĂ©es, nous choisissons les requĂȘtes dont l'exĂ©cution est la plus critique/essentielle pour le client (l'application). En accord avec le client, nous Ă©tablissons les valeurs des mĂ©triques de performance en utilisant les champs queryid et max_time.

Résultat - début de la surveillance des performances

  1. Lors de son lancement, le script de surveillance vérifie les métriques de performance configurées, en comparant la valeur max_time de la métrique avec la valeur de la vue pg_stat_statements dans la base de données cible.
  2. Si la valeur dans la base de données cible dépasse la valeur de la métrique, un avertissement est généré (incident dans le systÚme de tickets)

Fonctionnalité supplémentaire 1

Historique des plans d'exĂ©cution des requĂȘtes

Pour une rĂ©solution ultĂ©rieure des incidents de performance, il est trĂšs utile d'avoir un historique des modifications des plans d'exĂ©cution des requĂȘtes.

Pour stocker l'historique, une table de service log_query est utilisĂ©e. La table est remplie lors de l'analyse du fichier journal chargĂ© de PostgreSQL. Étant donnĂ© que le fichier journal, contrairement Ă  la vue pg_stat_statements, contient le texte complet avec les valeurs des paramĂštres d'exĂ©cution, et non le texte normalisĂ©, il est possible de conserver non seulement le temps et la durĂ©e des requĂȘtes, mais aussi d'enregistrer les plans d'exĂ©cution Ă  un moment donnĂ©.

Fonctionnalité supplémentaire 2

Processus d'amélioration continue des performances

La surveillance des requĂȘtes individuelles n'est gĂ©nĂ©ralement pas destinĂ©e Ă  rĂ©soudre le problĂšme de l'amĂ©lioration continue des performances de la base de donnĂ©es dans son ensemble, car elle ne gĂšre que les problĂšmes de performance pour des requĂȘtes spĂ©cifiques. Cependant, il est possible d'Ă©largir la mĂ©thode et de configurer la surveillance des requĂȘtes pour toutes les bases de donnĂ©es.

Pour cela, il faut introduire des métriques de performance supplémentaires :

  • Ces derniers jours
  • Pour une pĂ©riode de base

Le script sĂ©lectionne les requĂȘtes de la vue pg_stat_statements de la base de donnĂ©es cible et compare la valeur max_time Ă  la moyenne max_time, dans le premier cas sur les jours rĂ©cents ou sur une pĂ©riode de temps choisie (baseline), dans le second cas.

Ainsi, en cas de dĂ©gradation des performances pour toute requĂȘte, un avertissement sera gĂ©nĂ©rĂ© automatiquement, sans analyse manuelle des rapports.

Et quel est le rapport avec la synthĂšse ?

Dans l'approche décrite, comme le suppose la méthode de synthÚse - en améliorant des parties individuelles du systÚme, nous améliorons le systÚme dans son ensemble.

  • RequĂȘte exĂ©cutĂ©e par la base de donnĂ©es - thĂšse
  • RequĂȘte modifiĂ©e - antithĂšse
  • Changement d'Ă©tat du systĂšme - synthĂšse

La synthÚse comme l'une des méthodes d'amélioration de la performance de PostgreSQL

Développement du systÚme

  • Extension des statistiques collectĂ©es en ajoutant l'historique Ă  la vue systĂšme pg_stat_activity
  • Extension des statistiques collectĂ©es en ajoutant l'historique pour les statistiques des tables individuelles participant aux requĂȘtes
  • IntĂ©gration avec le systĂšme de surveillance dans le cloud AWS
  • Et encore, on peut imaginer quelque chose


Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster