<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: francisadp</title>
    <description>The latest articles on DEV Community by francisadp (@francisadp).</description>
    <link>https://dev.to/francisadp</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F820570%2F26f345ef-9207-40ca-869e-50044d67397c.jpeg</url>
      <title>DEV Community: francisadp</title>
      <link>https://dev.to/francisadp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/francisadp"/>
    <language>en</language>
    <item>
      <title>PostgreSQL 14 et Authentification SCRAM. Dois-je migrer vers SCRAM?</title>
      <dc:creator>francisadp</dc:creator>
      <pubDate>Wed, 16 Mar 2022 10:38:46 +0000</pubDate>
      <link>https://dev.to/francisadp/postgresql-14-et-authentification-scram-dois-je-migrer-vers-scram-55d4</link>
      <guid>https://dev.to/francisadp/postgresql-14-et-authentification-scram-dois-je-migrer-vers-scram-55d4</guid>
      <description>&lt;p&gt;&lt;em&gt;Notre blog &lt;a href="https://www.lesamisdepercona.fr/posts/postgresql14-authentification-dois-je-migrer-vers-scram/"&gt;lesamisdepercona.fr&lt;/a&gt; est dedié à la base de donnée open source MySQL, PostgreSQL, MongoDB et les Produits Percona&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Récemment, quelques utilisateurs de PostgreSQL ont signalé avoir eu des échecs de connexion après avoir passés à PostgreSQL 14.&lt;/p&gt;

&lt;p&gt;“ &lt;em&gt;Pourquoi est-ce que j'obtiens l'erreur **FATAL : l'authentification du mot de passe a échoué pour un utilisateur&lt;/em&gt;* dans le nouveau serveur ?* » est devenue l'une des questions les plus intrigantes.&lt;/p&gt;

&lt;p&gt;Au moins dans un cas, c'était un peu surprenant que le message d'application soit le suivant :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FATAL : La connexion à la base de données a échoué : la connexion au serveur sur «localhost» (::1 ), le port 5432 a échoué : fe_sendauth : aucun mot de passe fourni&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La raison de ces erreurs est que les valeurs par défaut pour le chiffrement du mot de passe sont modifiées dans les nouvelles versions de PostgreSQL vers l'authentification SCRAM. Même si le dernier ne semble rien directement lié à SCRAM, oh oui, un script de post-installation a échoué qui cherchait "md5".&lt;/p&gt;

&lt;p&gt;L'authentification SCRAM n'est pas quelque chose de nouveau dans PostgreSQL . Il était là depuis PostgreSQL 10 mais n'a jamais affecté DBA en général car cela n'a jamais été la valeur par défaut. Il s'agissait d'une fonctionnalité opt-in en modifiant explicitement les paramètres par défaut. Ceux qui font un opt-in comprennent généralement et le font intentionnellement, et cela n'a jamais causé de problème. La communauté PostgreSQL était réticente à en faire une méthode de choix pendant des années car de nombreuses bibliothèques client/application n'étaient pas prêtes pour l'authentification SCRAM.&lt;/p&gt;

&lt;p&gt;Mais cela change dans PostgreSQL 14. Avec PostgreSQL 9.6 qui n'est plus pris en charge, le paysage change. Maintenant, nous nous attendons à ce que toutes les anciennes bibliothèques clientes soient mises à niveau et l'authentification SCRAM devient la principale méthode d'authentification par mot de passe. Mais, ceux qui l'ignorent complètement vont être accueillis par une surprise un jour ou l'autre. Le but de cet article est de créer une prise de conscience rapide pour ceux qui ne le sont pas encore et de répondre à certaines des questions fréquemment posées.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qu'est-ce que l'authentification SCRAM ?
&lt;/h2&gt;

&lt;p&gt;En termes simples, la base de &lt;strong&gt;données&lt;/strong&gt; &lt;strong&gt;le client et le serveur se prouvent et se convainquent qu'ils connaissent le mot de passe sans échanger le mot de passe ou le hashage du mot de passe&lt;/strong&gt; . Oui, c'est possible en faisant un défi et des réponses salés, SCRAM-SHA-256, comme spécifié par &lt;a href="https://datatracker.ietf.org/doc/html/rfc7677"&gt;RFC 7677 &lt;/a&gt;. Cette façon de stocker, de communiquer et de vérifier les mots de passe rend très difficile la rupture d'un mot de passe.&lt;/p&gt;

&lt;p&gt;Cette méthode est plus résistante à :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dictionnaire attaques&lt;/li&gt;
&lt;li&gt;Rejouer attaques&lt;/li&gt;
&lt;li&gt;Hashes volés&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dans l'ensemble, il devient très difficile de casser une authentification par mot de passe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Qu'est-ce qui a changé avec le temps ?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Liaison de canal
&lt;/h3&gt;

&lt;p&gt;L'authentification n'est qu'une partie de la communication sécurisée. Après l'authentification, un serveur malveillant au milieu peut potentiellement prendre le relais et tromper la connexion client. PostgreSQL 11 a introduit SCRAM-SHA-256-PLUS qui prend en charge la liaison de canal. C'est pour s'assurer qu'il n'y a pas de serveur malveillant agissant comme un vrai serveur OU faisant une attaque de l'homme du milieu.&lt;/p&gt;

&lt;p&gt;À partir de PostgreSQL 13, un client peut demander et même insister sur la liaison de canal.&lt;/p&gt;

&lt;p&gt;Par exemple :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql -U postgres -h c76pri channel_binding=prefer
or
psql -U postgres -h c76pri channel_binding=require
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La liaison de canal fonctionne sur SSL/TLS, la configuration SSL/TLS est donc obligatoire pour que la liaison de canal fonctionne.&lt;/p&gt;

&lt;h3&gt;
  
  
  Définition du mot de passe de cryptage
&lt;/h3&gt;

&lt;p&gt;Le &lt;strong&gt;md5&lt;/strong&gt; était la seule option disponible pour le chiffrement de mot de passe avant PostgreSQL 10, donc PostgreSQL permet aux paramètres d'indiquer que "le chiffrement de mot de passe est requis" qui est par défaut à md5.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;–Upto PG 13
postgres=# set password_encryption TO ON;
SET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour la même raison, la déclaration ci-dessus était effectivement la même que :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres=# set password_encryption TO MD5;
SET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nous pourrions même utiliser "vrai", "1", "oui" au lieu de "on" comme valeur équivalente.&lt;/p&gt;

&lt;p&gt;Mais maintenant, nous avons plusieurs méthodes de cryptage et "ON" ne transmet pas vraiment ce que nous voulons vraiment. Ainsi, à partir de PostgreSQL 14, le système s'attend à ce que nous spécifions la méthode de chiffrement.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres=# set password_encryption TO 'scram-sha-256';
SET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres=# set password_encryption TO 'md5';
SET
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Toute tentative d'utiliser "on"/"true", "yes" sera rejetée avec une erreur.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;–-From PG 14
postgres=# set password_encryption TO 'on';
ERROR:  invalid value for parameter "password_encryption": "on"
HINT:  Available values: md5, scram-sha-256.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veuillez donc vérifier vos scripts et vous assurer qu'ils n'ont pas l'ancienne méthode "d'activation" du chiffrement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quelque Question Fréquemment posées
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ma sauvegarde et ma restauration logiques sont-elles affectées ?&lt;/strong&gt; 
Sauvegarde et restauration logique de PostgreSQL globals ( pg_dumpall ) n'affectera pas l'authentification SCRAM, le même mot de passe devrait fonctionner après la restauration. En fait, il sera intéressant de rappeler que l'authentification SCRAM est plus résistante aux changements. Par exemple, si nous renommons un USER, l'ancien mot de passe MD5 ne fonctionnera plus, car la façon dont PostgreSQL génère le MD5 utilise également le nom d'utilisateur. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;postgres =# ALTER USER jobin1 RENOMMER EN jobin ; &lt;br&gt;
   AVIS : Le mot de passe MD5 a été effacé en raison du rôle renameALTER ROLE&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Comme le NOTICE l'indique, le hashage du mot de passe dans pg_authid sera effacé car l'ancien n'est plus valide. Mais ce ne sera pas le cas avec l'authentification SCRAM, car nous pouvons renommer les utilisateurs sans affecter le mot de passe. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;postgres =# ALTER USER jobin RENOMMER EN jobin1 ; &lt;br&gt;
   MODIFIER LE RÔLE&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;La méthode de cryptage existante/ancienne (md5) était une grande vulnérabilité. Y avait-il un gros risque ?&lt;/strong&gt; &lt;br&gt;
Cette inquiétude vient principalement du nom "MD5" qui est bien trop idiot pour le matériel moderne. La façon dont PostgreSQL utilise md5 est différente, ce n'est pas seulement le hashage du mot de passe, mais il considère également le nom d'utilisateur. De plus, il est communiqué sur le réseau après avoir préparé un hashage avec un salt aléatoire fourni par le serveur. Effectivement ce qui est communiqué sera différent du hashage du mot de passe, il n'est donc pas trop vulnérable. Mais sujet aux attaques par dictionnaire et aux fuites de problèmes de hashage du mot de passe du nom d'utilisateur.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Les nouvelles annonces d'authentification scram sont-elles complexes à authentifier ? Est-ce que ma demande de connexion va prendre plus de temps ?&lt;/strong&gt; &lt;br&gt;
Le protocole filaire SCRAM est très efficace et n'est pas connu pour provoquer de dégradation du temps de connexion. De plus, par rapport aux autres surcoûts de la gestion des connexions côté serveur, le surcoût créé par SCRAM devient très négligeable&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Est-il obligatoire d'utiliser l'authentification SCRAM depuis PostgreSQL 14 et de forcer tous mes comptes utilisateurs à y basculer ?&lt;/strong&gt; &lt;br&gt;
Absolument pas, seules les valeurs par défaut sont modifiées. L'ancienne méthode md5 est toujours une méthode valide qui fonctionne très bien, et si l'accès à l'environnement PostgreSQL est restreint par des règles de pare-feu/ hba , il y a déjà moins de risques à utiliser md5.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pourquoi est-ce que j'obtiens l'erreur « : FATAL : l'authentification du mot de passe a échoué pour l'utilisateur » lorsque je suis passé à PostgreSQL 14 ?&lt;/strong&gt; &lt;br&gt;
La raison la plus probable est les entrées pg_hba.conf . Si nous spécifions "md5" comme méthode d'authentification, PostgreSQL autorisera également l'authentification SCRAM. Mais l'inverse ne fonctionnera pas. Lorsque vous avez créé l'environnement PostgreSQL 14, il peut très probablement avoir "scram-sha-256" comme méthode d'authentification. Dans certains des packages PostgreSQL, le script d'installation le fait automatiquement pour vous. Dans le cas où l'authentification fonctionne à partir des outils client PostgreSQL et non à partir de l'application, veuillez &lt;a href="https://wiki.postgresql.org/wiki/List_of_drivers"&gt;vérifier la version du pilote&lt;/a&gt; et vérifier la portée de la mise à niveau&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pourquoi ai-je d'autres types d'erreurs d'authentification ?&lt;/strong&gt; &lt;br&gt;
Les raisons les plus probables sont les scripts de post-installation. Il est courant dans de nombreuses organisations d'utiliser des outils DevOps ( Ansible /Chef) ou même des scripts shell pour effectuer les personnalisations post-installation. Beaucoup d'entre eux feront une gamme de choses qui impliquent des étapes telles que set password_encryption TO ON; ou même la modification de pg_hba.conf en utilisant sed , qui devrait échouer s'il essaie de modifier une entrée qui n'y est plus.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Pourquoi devrais-je m'en soucier et que faire
&lt;/h2&gt;

&lt;p&gt;Tout ce qui commence par les scripts d'automatisation/déploiement, les outils, les connexions d'application et les poolers de connexion peut potentiellement se casser. L'un des principaux arguments pour retarder ce changement jusqu'à PostgreSQL 14 est que la version la plus ancienne prise en charge (9.6) ne sera bientôt plus prise en charge. C'est donc le bon moment pour inspecter vos environnements pour voir si l'un de ces environnements possède d'anciennes bibliothèques PostgreSQL (9.6 ou antérieures) et avoir un plan pour la mise à niveau, car les bibliothèques PostgreSQL de l'ancienne version ne peuvent pas gérer les négociations SCRAM.&lt;/p&gt;

&lt;p&gt;En résumé, avoir un bon plan pour migrer aidera, même si ce n'est pas urgent.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inspectez les environnements et les pilotes d'application pour voir si l'un d'entre eux utilise encore d'anciennes versions des bibliothèques client PostgreSQL et mettez-les à niveau si nécessaire. 
Veuillez vous référer à : &lt;a href="https://wiki.postgresql.org/wiki/List_of_drivers"&gt;https://wiki.postgresql.org/wiki/List_of_drivers &lt;/a&gt;
Encourager / Piloter la mise à niveau des bibliothèques clientes avec un calendrier&lt;/li&gt;
&lt;li&gt;Si l'environnement existant utilise md5, encouragez les utilisateurs à passer à l'authentification 
SCRAM . N'oubliez pas que la méthode d'authentification mentionnée comme "md5" dans pg_hba.conf continuera à fonctionner pour l'authentification SCRAM et MD5 dans PostgreSQL 14 également.&lt;/li&gt;
&lt;li&gt;Profitez de chaque occasion pour tester et migrer l'automatisation, les pooleurs de connexions et d'autres infrastructures vers l'authentification SCRAM.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En modifiant l'authentification par défaut, la communauté PostgreSQL montre une direction claire pour l'avenir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Percona Distribution for PostgreSQL fournit les meilleurs composants entreprise de la communauté open source, dans une distribution unique, conçue et testée pour fonctionner ensemble.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.percona.com/software/postgresql-distribution"&gt;Téléchargez Percona Distribution pour PostgreSQL&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source en anglais: &lt;a href="https://www.percona.com/blog/postgresql-14-and-recent-scram-authentication-changes-should-i-migrate-to-scram/"&gt;Percona&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Comparaison entre mysqldump vs MySQL Shell Utilities vs mydumper vs mysqlpump vs XtraBackup</title>
      <dc:creator>francisadp</dc:creator>
      <pubDate>Wed, 09 Mar 2022 09:58:48 +0000</pubDate>
      <link>https://dev.to/francisadp/comparaison-entre-mysqldump-vs-mysql-shell-utilities-vs-mydumper-vs-mysqlpump-vs-xtrabackup-22mm</link>
      <guid>https://dev.to/francisadp/comparaison-entre-mysqldump-vs-mysql-shell-utilities-vs-mydumper-vs-mysqlpump-vs-xtrabackup-22mm</guid>
      <description>&lt;p&gt;Dans cet article de blog, nous comparerons les performances d’une sauvegarde à partir d’une base de données MySQL à l’aide de mysqldump , de la fonctionnalité MySQL Shell appelée Instance Dump , mysqlpump , mydumper et Percona XtraBackup . Toutes ces options disponibles sont open source et gratuites pour toute la communauté.&lt;/p&gt;

&lt;p&gt;Pour commencer, voyons les résultats du test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Résultats de Benchmark
&lt;/h2&gt;

&lt;p&gt;Le benchmark a été exécuté sur une instance m5dn.8xlarge , avec 128 Go de RAM, 32 vCPU et 2 disques NVMe de 600 Go (un pour la sauvegarde et l’autre pour les données MySQL ). La version MySQL était 8.0.26 et configurée avec 89 Go de pool de mémoire tampon, 20 Go de journal de rétablissement et une base de données exemple de 177 Go (plus de détails ci-dessous).&lt;/p&gt;

&lt;p&gt;Nous pouvons observer les résultats dans le tableau ci-dessous :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--R_3XdcDn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zst3r0dqns20ng1m1b0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--R_3XdcDn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zst3r0dqns20ng1m1b0b.png" alt="Image description" width="880" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Et si nous analysons le graphique uniquement pour les options multi-thread:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BwYiWIWZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wczox536z17nyay5jzi1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BwYiWIWZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wczox536z17nyay5jzi1.png" alt="Image description" width="880" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Comme nous pouvons le voir, pour chaque logiciel, j'ai exécuté chaque commande trois fois afin d'expérimenter en utilisant 16, 32 et 64 threads. L'exception à cela est mysqldump, qui n'a pas d'option parallèle et ne s'exécute qu'en mode monothread.&lt;/p&gt;

&lt;p&gt;Nous pouvons observer des résultats intéressants :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lors de l'utilisation de la compression zstd , mydumper brille vraiment en termes de performances. Cette option était ajouté il n'y a pas longtemps ( &lt;a href="https://www.percona.com/blog/mydumper-0-11-3-is-now-available/"&gt;MyDumper 0.11.3&lt;/a&gt; ).&lt;/li&gt;
&lt;li&gt;Lorsque mydumper utilise gzip , MySQL Shell est l'option de sauvegarde la plus rapide.&lt;/li&gt;
&lt;li&gt;En 3ème nous avons Percona XtraBackup .&lt;/li&gt;
&lt;li&gt;mysqlpump est le 4ème plus rapide suivi de plus près par mydumper lors de l'utilisation de gzip .&lt;/li&gt;
&lt;li&gt;mysqldump est le style classique de la vieille école pour effectuer des vidages et est le plus lent des quatre outils.&lt;/li&gt;
&lt;li&gt;Dans un serveur avec plus de processeurs, le parallélisme potentiel augmente, donnant encore plus d'avantages aux outils qui peuvent bénéficier de plusieurs threads.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Spécifications matérielles et logicielles
&lt;/h2&gt;

&lt;p&gt;Voici les spécifications du benchmark :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;32 CPUs&lt;/li&gt;
&lt;li&gt;128 Go de mémoire&lt;/li&gt;
&lt;li&gt;2x NVMe disques 600 Go&lt;/li&gt;
&lt;li&gt;Centos 7.9&lt;/li&gt;
&lt;li&gt;MySQL 8.0.26&lt;/li&gt;
&lt;li&gt;MySQL Shell 8.0.26&lt;/li&gt;
&lt;li&gt;mydumper 0.11.5 – gzip&lt;/li&gt;
&lt;li&gt;mydumper 0.11.5 – zstd&lt;/li&gt;
&lt;li&gt;Xtrabackup 8.0.26&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La configuration &lt;code&gt;my.cnf&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[mysqld]
innodb_buffer_pool_size = 89G
innodb_log_file_size = 10G
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test de performance
&lt;/h2&gt;

&lt;p&gt;Pour le test, j'ai utilisé sysbench pour remplir MySQL. Pour charger les données, je choisis la méthode &lt;a href="https://github.com/Percona-Lab/sysbench-tpcc"&gt;tpcc &lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ./tpcc.lua  --mysql-user=sysbench --mysql-password='sysbench' --mysql-db=percona --time=300 --threads=64 --report-interval=1 --tables=10 --scale=100 --db-driver=mysql prepare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Avant de commencer la comparaison, j'ai exécuté mysqldump une fois et j'ai ignoré les résultats pour réchauffer le cache, sinon notre test serait biaisé car la première sauvegarde devrait récupérer les données du disque et non du cache.&lt;/p&gt;

&lt;p&gt;Avec tout défini, j'ai démarré le mysqldump avec les options suivantes :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ time mysqldump --all-databases --max-allowed-packet=4294967295 --single-transaction -R --master-data=2 --flush-logs | gzip &amp;gt; /backup/dump.dmp.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour l'utilitaire Shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mysqlsh
MySQL JS &amp;gt; shell.connect('root@localhost:3306');
MySQL localhost:3306 ssl test JS &amp;gt; util.dumpInstance("/backup", {ocimds: true, compatibility: ["strip_restricted_grants","ignore_missing_pks"],threads: 16})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour &lt;code&gt;mydumper&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ time mydumper  --threads=16  --trx-consistency-only --events --routines --triggers --compress --outputdir /backup/ --logfile /backup/log.out --verbose=2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;PS : Pour utiliser zstd , il n'y a aucun changement dans la ligne de commande, mais vous devez télécharger les &lt;a href="https://github.com/mydumper/mydumper/releases"&gt;zstd binaires &lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Pour &lt;code&gt;mysqlpump&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ time mysqlpump --default-parallelism=16 --all-databases &amp;gt; backup.out
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pour &lt;code&gt;xtrabackup&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ time xtrabackup --backup --parallel=16 --compress --compress-threads=16 --datadir=/mysql_data/ --target-dir=/backup/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Analyse des résultats
&lt;/h2&gt;

&lt;p&gt;Et que nous disent les résultats ?&lt;/p&gt;

&lt;p&gt;Les méthodes parallèles ont un débit de performances similaire. L' outil &lt;code&gt;mydumper&lt;/code&gt; a réduit le temps d'exécution de 50 % lors de l'utilisation de &lt;code&gt;zstd&lt;/code&gt; au lieu de &lt;code&gt;gzip&lt;/code&gt; , de sorte que la méthode de compression fait une grande différence lors de l'utilisation de &lt;code&gt;mydumper&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;Pour l’utilitaire &lt;code&gt;util.dumpInstance&lt;/code&gt;, l'un des avantages est que l'outil stocke les données au format binaire et texte et utilise la compression &lt;code&gt;zstd&lt;/code&gt; par défaut. Comme mydumper, il utilise plusieurs fichiers pour stocker les données et a un bon taux de compression.&lt;/p&gt;

&lt;p&gt;XtraBackup a obtenu la troisième place avec quelques secondes de différence par rapport au MySQL shell. Le principal avantage de XtraBackup est sa flexibilité, fournissant le PITR et le chiffrement par exemple.&lt;/p&gt;

&lt;p&gt;Ensuite, &lt;code&gt;mysqlpump&lt;/code&gt; est plus efficace que mydumper avec &lt;code&gt;gzip&lt;/code&gt; , mais seulement par une petite marge. Les deux sont des méthodes de sauvegarde logiques et fonctionnent de la même manière. J'ai testé &lt;code&gt;mysqlpump&lt;/code&gt; avec la compression &lt;code&gt;zstd&lt;/code&gt;, mais les résultats étaient les mêmes, d'où la raison pour laquelle je ne l'ai pas ajouté au tableau. Une possibilité est que &lt;code&gt;mysqlpump&lt;/code&gt; diffuse les données dans un seul fichier.&lt;/p&gt;

&lt;p&gt;Enfin, pour &lt;code&gt;mysqldump&lt;/code&gt;, nous pouvons dire qu'il a le comportement le plus prévisible et a des temps d'exécution similaires avec des exécutions différentes. Le manque de parallélisme et de compression est un inconvénient pour &lt;code&gt;mysqldump&lt;/code&gt; ; cependant, comme il était présent dans les premières versions de MySQL, basé sur les cas Percona, il est toujours utilisé comme méthode de sauvegarde logique.&lt;/p&gt;

&lt;p&gt;Veuillez laisser dans les commentaires ci-dessous ce que vous avez pensé de cet article de blog, si j'ai raté quelque chose ou si cela vous a aidé. Je serai ravi d'en discuter !&lt;/p&gt;

&lt;h2&gt;
  
  
  Ressources utiles
&lt;/h2&gt;

&lt;p&gt;Enfin, vous pouvez nous joindre via les réseaux sociaux, notre forum, ou accéder à notre matériel en utilisant les liens présentés ci-dessous :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.percona.com/blog/"&gt;&lt;strong&gt;Blog&lt;/strong&gt; &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.percona.com/resources/solution-brief"&gt;&lt;strong&gt;Solution Briefs&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.percona.com/resources/white-papers"&gt;&lt;strong&gt;White Papers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.percona.com/resources/ebooks"&gt;&lt;strong&gt;Ebooks&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.percona.com/resources/technical-presentations"&gt;&lt;strong&gt;Technical Presentations archive&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.percona.com/resources/videos"&gt;&lt;strong&gt;Videos/Recorded Webinars&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.percona.com/forums/"&gt;&lt;strong&gt;Forum&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://customers.percona.com/"&gt;&lt;strong&gt;Knowledge Base (Percona Subscriber exclusive content)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mysql</category>
      <category>database</category>
      <category>opensource</category>
      <category>percona</category>
    </item>
    <item>
      <title>Dois-je créer un index sur les clés étrangères dans PostgreSQL?</title>
      <dc:creator>francisadp</dc:creator>
      <pubDate>Thu, 24 Feb 2022 20:52:32 +0000</pubDate>
      <link>https://dev.to/francisadp/dois-je-creer-un-index-sur-les-cles-etrangeres-dans-postgresql-4n2m</link>
      <guid>https://dev.to/francisadp/dois-je-creer-un-index-sur-les-cles-etrangeres-dans-postgresql-4n2m</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pmHy51Z9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2w76prnrfsoe1lddv40j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pmHy51Z9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2w76prnrfsoe1lddv40j.png" alt="Image description" width="880" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bienvenue sur un blog hebdomadaire où je peux répondre (comme, vraiment répondre) à certaines des questions que j'ai vues dans les webinaires que j'ai présentés récemment. Si vous avez manqué le dernier, &lt;a href="https://www.brighttalk.com/webcast/18708/513655?utm_source=Percona&amp;amp;utm_medium=brighttalk&amp;amp;utm_campaign=513655"&gt;PostgreSQL Performance Tuning Secrets &lt;/a&gt;, il peut être utile d'en écouter une partie avant ou après avoir lu cet article. Chaque semaine, je vais plonger profondément dans une question. Faites-moi savoir ce que vous pensez dans les commentaires.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nous entendons constamment dire que les index améliorent les performances de lecture et c'est généralement vrai, mais nous savons également que cela aura toujours un impact sur les écritures. Ce dont nous n'entendons pas parler trop souvent, c'est que dans certains cas, cela peut ne donner aucune amélioration des performances. Cela se produit plus que nous ne le souhaitons et peut se produire plus que nous ne le remarquons, et les clés étrangères (FK) en sont un excellent exemple. Je ne dis pas que tous les index de FK sont mauvais, mais la plupart de ceux que j'ai vus sont tout simplement inutiles, ne faisant qu'ajouter de la charge au système.&lt;/p&gt;

&lt;p&gt;Par exemple, la relation ci-dessous où nous avons une relation 1 :N entre la table « Supplier» et la table « Product» :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CqAMWO59--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xu8t1av98p1wvl9e8hgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CqAMWO59--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xu8t1av98p1wvl9e8hgg.png" alt="Image description" width="517" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si nous prêtons une attention particulière aux FK dans cet exemple, il n'y aura pas un nombre élevé de recherches sur la table enfant en utilisant la colonne FK, " &lt;em&gt;SupplierID&lt;/em&gt; " dans cet exemple, si nous comparons avec le nombre de recherches en utilisant " &lt;em&gt;ProductID&lt;/em&gt; " et probablement " &lt;em&gt;ProductName&lt;/em&gt; ". L'utilisation principale sera de maintenir la cohérence de la relation et de rechercher dans l'autre sens, en trouvant le fournisseur d'un certain produit. Dans ce cas, l'ajout d'un index à l'enfant FK sans s'assurer que le modèle d'accès l'exige ajoutera le coût supplémentaire de la mise à jour de l'index chaque fois que nous mettons à jour la table « &lt;em&gt;Product ».&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Un autre point auquel nous devons prêter attention est la cardinalité de l'index
&lt;/h2&gt;

&lt;p&gt;Si la cardinalité de l'index est trop faible, Postgres ne l'utilisera pas et l'index sera simplement ignoré. On peut se demander pourquoi cela se produit et si cela ne serait pas encore moins cher pour la base de données de parcourir, par exemple, la moitié des index au lieu de faire une analyse complète de la table? La réponse est non, en particulier pour les bases de données qui utilisent des tables de tas comme Postgres. L'accès à la table dans Postgres est principalement séquentiel, ce qui est plus rapide que l'accès aléatoire dans les disques durs en rotation et encore un peu plus rapide sur les disques SSD, tandis que l'accès à l'index b+-tree est aléatoire par nature.&lt;/p&gt;

&lt;p&gt;Lorsque Postgres utilise un index, il doit ouvrir le fichier d'index, trouver les enregistrements dont il a besoin, puis ouvrir le fichier de table, effectuer une recherche à l'aide des adresses de page obtenues à partir des index, en modifiant le modèle d'accès de séquentiel à aléatoire et en fonction des données distribution, il accédera probablement à la majorité des pages de la table, se terminant par une analyse complète de la table mais utilisant maintenant un accès aléatoire, ce qui est beaucoup plus coûteux. Si nous avons des colonnes avec une faible cardinalité et que nous avons vraiment besoin de les indexer, nous devons utiliser une alternative aux index b-tree, par exemple, un index GIN, mais c'est un sujet pour une autre discussion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Avec tout cela, on peut penser que les index FK sont toujours mauvais et ne jamais les utiliser sur une table enfant, n'est-ce pas?
&lt;/h2&gt;

&lt;p&gt;Eh bien, ce n'est pas vrai non plus et il y a de nombreuses circonstances où ils sont utiles et nécessaires, par exemple, l'image ci-dessous a deux autres tableaux, " Customer" et " Order" :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UxY_2Avb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g12sn3dxmnsind7n3yti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UxY_2Avb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g12sn3dxmnsind7n3yti.png" alt="Image description" width="485" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Il peut être pratique d'avoir un index sur la table enfant " &lt;em&gt;Order-&amp;gt; CustomerId&lt;/em&gt; " car il est courant d'afficher toutes les commandes d'un certain utilisateur et la colonne "&lt;em&gt;CustomerId&lt;/em&gt; " de la table "Order" sera utilisée assez fréquemment comme clé de recherche .&lt;/p&gt;

&lt;p&gt;Un autre bon exemple est de fournir une méthode plus rapide pour valider l'intégrité référentielle. Si l'on a besoin de changer la table parent (mettre à jour ou supprimer une clé parent), les enfants doivent être vérifiés pour s'assurer que la relation n'est pas rompue. Dans ce cas, avoir un index du côté de l'enfant aiderait à améliorer les performances. Dans ce cas, l’index est utile mais "dépendant de la charge". Si la clé parent a de nombreuses suppressions, cela peut être envisageable, cependant, s'il s'agit d'une table principalement statique ou ayant principalement des insertions ou des mises à jour dans les autres colonnes autres que la colonne de clé parent, ce n'est pas un bon candidat pour avoir un index sur les tables enfants.&lt;/p&gt;

&lt;p&gt;Il existe de nombreux autres exemples qui peuvent être donnés pour expliquer pourquoi un index sur la table enfant peut être utile et vaut le coût/la pénalité d'écriture supplémentaire.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Le point à retenir ici est que nous ne devons pas créer d'index sans distinction sur tous les FK, car beaucoup d'entre eux ne seront tout simplement pas utilisés ou si rarement utilisés qu'ils n'en valent pas la peine.&lt;/strong&gt; Il est préférable de concevoir initialement la base de données avec les FK mais pas les index et de les ajouter pendant que la base de données se développe et que nous comprenons la charge de travail. Il est possible qu'à un moment donné, nous trouvions que nous ayons besoin d'un index sur « &lt;em&gt;Product-&amp;gt; SupplierId&lt;/em&gt; » en raison de notre charge de travail et que l'index sur « &lt;em&gt;Order-&amp;gt; CustomerId&lt;/em&gt; » ne soit plus nécessaire. Les charges changent et la distribution des données également, l'index doit les suivre et ne pas être traité comme des entités immuables.&lt;/p&gt;

&lt;p&gt;Source : &lt;a href="https://www.percona.com/blog/should-i-create-an-index-on-foreign-keys-in-postgresql/"&gt;Percona&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Base de données PostgreSQL 14 : Surveillance et Enregistrement</title>
      <dc:creator>francisadp</dc:creator>
      <pubDate>Wed, 23 Feb 2022 13:03:19 +0000</pubDate>
      <link>https://dev.to/francisadp/base-de-donnees-postgresql-14-surveillance-et-enregistrement-401c</link>
      <guid>https://dev.to/francisadp/base-de-donnees-postgresql-14-surveillance-et-enregistrement-401c</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;em&gt;Veuillez vous rendre sur notre &lt;a href="//www.lesamisdeperona.fr"&gt;blog&lt;/a&gt; pour d'autres articles sur les bases de données opensource et en particulier MySQL, PostgreSQL, MongoDB&lt;/em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;em&gt;PostgreSQL-14 a été publié en septembre 2021 et contenait de nombreuses améliorations des performances et des fonctionnalités, y compris certaines fonctionnalités du point de vue surveillance. Comme nous le savons, la surveillance est l'élément clé de tout système de gestion de base de données, et PostgreSQL continue de mettre à jour et d'améliorer les capacités de surveillance. Voici quelques clés dans PostgreSQL-14.&lt;/em&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Identificateur de requête
&lt;/h2&gt;

&lt;p&gt;L'identificateur de requête est utilisé pour identifier la requête, qui peut être référencée entre les extensions. Avant PostgreSQL-14, les extensions utilisaient un algorithme pour calculer le query_id . Habituellement, le même algorithme est utilisé pour calculer le query_id , mais toute extension peut utiliser son propre algorithme. Désormais, PostgreSQL-14 fournit éventuellement un query_id à calculer dans le noyau. Maintenant, les extensions de surveillance et les utilitaires de PostgreSQL-14 comme pg_stat_activity , explain, et pg_stat_statments utilisent ce query_id au lieu de calculer le sien. Ce query_id peut être vu dans csvlog , après avoir spécifié dans le log_line_prefix . Du point de vue de l'utilisateur, cette fonctionnalité présente deux avantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tous les utilitaires/extensions utiliseront le même query_id calculé par core, ce qui permet de référencer facilement ce query_id . Auparavant, tous les utilitaires/extensions devaient utiliser le même algorithme dans leur code pour obtenir cette capacité.&lt;/li&gt;
&lt;li&gt;Le deuxième avantage est que l'extension/les utilitaires peuvent utiliser le query_id calculé et n'ont plus besoin de le faire, ce qui est un avantage en termes de performances.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PostgreSQL introduit un nouveau paramètre de configuration GUC compute_query_id pour activer/désactiver cette fonctionnalité. La valeur par défaut est automatique; cela peut être activé/désactivé dans le fichier postgresql.conf ou à l'aide de la commande SET.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;pg_stat_activity&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SET compute_query_id = OFF;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT datname, query, query_id FROM pg_stat_activity;
 datname  |                                 query                                 | query_id 
----------+-----------------------------------------------------------------------+----------
 postgres | select datname, query, query_id from pg_stat_activity;                |         
 postgres | UPDATE pgbench_branches SET bbalance = bbalance + 2361 WHERE bid = 1; |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SET compute_query_id = on;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT datname, query, query_id FROM pg_stat_activity;
 datname  |                                 query                                 |      query_id       
----------+-----------------------------------------------------------------------+---------------------
 postgres | select datname, query, query_id from pg_stat_activity;                |  846165942585941982
 postgres | UPDATE pgbench_tellers SET tbalance = tbalance + 3001 WHERE tid = 44; | 3354982309855590749
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Log&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dans les versions précédentes, il n'y avait aucun mécanisme pour calculer le query_id dans le noyau du serveur. Le query_id est particulièrement utile dans les fichiers journaux. Pour activer cela, nous devons configurer le paramètre de configuration log_line_prefix . L'option "%Q" est ajoutée pour afficher le query_id; voici un exemple.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;log_line_prefix = 'query_id = [%Q] -&amp;gt; '
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query_id = [0] -&amp;gt; LOG:  statement: CREATE PROCEDURE ptestx(OUT a int) LANGUAGE SQL AS $$ INSERT INTO cp_test VALUES (1, 'a') $$;
query_id = [-6788509697256188685] -&amp;gt; ERROR:  return type mismatch in function declared to return record
query_id = [-6788509697256188685] -&amp;gt; DETAIL:  Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING.
query_id = [-6788509697256188685] -&amp;gt; CONTEXT:  SQL function "ptestx"
query_id = [-6788509697256188685] -&amp;gt; STATEMENT:  CREATE PROCEDURE ptestx(OUT a int) LANGUAGE SQL AS $$ INSERT INTO cp_test VALUES (1, 'a') $$;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;EXPLAIN VERBOSE affichera le query_id si compute_query_id est vrai.&lt;/p&gt;

&lt;p&gt;SET compute_query_id = OFF;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EXPLAIN VERBOSE SELECT * FROM foo;
                          QUERY PLAN                          
--------------------------------------------------------------

 Seq Scan on public.foo  (cost=0.00..15.01 rows=1001 width=4)
   Output: a
(2 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SET compute_query_id = on;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EXPLAIN VERBOSE SELECT * FROM foo;
                          QUERY PLAN                          
--------------------------------------------------------------
 Seq Scan on public.foo  (cost=0.00..15.01 rows=1001 width=4)
   Output: a
 Query Identifier: 3480779799680626233
(3 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Améliorations de l’Autovacuum et enregistrement auto-analyse
&lt;/h2&gt;

&lt;p&gt;PostgreSQL-14 améliore l’enregistrement de l’auto-vacuum et auto-analyze. Nous pouvons maintenant voir les délais I/O dans le journal, indiquant la lecture et écriture.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;automatic vacuum of table "postgres.pg_catalog.pg_depend": index scans: 1
pages: 0 removed, 67 remain, 0 skipped due to pins, 0 skipped frozen
tuples: 89 removed, 8873 remain, 0 are dead but not yet removable, oldest xmin: 210871
index scan needed: 2 pages from table (2.99% of total) had 341 dead item identifiers removed
index "pg_depend_depender_index": pages: 39 in total, 0 newly deleted, 0 currently deleted, 0 reusable
index "pg_depend_reference_index": pages: 41 in total, 0 newly deleted, 0 currently deleted, 0 reusable

I/O timings: read: 44.254 ms, write: 0.531 ms

avg read rate: 13.191 MB/s, avg write rate: 8.794 MB/s
buffer usage: 167 hits, 126 misses, 84 dirtied
WAL usage: 85 records, 15 full page images, 78064 bytes
system usage: CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.07 s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ces journaux ne sont disponibles que si track_io_timing est activé.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connecter le journal
&lt;/h2&gt;

&lt;p&gt;PostgreSQL enregistre déjà la connexion/déconnexion si log_connections / log_disconnections est activé. Par conséquent, PostgreSQL-14 enregistre désormais également le nom d'utilisateur réel fourni par l'utilisateur. Dans le cas où une authentification externe est utilisée et que le mappage est défini dans pg_ident.conf, il deviendra difficile d'identifier le nom d'utilisateur réel. Avant PostgreSQL-14, vous ne voyez que l'utilisateur mappé au lieu de l'utilisateur réel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pg_ident.conf&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# MAPNAME       SYSTEM-USERNAME         PG-USERNAME

pg              vagrant                 postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;pg_hba.conf&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     peer map=pg
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Avant PostgreSQL-14&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LOG:  database system was shut down at 2021-11-19 11:24:30 UTC
LOG:  database system is ready to accept connections
LOG:  connection received: host=[local]
LOG:  connection authorized: user=postgres database=postgres application_name=psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;PostgreSQL -14&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LOG:  database system is ready to accept connections
LOG:  connection received: host=[local]
LOG:  connection authenticated: identity="vagrant" method=peer (/usr/local/pgsql.14/bin/data/pg_hba.conf:89)
LOG:  connection authorized: user=postgres database=postgres application_name=psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Chaque version majeure de PostgreSQL comporte des améliorations significatives, et PostgreSQL-14 n'était pas différent.&lt;/p&gt;

&lt;p&gt;La surveillance est une fonctionnalité clé de tout système de SGBD, et PostgreSQL continue de mettre à niveau ses capacités pour améliorer ses capacités de journalisation et de surveillance. Avec ces fonctionnalités nouvellement ajoutées, vous avez plus d'informations sur les connexions ; on peut facilement suivre les requêtes et observer les performances, et identifier le temps passé par le processus de vide dans les opérations de lecture/écriture. Cela peut vous être très utile pour mieux configurer les paramètres de vide.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://www.percona.com/blog/postgresql-14-database-monitoring-and-logging-enhancements/"&gt;Percona&lt;/a&gt;&lt;/p&gt;

</description>
      <category>percona</category>
      <category>postgres</category>
      <category>opensource</category>
      <category>french</category>
    </item>
  </channel>
</rss>
