Une approche industrielle pour l'optimisation de PostgreSQL : expériences sur des bases de données. Nicolas Samokhalov

Je vous propose de découvrir l'analyse du rapport de Nikolay Samokhvalov "Approche industrielle pour le tuning de PostgreSQL : expériences sur les bases de données"

Shared_buffers = 25 % – est-ce beaucoup ou peu ? Ou est-ce juste ce qu'il faut ? Comment savoir si cette recommandation – quelque peu obsolĂšte – est pertinente dans votre cas spĂ©cifique ?

Il est temps d'aborder la question du choix des paramĂštres postgresql.conf "comme un pro". Pas avec des "auto-tuneurs" aveugles ou des conseils obsolĂštes venant d'articles et de blogs, mais sur la base de :

  1. expérimentations rigoureusement menées sur des bases de données, réalisées de maniÚre automatisée, en grande quantité et dans des conditions aussi proches que possible des environnements de production,
  2. compréhension approfondie des spécificités de fonctionnement des SGBD et des systÚmes d'exploitation.

En utilisant Nancy CLI (https://gitlab.com/postgres.ai/nancy), nous examinerons un exemple concret – le fameux shared_buffers – dans diffĂ©rentes situations, dans divers projets et tenterons de dĂ©terminer comment choisir le rĂ©glage optimal pour notre infrastructure, nos bases de donnĂ©es et notre charge.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nous parlerons des expérimentations sur les bases de données. C'est une histoire qui dure depuis un peu plus de six mois.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Un peu sur moi. J'ai plus de 14 ans d'expérience avec Postgres. J'ai fondé plusieurs entreprises dans le domaine des réseaux sociaux. Postgres a été utilisé et est utilisé partout.

Je fais également partie du groupe RuPostgres sur Meetup, qui est classé deuxiÚme au monde. Nous nous rapprochons lentement des 2 000 membres. RuPostgres.org.

Et lors de diverses conférences, y compris Highload, je suis responsable des bases de données, notamment de Postgres, depuis sa création.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Ces derniÚres années, j'ai relancé ma pratique de conseil sur Postgres dans 11 fuseaux horaires à partir d'ici.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Quand j'ai repris cette activité il y a quelques années, j'avais eu une certaine pause dans le travail manuel avec Postgres, probablement depuis 2010. J'ai été surpris de constater combien le quotidien des DBA avait peu changé, combien de travail manuel était encore nécessaire. Et j'ai tout de suite pensé qu'il y avait un problÚme, qu'il fallait automatiser davantage.

Étant donnĂ© que tout cela Ă©tait Ă  distance, la plupart des clients Ă©taient dans le cloud. Beaucoup de choses Ă©taient dĂ©jĂ  Ă©videntes Ă  automatiser. Nous en reparlerons plus tard. Cela a donc dĂ©bouchĂ© sur l'idĂ©e qu'il fallait une sĂ©rie d'outils, c'est-Ă -dire une sorte de plateforme qui automatise pratiquement toutes les tĂąches des DBA, pour pouvoir gĂ©rer un plus grand nombre de bases.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Dans cette présentation, il n'y aura pas :

  • de « balles d'argent » ou d'affirmations telles que – mettez 8 Go ou 25 % de shared_buffers et vous serez bien. Nous ne parlerons pas beaucoup de shared_buffers.
  • Des «intĂ©rieurs» hardcore.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et qu'est-ce qui va se passer ?

  • Il y aura des principes d'optimisation que nous appliquons et dĂ©veloppons. Il y aura diverses idĂ©es qui surgissent sur notre chemin et diffĂ©rents outils que nous crĂ©ons principalement en Open Source, c'est-Ă -dire que nous basons la majeure partie dans l'Open Source. De plus, nous avons des tickets, presque toute notre communication se fait dans l'Open Source. Vous pouvez voir ce que nous faisons actuellement, ce qui sera dans la prochaine version, etc.
  • Il y aura Ă©galement certaines expĂ©riences d'utilisation de ces principes et outils dans plusieurs entreprises : des petites startups aux grandes sociĂ©tĂ©s.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Comment tout cela évolue-t-il ?

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Tout d'abord, la principale tùche d'un DBA, en plus de garantir la création d'instances, le déploiement de sauvegardes, etc., est de rechercher les goulets d'étranglement et d'optimiser la performance.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Actuellement, cela fonctionne comme suit. Nous regardons la supervision, nous voyant certaines choses, nous manquons de détails. Nous commençons à fouiller plus attentivement, généralement à la main, et comprenons ce qu'il faut en faire de toute façon.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et il y a deux approches. Pg_stat_statements est la solution standard par dĂ©faut pour identifier les requĂȘtes lentes. Et l'analyse des journaux Postgres Ă  l'aide de pgBadger.

Chacune des approches a des défauts sérieux. Dans la premiÚre approche, tous les paramÚtres sont ignorés. Et si nous voyons des groupes SELECT * FROM table where la colonne est égale à «?» ou «$» à partir de la version Postgres 10. Nous ne savons pas si c'est un index scan ou un seq scan. Cela dépend beaucoup du paramÚtre. Si vous y insérez une valeur rarement rencontrée, ce sera un index scan. Si vous y insérez une valeur qui représente 90 % de la table, ce sera un seq scan évidemment, car Postgres connaßt les statistiques. Et c'est un grand inconvénient de pg_stat_statements, bien que des travaux soient en cours.

L'inconvĂ©nient principal de l'analyse des journaux est que vous ne pouvez gĂ©nĂ©ralement pas vous permettre que «log_min_duration_statement = 0». Et nous allons Ă©galement parler de cela. En consĂ©quence, vous ne voyez pas l'ensemble du tableau. Une requĂȘte qui est trĂšs rapide peut consommer une Ă©norme quantitĂ© de ressources, mais vous ne la verrez pas car elle est en dessous de votre seuil.

Comment les DBA résolvent-ils les problÚmes identifiés ?

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Par exemple, nous avons trouvĂ© un problĂšme. Que fait-on gĂ©nĂ©ralement ? Si vous ĂȘtes dĂ©veloppeur, vous travaillerez sur une instance de taille non optimale. Si vous ĂȘtes DBA, vous avez un environnement de staging. Et il ne peut y en avoir qu'un seul. Et cela a six mois de retard. Vous pensez que vous pouvez passer en production. MĂȘme les DBA expĂ©rimentĂ©s vĂ©rifient ensuite en production, sur une rĂ©plique. Parfois, ils crĂ©ent un index temporaire, s'assurent qu'il est utile, le suppriment et le renvoient aux dĂ©veloppeurs pour qu'ils l'incluent dans les fichiers de migration. VoilĂ  Ă  quoi cela ressemble aujourd'hui. Et c'est un problĂšme.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

  • Optimiser les configurations.
  • Optimiser l'ensemble des index.
  • Modifier la requĂȘte SQL elle-mĂȘme (c'est la mĂ©thode la plus complexe).
  • Ajouter des ressources (c'est gĂ©nĂ©ralement la mĂ©thode la plus simple).

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Il y a énormément de choses à connaßtre à ce sujet. Il y a beaucoup de nuances dans Postgres. Il faut en savoir beaucoup. Beaucoup d'index dans Postgres, grùce notamment aux organisateurs de cette conférence. Et il faut tout savoir, c'est ce qui donne aux non-DBA l'impression que les DBA pratiquent une magie noire. En d'autres termes, il faut environ dix ans pour bien comprendre tout cela.

Et je suis un combattant de cette magie noire. Je veux que tout soit fait de maniĂšre technologique et qu'il n'y ait pas d'intuition dans tout cela.

Exemples de la vie réelle

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

J'ai observé cela dans au moins deux projets, y compris le mien. Un autre billet de blog nous dit que la valeur 1000 pour default_statistic_target est correcte. D'accord, essayons cela en production.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et ici, nous, en utilisant notre outil deux ans plus tard avec des expériences sur des bases de données dont nous parlons aujourd'hui, nous pouvons comparer ce qui était et ce qui est devenu.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et pour cela, nous devons créer une expérience. Elle se compose de quatre parties.

  • La premiĂšre est l'environnement. Nous avons besoin du matĂ©riel. Lorsque je viens dans une entreprise et que je signe un contrat, je demande qu'on me donne un matĂ©riel identique Ă  celui de la production. Pour chacun de vos Masters, j'ai besoin d'au moins un matĂ©riel identique. Que ce soit une machine virtuelle dans Amazon ou Google, ou que j'ai besoin exactement du mĂȘme matĂ©riel. En d'autres termes, je veux reproduire l'environnement. Et dans la notion d'environnement, nous incluons la version majeure de Postgres.
  • La deuxiĂšme partie concerne l'objet de nos recherches. C'est la base de donnĂ©es. Elle peut ĂȘtre créée de plusieurs maniĂšres. Je vais montrer comment.
  • La troisiĂšme partie est la charge. C'est le moment le plus complexe.
  • Et la quatriĂšme partie consiste Ă  vĂ©rifier ce que nous allons comparer. Par exemple, nous pouvons modifier un ou plusieurs paramĂštres dans la configuration, ou nous pouvons crĂ©er un index, etc.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nous lançons une expĂ©rience. Voici pg_stat_statements. À gauche, ce qui Ă©tait. À droite, ce qui est devenu.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

À gauche, default_statistics_target = 100, Ă  droite = 1 000. Nous voyons que cela nous a aidĂ©s. En gĂ©nĂ©ral, cela s'est amĂ©liorĂ© de 8 %.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Mais si nous faisons dĂ©filer vers le bas, nous verrons des groupes de requĂȘtes provenant de pgBadger ou de pg_stat_statements. Il y a deux options. Nous allons voir qu'une certaine requĂȘte a chutĂ© de 88 %. Et c'est ici que l'approche ingĂ©nierie entre en jeu. Nous pouvons approfondir, car il est intĂ©ressant de comprendre pourquoi elle a chutĂ©. Il faut comprendre ce qui s'est passĂ© avec les statistiques. Pourquoi plus de buckets dans les statistiques conduisent Ă  des rĂ©sultats pires.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Ou nous pouvons ne pas approfondir, mais faire un « ALTER TABLE 
 ALTER COLUMN » et ramener 100 buckets dans la statistique de cette colonne. Ensuite, par une autre expĂ©rience, nous pouvons nous assurer que ce correctif a aidĂ©. VoilĂ . C'est l'approche ingĂ©nierie qui nous aide Ă  voir le tableau et Ă  prendre des dĂ©cisions basĂ©es sur des donnĂ©es, et non sur l'intuition.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Quelques exemples d'autres domaines. Dans les tests, il existe des tests CI depuis de nombreuses années. Et aucun projet sensé ne fonctionnerait sans tests automatisés.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Dans d'autres secteurs : dans l'aviation, dans l'automobile, lorsque nous testons l'aérodynamique, nous avons également la possibilité de faire des expériences. Nous ne mettrons pas quelque chose du dessin directement dans l'espace, ni ne mettrons une voiture directement sur la route. Par exemple, il y a une soufflerie.

Des observations d'autres secteurs nous permettent de tirer des conclusions.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Tout d'abord, nous avons un environnement spĂ©cial. Il est proche de la production, mais pas tout Ă  fait. Sa principale caractĂ©ristique est qu'il doit ĂȘtre bon marchĂ©, rĂ©pĂ©table et aussi automatisĂ© que possible. De plus, il doit y avoir des moyens spĂ©ciaux pour rĂ©aliser une analyse dĂ©taillĂ©e.

Il est probable que lorsque nous avons lancĂ© l'avion et que nous volons, nous avons moins d'opportunitĂ©s d'Ă©tudier chaque millimĂštre de la surface de l'aile que ce que nous avons dans une soufflerie. Nous avons plus de moyens pour le diagnostic. Nous pouvons nous permettre d'accrocher davantage de choses lourdes que nous ne pouvons pas nous permettre d'introduire dans l'avion en vol. Il en va de mĂȘme avec Postgres. Dans certains cas, nous pouvons activer la journalisation complĂšte des requĂȘtes lors des expĂ©riences. Et nous ne voulons pas faire cela en production. Nous pourrions mĂȘme activer cela avec les plans grĂące Ă  auto_explain.

Et comme je l'ai dĂ©jĂ  dit, un haut niveau d'automatisation signifie que nous avons appuyĂ© sur un bouton et rĂ©pĂ©tĂ©. C'est ainsi que cela doit ĂȘtre, pour qu'il y ait beaucoup d'expĂ©riences, pour que cela soit en continu.

Nancy CLI – la base du « laboratoire de base de donnĂ©es »

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et nous avons créé quelque chose comme ça. C'est-à-dire que j'ai parlé de ces idées en juin, il y a presque un an. Et nous avons déjà dans l'Open Source ce qu'on appelle Nancy CLI. C'est la base pour construire un laboratoire de base de données.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nancy – C'est dans l'Open Source, sur Gitlab. Vous pouvez le dire, vous pouvez l'essayer. J'ai donnĂ© un lien dans les diapos. Vous pouvez cliquer dessus et y accĂ©der. help pour tous les paramĂštres.

Bien sĂ»r, beaucoup de choses sont encore en dĂ©veloppement. Il y a beaucoup d'idĂ©es. Mais c'est dĂ©jĂ  quelque chose que nous utilisons pratiquement tous les jours. Et quand nous avons une idĂ©e – par exemple, que se passe-t-il lorsque nous supprimons 40 000 000 de lignes et que tout est bloquĂ© dans les E/S, nous pouvons mener une expĂ©rience et examiner cela de plus prĂšs pour comprendre ce qui se passe et ensuite tenter de le corriger en cours de route. C'est-Ă -dire que nous menons une expĂ©rience. Par exemple, nous ajustons quelque chose et voyons quel est le rĂ©sultat. Et nous ne le faisons pas en production. C'est l'essence de l'idĂ©e.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

OĂč cela peut-il fonctionner ? Cela peut fonctionner localement, c'est-Ă -dire que cela peut ĂȘtre fait partout, mĂȘme sur un MacBook. Vous avez besoin de Docker, allons-y. Et voilĂ . Vous pouvez le lancer sur un serveur physique, ou dans une machine virtuelle, n'importe oĂč.

Il existe Ă©galement la possibilitĂ© de lancer des instances EC2 sur Amazon, en spots. C'est une fonctionnalitĂ© trĂšs intĂ©ressante. Par exemple, hier, nous avons rĂ©alisĂ© plus de 500 expĂ©riences sur une instance i3, allant de la plus petite Ă  l'i3-16-xlarge. Et ces 500 expĂ©riences ne nous ont coĂ»tĂ© que 64 dollars. Chacune a durĂ© 15 minutes. GrĂące aux spots, cela reste trĂšs abordable – avec une remise de 70 %, et la facturation Ă  la seconde d'Amazon. Vous pouvez rĂ©aliser Ă©normĂ©ment de choses. Vous pouvez mener des recherches concrĂštes.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Trois versions majeures de Postgres sont prises en charge. Ce n'est pas si difficile de peaufiner certaines anciennes versions et la nouvelle version 12 également.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nous pouvons définir l'objet de trois maniÚres. Ce sont :

  • Dump/fichier sql.
  • La mĂ©thode principale est de cloner le rĂ©pertoire PGDATA. En gĂ©nĂ©ral, cela se fait Ă  partir d'un serveur de sauvegarde. Si vous avez de bonnes sauvegardes binaires, vous pouvez en faire des clones. Si vous avez des solutions cloud, c'est le fournisseur de cloud comme Amazon ou Google qui s'en occupera. C'est la mĂ©thode principale pour cloner un environnement de production rĂ©el. C'est de cette maniĂšre que nous dĂ©ployons.
  • Et la derniĂšre mĂ©thode est adaptĂ©e aux recherches, quand on souhaite comprendre comment certaines choses fonctionnent dans Postgres. C'est pgbench. Vous pouvez gĂ©nĂ©rer avec pgbench. C'est simplement une option 'db-pgbench'. Vous lui indiquez l'Ă©chelle. Et tout sera gĂ©nĂ©rĂ© dans le cloud comme prĂ©vu.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et la charge :

  • Nous pouvons exĂ©cuter la charge en un seul flux SQL. C'est la mĂ©thode la plus basique.
  • Ou nous pouvons Ă©muler la charge. Et nous pouvons l'Ă©muler principalement de la maniĂšre suivante. Nous devons rassembler tous les logs. Et c'est douloureux. Je vais vous montrer pourquoi. Et avec pgreplay, qui est intĂ©grĂ© dans Nancy, nous le reproduisons.
  • Ou une autre option. Ce qu'on appelle une charge artisanale, que nous rĂ©alisons avec un certain effort. En analysant notre charge actuelle sur le systĂšme de production, nous extrayons les groupes de requĂȘtes les plus frĂ©quents. Et avec pgbench, nous pouvons Ă©muler cette charge en laboratoire.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

  • Ou nous devons exĂ©cuter une requĂȘte SQL, par exemple pour vĂ©rifier une migration, crĂ©er un index, exĂ©cuter ANALYZE. Et nous voyons ce qu'il y avait avant et aprĂšs le vide. En somme, n'importe quel SQL.
  • Soit nous modifions un ou plusieurs paramĂštres dans la configuration. Nous pouvons demander par exemple de vĂ©rifier 100 valeurs sur Amazon pour notre base de donnĂ©es d'un tĂ©raoctet. Et aprĂšs quelques heures, vous aurez le rĂ©sultat. En gĂ©nĂ©ral, la mise en place d'une base d'un tĂ©raoctet prend plusieurs heures. Mais en dĂ©veloppement, il existe un patch, ce qui signifie que vous pouvez utiliser la mĂȘme pgdata de maniĂšre sĂ©quentielle sur le mĂȘme serveur et effectuer des vĂ©rifications. Postgres va redĂ©marrer, les caches vont ĂȘtre rĂ©initialisĂ©s. Et vous pouvez exĂ©cuter des charges.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

  • Une rĂ©pertoire arrive, contenant une multitude de petits fichiers, allant des snapshots pg.stat***. Et lĂ  oĂč cela devient intĂ©ressant, ce sont pg_stat_statements et pg_stat_kcache. Ce sont deux extensions qui analysent les requĂȘtes. Et pg_stat_bgwriter contient non seulement des statistiques sur pgwriter, mais aussi sur les checkpoints et sur la maniĂšre dont les backend Ă©vacuent les buffers sales. Tout cela mĂ©rite d'ĂȘtre examinĂ©. Par exemple, lorsque nous configurons shared_buffers, il est trĂšs intĂ©ressant de voir quelles ont Ă©tĂ© les Ă©vacuations.
  • Des journaux Postgres arrivent Ă©galement. Deux journaux : le journal de prĂ©paration et le journal de lecture des charges.
  • Une fonctionnalitĂ© relativement nouvelle – ce sont les FlameGraphs.
  • De plus, si vous avez utilisĂ© pgreplay ou les options pgbench pour lire les charges, leur sortie sera d'origine. Vous verrez la latence et le TPS. Vous pourrez comprendre comment ils l'ont perçu.
  • Informations sur le systĂšme.
  • VĂ©rifications de base du CPU et des IO. Cela concerne davantage les instances EC2 sur Amazon, lorsque vous souhaitez lancer 100 instances identiques en parallĂšle et y exĂ©cuter 100 tests diffĂ©rents, vous aurez alors 10 000 expĂ©riences. Vous devez vous assurer que vous n'avez pas eu d'instance dĂ©fectueuse, dĂ©jĂ  soumise Ă  contrainte. Sur ce matĂ©riel, d'autres utilisent des ressources et il vous en restera peu. Il vaut mieux jeter ces rĂ©sultats. GrĂące Ă  sysbench d'Alexey Kopytov, nous effectuons plusieurs vĂ©rifications rapides qui arrivent et peuvent ĂȘtre comparĂ©es avec d'autres, c'est-Ă -dire que vous comprendrez comment le CPU se comporte et comment l'IO se comporte.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Quelles sont les difficultés techniques sur l'exemple de différentes entreprises ?

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Supposons que nous souhaitons reproduire une charge rĂ©elle Ă  l'aide des journaux. Excellente idĂ©e, si cela a Ă©tĂ© Ă©crit sur Open Source pgreplay. Nous l'utilisons. Mais pour qu'il fonctionne bien, vous devez activer la journalisation complĂšte des requĂȘtes avec les paramĂštres et les temps de rĂ©ponse.

Il y a certaines complexités concernant la durée et le timestamp. Nous allons ignorer toute cette complexité. La question principale est : pouvez-vous vous permettre cela ou non ?

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

https://gist.github.com/NikolayS/08d9b7b4845371d03e195a8d8df43408

Le problĂšme est que cela peut ne pas ĂȘtre accessible. Vous devez d'abord comprendre quel flux sera Ă©crit dans le log. Si vous avez pg_stat_statements, vous pouvez utiliser cette requĂȘte (un lien sera disponible dans les diapositives) pour Ă©valuer combien de bytes seront Ă©crits par seconde.

Nous regardons la longueur de la requĂȘte. Nous nĂ©gligeons le fait qu'il n'y ait pas de paramĂštres, mais nous connaissons la longueur de la requĂȘte et combien de fois elle a Ă©tĂ© exĂ©cutĂ©e par seconde. Ainsi, nous pouvons estimer combien de bytes seront Ă©crits par seconde. Nous pouvons nous tromper d'un facteur deux, mais l'ordre de grandeur sera correct.

Nous pouvons voir que cette requĂȘte s'exĂ©cute 802 fois par seconde. Et nous voyons que le dĂ©bit est d'environ 300 kB/s. En gĂ©nĂ©ral, nous pouvons nous permettre un tel flux.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Mais ! Le fait est qu'il existe différents systÚmes de journalisation. Par défaut, les gens utilisent généralement « syslog ».

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et si vous avez syslog, vous pouvez avoir une image comme celle-ci. Nous prendrons pgbench, activerons la journalisation des requĂȘtes et verrons ce qui en rĂ©sulte.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Sans journalisation, c'est la colonne de gauche. Nous avons obtenu 161 000 TPS. Avec syslog – sous Ubuntu 16.04 sur Amazon, nous obtenons 37 000 TPS. Et si nous passons Ă  deux autres mĂ©thodes de journalisation, la situation s'amĂ©liore considĂ©rablement. En d'autres termes, nous nous attendions Ă  une baisse, mais pas Ă  ce point.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et sous CentOS 7, oĂč journald est Ă©galement impliquĂ©, transformant les logs en format binaire pour une recherche facile, c'est un vĂ©ritable cauchemar, nous perdons 44 fois en TPS.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et c'est ce avec quoi les gens doivent composer. Et souvent, dans les entreprises, surtout les grandes, il est trÚs difficile de changer cela. Si vous pouvez vous éloigner de syslog, n'hésitez pas à le faire.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

  • Évaluez les IOPS et le dĂ©bit d'Ă©criture.
  • VĂ©rifiez votre systĂšme de journalisation.
  • Si la charge prĂ©vue est excessivement Ă©levĂ©e, envisagez l'option d'Ă©chantillonnage.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nous avons pg_stat_statements. Comme je l'ai dit, il doit absolument ĂȘtre prĂ©sent. Nous pouvons prendre chaque groupe de requĂȘtes et le dĂ©crire de maniĂšre spĂ©cifique dans un fichier. Ensuite, nous pouvons utiliser une fonctionnalitĂ© trĂšs pratique dans pgbench – la possibilitĂ© d'introduire plusieurs fichiers Ă  l'aide de l'option « -f ».

Il comprend beaucoup de « -f ». Et on peut dire avec « @ » Ă  la fin quelle part chaque fichier doit avoir. C'est-Ă -dire qu'on peut dire que celui-ci doit ĂȘtre exĂ©cutĂ© dans 10 % des cas, et celui-lĂ  dans 20 %. Cela nous rapprochera de ce que nous voyons en production.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Comment comprendrons-nous ce que nous avons en production ? Quelle part et quoi exactement ? Ici, il y a un léger détour. Nous avons un autre produit. postgres-checkup. C'est aussi une base en Open Source. Et nous sommes en train de le développer activement.

Il est nĂ© pour des raisons un peu diffĂ©rentes. Parce qu'il y a un manque de surveillance. C'est-Ă -dire que vous arrivez, vous regardez la base, vous examinez les problĂšmes qui existent. En rĂšgle gĂ©nĂ©rale, vous effectuez un health_check. Si vous ĂȘtes un DBA expĂ©rimentĂ©, vous effectuez un health_check. Vous avez vĂ©rifiĂ© l'utilisation des index, etc. Si vous avez OKmeter, c'est super. C'est un excellent outil de surveillance pour Postgres. OKmeter.io – s'il vous plaĂźt, installez-le, c'est trĂšs bien fait. C'est payant.

Si vous ne l'avez pas, en rÚgle générale, vous avez trÚs peu de données. En surveillance, il y a généralement le CPU, l'IO et sans beaucoup de détails, c'est tout. Nous avons besoin de plus. Nous avons besoin de voir comment fonctionne l'autovacuum, comment fonctionne le checkpoint, et dans l'IO, nous devons séparer le checkpoint du bgwriter et des backends, etc.

Le problĂšme, c'est que lorsque vous aidez une grande entreprise, ils ne peuvent pas mettre en Ɠuvre quelque chose rapidement. Ils ne peuvent pas acheter OKmeter rapidement. Peut-ĂȘtre qu'ils l'achĂšteront dans six mois. Ils ne peuvent pas installer rapidement certains paquets.

Et nous avons eu l'idĂ©e qu'il nous fallait un outil spĂ©cial qui ne nĂ©cessite rien en termes d'installation, c'est-Ă -dire que vous ne devez rien installer en production. Vous l'installez sur votre ordinateur portable ou sur un serveur d'observation, depuis lequel vous allez l'exĂ©cuter. Et il va analyser beaucoup de choses : le systĂšme d'exploitation, le systĂšme de fichiers, et mĂȘme Postgres, en faisant des requĂȘtes lĂ©gĂšres que vous pouvez exĂ©cuter directement en production sans rien faire tomber.

Nous l'avons appelĂ© Postgres-checkup. En termes mĂ©dicaux, c'est un contrĂŽle rĂ©gulier de la santĂ©. Dans le domaine automobile, c'est comme un entretien. Vous faites un entretien pour votre voiture tous les six mois ou chaque annĂ©e, selon la marque. Mais faites-vous un entretien pour votre base de donnĂ©es ? C'est-Ă -dire effectuez-vous une recherche approfondie rĂ©guliĂšrement ? Cela doit ĂȘtre fait. Si vous faites des sauvegardes, faites aussi un checkup, c'est tout aussi important.

Et nous avons un tel outil. Il a commencé à se développer activement il y a seulement trois mois. Il est encore jeune, mais il y a déjà beaucoup de fonctionnalités.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nous rassemblons les groupes de requĂȘtes les plus « influents » – rapport K003 dans Postgres-checkup

Il existe un groupe de rapports K. Pour le moment, trois rapports. Et il y a ce rapport K003. C'est le sommet de pg_stat_statements, trié par total_time.

Lorsque nous trions les groupes de requĂȘtes par total_time, nous observons un groupe en tĂȘte qui sollicite le plus notre systĂšme, c'est-Ă -dire qui consomme le plus de ressources. Pourquoi parle-t-on de groupes de requĂȘtes ? Parce que nous avons Ă©liminĂ© les paramĂštres. Ce ne sont plus des requĂȘtes, mais des groupes de requĂȘtes, c'est-Ă -dire qu'ils sont abstraits.

En optimisant de haut en bas, nous allĂ©geons nos ressources et repoussons le moment oĂč nous devrons effectuer une mise Ă  niveau. C'est un excellent moyen d'Ă©conomiser de l'argent.

Cela dit, ce n'est peut-ĂȘtre pas la meilleure approche en matiĂšre de satisfaction des utilisateurs, car nous ne voyons peut-ĂȘtre pas des cas rares mais trĂšs gĂȘnants oĂč une personne a dĂ» attendre 15 secondes. Ces cas sont si rares qu'ils passent inaperçus, mais nous gĂ©rons les ressources.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Que s'est-il passĂ© dans ce tableau ? Nous avons fait deux instantanĂ©s. Postgres_checkup vous donnera la diffĂ©rence pour chaque mĂ©trique : total-time, appels, lignes, shared_blks_read, etc. VoilĂ , la diffĂ©rence est calculĂ©e. Un gros problĂšme avec pg_stat_statements est qu'il n'oublie pas quand il y a eu rĂ©initialisation. Pendant que pg_stat_database s'en souvient, pg_stat_statements ne s'en souvient pas. Vous voyez un nombre de 1 000 000, mais nous ne savons pas d'oĂč nous l'avons calculĂ©.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Ici, nous savons, nous avons deux instantanés. Nous savons que la différence dans ce cas était de 56 secondes. Un intervalle trÚs court. Nous avons trié par total_time. Ensuite, nous pouvons différencier, c'est-à-dire que nous divisons toutes les métriques par la durée. Si nous divisons chaque métrique par la durée, nous obtenons le nombre d'appels par seconde.

Ensuite, total_time par seconde – c'est ma mĂ©trique prĂ©fĂ©rĂ©e. Elle est mesurĂ©e en secondes, par seconde, c'est-Ă -dire combien de secondes notre systĂšme a mises pour exĂ©cuter ce groupe de requĂȘtes par seconde. Si vous voyez plus d'une seconde par seconde, cela signifie que vous auriez eu besoin de plus d'un cƓur. C'est une trĂšs bonne mĂ©trique. Vous pouvez comprendre que cette personne, par exemple, a besoin d'au moins trois cƓurs.

Voici notre innovation, je n'ai jamais vu cela ailleurs. Faites attention – c'est une chose trĂšs simple – une seconde par seconde. Parfois, lorsque votre CPU est Ă  100 %, pendant une demi-heure par seconde, c'est-Ă -dire que vous n'avez traitĂ© que ces requĂȘtes pendant une demi-heure.

Nous voyons ensuite les lignes par seconde. Nous savons combien de lignes ont été renvoyées par seconde.

Et ensuite, il y a aussi une chose intĂ©ressante. Combien d'entrĂ©es nous avons lues de shared_buffers par seconde. Les hits y Ă©taient dĂ©jĂ , et les lignes ont Ă©tĂ© prises dans le cache du systĂšme d'exploitation, ou sur le disque. La premiĂšre option est rapide, tandis que la seconde peut ĂȘtre rapide ou non, cela dĂ©pend de la situation.

La deuxiĂšme mĂ©thode de diffĂ©renciation consiste Ă  diviser le nombre de requĂȘtes dans ce groupe. Dans la deuxiĂšme colonne, vous aurez toujours une requĂȘte divisĂ© par requĂȘte. Et ensuite, c'est intĂ©ressant – combien de millisecondes ont Ă©tĂ© nĂ©cessaires pour cette requĂȘte. Nous savons comment cette requĂȘte se comporte en moyenne. Il fallait 101 millisecondes pour chaque requĂȘte. C'est une mĂ©trique traditionnelle qui est nĂ©cessaire pour notre comprĂ©hension.

Combien de lignes chaque requĂȘte a renvoyĂ©es en moyenne. Nous voyons que ce groupe renvoie 8. Combien en moyenne ont Ă©tĂ© rĂ©cupĂ©rĂ©es et lues depuis le cache. Nous constatons que tout est parfaitement mis en cache. Un taux de hits constant pour le premier groupe.

Et la quatriĂšme sous-ligne dans chaque ligne – c'est combien de pourcentage du nombre total. Nous avons des appels. Disons, Ă  1 000 000. Et nous pouvons comprendre quelle contribution ce groupe apporte. Nous voyons qu'ici, le premier groupe contribue Ă  moins de 0,01 %. C'est-Ă -dire qu'il est si lent que nous ne le voyons pas dans le tableau gĂ©nĂ©ral. Et le deuxiĂšme groupe – 5 % des appels. C'est-Ă -dire que 5 % de tous les appels proviennent du deuxiĂšme groupe.

Pour total_time, c'est aussi intĂ©ressant. Pour le premier groupe de requĂȘtes, nous avons dĂ©pensĂ© 14 % de tout le temps de fonctionnement. Et pour le second – 11 %, etc.

Je ne vais pas entrer dans les dĂ©tails, mais il y a des subtilitĂ©s. Nous affichons une erreur en haut, car lorsque nous comparons, les instantanĂ©s peuvent ĂȘtre dĂ©calĂ©s, c'est-Ă -dire que certaines requĂȘtes peuvent disparaĂźtre et ne plus apparaĂźtre dans le deuxiĂšme instantanĂ©, tandis que d'autres peuvent apparaĂźtre. Et nous calculons l'erreur lĂ -bas. Si vous voyez 0, c'est bien. Cela signifie qu'il n'y a pas d'erreurs. Si le taux d'erreur est jusqu'Ă  20 %, c'est OK.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nous revenons ensuite à notre thÚme. Nous devons concevoir une charge de travail. Nous procédons de haut en bas jusqu'à ce que nous atteignions 80 % ou 90 %. En général, cela représente 10 à 20 groupes. Et nous préparons des fichiers pour pgbench. Là, nous utilisons random. Malheureusement, cela ne fonctionne pas toujours. Et dans Postgres 12, il y aura plus de possibilités d'utiliser cette approche.

Et ensuite, nous obtenons ainsi 80-90 % sur le total_time. Que devons-nous mettre aprĂšs «@» ? Nous regardons les appels, nous vĂ©rifions le pourcentage et nous comprenons que nous devrions avoir ce pourcentage ici. À partir de ces pourcentages, nous pouvons comprendre comment Ă©quilibrer chacun des fichiers. AprĂšs cela, nous utilisons pgbench et nous commençons Ă  travailler.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Nous avons aussi K001 et K002.

K001 est une grande chaĂźne avec quatre sous-chaĂźnes. C'est la caractĂ©ristique de notre charge globale. Regardez la deuxiĂšme colonne et la deuxiĂšme sous-chaĂźne. Nous voyons qu'il y a environ une seconde et demie par seconde, c'est-Ă -dire que si nous avons deux cƓurs, ce sera bien. Cela donnera environ 75 % de charge. Et cela fonctionnera ainsi. Si nous avons 10 cƓurs, nous serons complĂštement tranquilles. Ainsi, nous pouvons Ă©valuer les ressources.

K002 est ce que j'appelle les classes de requĂȘtes, c'est-Ă -dire SELECT, INSERT, UPDATE, DELETE. Et sĂ©parĂ©ment SELECT FOR UPDATE, car il bloque.

Et ici, nous pouvons conclure que les SELECT normaux de lecture reprĂ©sentent 82 % de tous les appels, mais en mĂȘme temps, ils consomment 74 % du total_time. C'est-Ă -dire qu'ils sont souvent appelĂ©s, mais consomment moins de ressources.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et revenons à la question : « Comment choisir correctement les shared_buffers ? ». Je constate que la plupart des benchmarks sont basés sur l'idée de regarder quel sera le throughput, c'est-à-dire quelle sera la capacité de traitement. Cela est généralement mesuré en TPS ou en QPS.

Et nous essayons d'optimiser les paramÚtres de réglage pour obtenir le maximum de transactions par seconde. Ici, il s'agit de 311 par seconde pour les sélections.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Mais personne ne va travailler et revenir chez soi en voiture Ă  pleine vitesse. C'est stupide. Il en va de mĂȘme pour les bases de donnĂ©es. Nous ne devrions pas fonctionner Ă  pleine vitesse, personne ne le fait d'ailleurs. Personne ne vit dans une production avec 100 % de CPU. Bien que, peut-ĂȘtre, certains le fassent, mais ce n'est pas bon.

L'idée est que nous fonctionnons généralement à environ 20 % de notre capacité, de préférence pas plus de 50 %. Et nous essayons d'optimiser le temps de réponse pour nos utilisateurs en premier lieu. Cela signifie que nous devons ajuster nos paramÚtres de maniÚre à minimiser la latence à une vitesse de 20 %, de maniÚre conditionnelle. C'est une idée que nous essayons également d'utiliser dans nos expériences.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Et pour conclure, voici quelques recommandations :

  • Assurez-vous de crĂ©er un Database Lab.
  • Si possible, faites-le Ă  la demande, de sorte qu'il se dĂ©ploie pour un certain temps - jouez avec et dĂ©truisez-le ensuite. Si vous ĂȘtes dans le cloud, cela va de soi, c'est-Ă -dire ayez beaucoup de standing.
  • Soyez curieux. Et si quelque chose ne va pas, vĂ©rifiez par des expĂ©riences comment cela se comporte. On peut utiliser Nancy pour s'entraĂźner et voir comment fonctionne la base.
  • Et visez un temps de rĂ©ponse minimal.
  • Et n'ayez pas peur des sources de Postgres. Lorsque vous travaillez avec les sources, vous devez connaĂźtre l'anglais. Il y a beaucoup de commentaires, tout est expliquĂ©.
  • Et vĂ©rifiez rĂ©guliĂšrement la santĂ© de la base, au moins une fois tous les trois mois manuellement, ou avec Postgres-checkup.

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

Questions

Merci beaucoup ! C'est trÚs intéressant.

Deux choses.

Oui, deux choses. Mais je n'ai pas tout Ă  fait compris. Lorsque nous travaillons avec Nancy, ne pouvons-nous ajuster qu'un seul paramĂštre ou tout un groupe ?

Nous avons un paramĂštre delta-config. Vous pouvez en modifier autant que vous le souhaitez en mĂȘme temps. Mais il faut comprendre que lorsque vous changez beaucoup de choses, vous pourriez tirer des conclusions erronĂ©es.

Oui. Pourquoi ai-je demandé ? Parce qu'il est difficile de mener des expériences lorsque vous avez seulement un paramÚtre. Vous l'ajustez, vous regardez comment cela fonctionne. Vous l'installez. Puis vous commencez avec le suivant.

Vous pouvez ajuster plusieurs paramĂštres en mĂȘme temps, mais cela dĂ©pend de la situation, bien sĂ»r. Mais il vaut mieux vĂ©rifier une seule idĂ©e Ă  la fois. Hier, nous avons eu une idĂ©e. Nous avions une situation trĂšs similaire. Il y avait deux configs. Et nous ne comprenions pas pourquoi il y avait une si grande diffĂ©rence. Nous avons eu l'idĂ©e d'utiliser la dichotomie pour comprendre successivement et trouver en quoi cela diffĂ©rait. On peut commencer par rendre la moitiĂ© des paramĂštres identiques, puis un quart, etc. C'est tout flexible.

Et j'ai une autre question. Le projet est jeune, il Ă©volue. La documentation est-elle dĂ©jĂ  prĂȘte, y a-t-il une description dĂ©taillĂ©e ?

J'ai mis un lien spĂ©cialement vers la description des paramĂštres. Cela existe. Mais il y a encore beaucoup de choses qui manquent. Je cherche des personnes partageant les mĂȘmes idĂ©es. Et je les trouve lorsque je fais des prĂ©sentations. C'est vraiment gĂ©nial. Certaines personnes travaillent dĂ©jĂ  avec moi, d'autres m'ont aidĂ© et ont fait quelque chose. Et si ce sujet vous intĂ©resse, faites-moi savoir ce qui manque.

Une fois que nous aurons établi le laboratoire, il pourrait y avoir des retours. Nous verrons. Merci !

Bonjour ! Merci pour la présentation ! J'ai vu qu'il y a un soutien pour Amazon. Une prise en charge de GSP est-elle prévue ?

C'est une bonne question. Nous avons commencĂ© Ă  travailler lĂ -dessus. Et pour l'instant, c'est en pause, car nous voulons Ă©conomiser. C'est-Ă -dire qu'il y a un support via l'exĂ©cution sur localhost. Vous pouvez crĂ©er une instance vous-mĂȘme et travailler localement. D'ailleurs, c'est ce que nous faisons. Je fais cela sur Getlab, lĂ  sur GSP. Mais nous ne voyons pas encore l'intĂ©rĂȘt de faire une orchestration comme celle-ci, car il n'y a pas d'instances bon marchĂ© chez Google. Il y a des instances ???, mais elles ont des restrictions. Tout d'abord, elles ont toujours une remise de 70 % et il n'est pas possible de jouer avec le prix. Nous augmentons le prix des instances spot de 5 Ă  10 % pour rĂ©duire la probabilitĂ© que vous soyez interrompu. Donc, avec les instances spot, vous Ă©conomisez, mais elles peuvent ĂȘtre retirĂ©es Ă  tout moment. Si vous fixez un prix lĂ©gĂšrement supĂ©rieur Ă  celui des autres, vous serez tuĂ© plus tard. Chez Google, la spĂ©cificitĂ© est complĂštement diffĂ©rente. Et il y a une autre contrainte trĂšs dĂ©sagrĂ©able : elles ne vivent que 24 heures. Parfois, nous voulons mener une expĂ©rience pendant 5 jours. Mais cela peut ĂȘtre fait avec des instances spot, qui peuvent parfois vivre des mois.

Bonjour ! Merci pour la présentation ! Vous avez mentionné le checkup. Comment calculez-vous les erreurs stat_statements ?

C'est une trĂšs bonne question. Je peux montrer et expliquer en dĂ©tail. En rĂ©sumĂ©, nous examinons comment a Ă©voluĂ© le groupe de requĂȘtes : combien ont Ă©chouĂ© et combien de nouvelles sont apparues. Ensuite, nous examinons deux mĂ©triques : total_time et calls, donc il y a deux erreurs. Et nous regardons quel est l'impact des groupes affectĂ©s. Il y a deux sous-groupes : celui qui est parti et celui qui est arrivĂ©. Nous Ă©tudions leur contribution Ă  l'ensemble.

Avez-vous peur qu'elle soit traitée deux ou trois fois entre les snapshots ?

C'est-à-dire qu'ils se sont réinscrits ou quoi ?

Par exemple, cette requĂȘte a dĂ©jĂ  Ă©tĂ© Ă©vincĂ©e une fois, puis est revenue et a de nouveau Ă©tĂ© Ă©vincĂ©e, puis est encore revenue et a Ă©tĂ© Ă©vincĂ©e. Et vous avez calculĂ© quelque chose ici, oĂč est tout cela ?

C'est une bonne question, il faut regarder.

J'ai fait quelque chose d'analogue. Bien sûr, je l'ai fait plus simplement, tout seul. Mais j'ai dû annuler, faire un reset des stat_statements et m'orienter au moment du snapshot, en vérifiant qu'il y avait moins d'une certaine portion, afin de m'assurer que je n'avais pas atteint le plafond de ce que peuvent accumuler les stat_statements. Je suppose donc qu'il n'y a probablement rien qui a été évincé.

Oui-oui.

Mais je ne comprends pas comment faire de maniĂšre fiable autrement.

Malheureusement, je ne me souviens pas exactement – utilisons-nous le texte de la requĂȘte ou le queryid avec pg_stat_statements et nous nous basons dessus. Si nous nous basons sur le queryid, alors en thĂ©orie, nous comparons des Ă©lĂ©ments comparables.

Non, il peut ĂȘtre Ă©vincĂ© plusieurs fois entre les snapshots et revenir Ă  nouveau.

Avec ce mĂȘme identifiant ?

Oui.

Nous allons étudier cela. C'est une bonne question. Il faut l'examiner. Mais pour l'instant, ce que nous voyons, c'est que nous avons soit 0 inscrit...

C'est un cas rare, mais j'ai Ă©tĂ© surpris d'apprendre que stat_statements peut ĂȘtre Ă©vincĂ©.

Il peut y avoir beaucoup de choses dans pg_stat_statements. Nous avons constaté que si track_utility est activé, les ensembles sont également suivis.

Oui, bien sûr.

Et si vous utilisez Java Hibernate, qui est aléatoire, cela commence à verrouiller la table de hachage. Et dÚs que vous désactivez une application trÚs chargée, vous avez entre 50 et 100 groupes. Et là, tout devient plus ou moins stable. L'une des façons de lutter contre cela est d'augmenter pg_stat_statements.max.

Oui, mais il faut savoir de combien. Et il faut y faire attention. C'est ce que je fais. C'est-à-dire que j'ai pg_stat_statements.max. Et je surveille si, au moment du snapshot, je n'ai pas dépassé 70 %. TrÚs bien, cela signifie que nous n'avons rien perdu. Nous faisons un reset. Et nous accumulons à nouveau. Si au prochain snapshot, c'est moins de 70, cela signifie que nous n'avons probablement rien perdu.

Oui. Par défaut, c'est maintenant 5 000. Et beaucoup de gens s'en contentent.

En général, oui.

Vidéo :

Lire la vidéo

P.S. J'ajoute que si des données confidentielles se trouvent dans Postgres et ne doivent pas se retrouver dans l'environnement de test, il est possible d'utiliser Anonymiseur PostgreSQL. Le schéma est à peu prÚs le suivant :

Approche industrielle du tuning de PostgreSQL : expériences sur les bases de données". Nicolas Samokhvalov

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