From 5b057f47c7cca3f4d477fac1eceb7515396e5c0b Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Thu, 25 Jan 2018 04:33:07 +0100 Subject: [PATCH] =?UTF-8?q?d=C3=A9but=20de=20relecture=20/=20r=C3=A9organi?= =?UTF-8?q?sation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoPostgreSQL.md | 134 +++++++++++++++--- .../Replication.md | 0 .../Slony.md | 0 3 files changed, 112 insertions(+), 22 deletions(-) rename HowtoPostgreSQLStreamingReplication.md => HowtoPostgreSQL/Replication.md (100%) rename HowtoPostgreSQLReplication.md => HowtoPostgreSQL/Slony.md (100%) diff --git a/HowtoPostgreSQL.md b/HowtoPostgreSQL.md index 7a8cb977..b6c861f0 100644 --- a/HowtoPostgreSQL.md +++ b/HowtoPostgreSQL.md @@ -1,10 +1,9 @@ --- -title: Howto PostgreSQL : installation et utilisation courante +title: Howto PostgreSQL categories: databases ... * Documentation : -* Wiki : * Rôle Ansible : [PostgreSQL](https://www.postgresql.org/) est une base de données qui met l'accent sur le respect du standard SQL et la sécurité des données. @@ -14,16 +13,16 @@ categories: databases ~~~ # apt install postgresql -# # /usr/lib/postgresql/9.6/bin/postgres -V -postgres (PostgreSQL) 9.6.4 +# /usr/lib/postgresql/9.6/bin/postgres -V +postgres (PostgreSQL) 9.6.6 -# # systemctl status postgresql +# systemctl status postgresql ● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) - Active: active (exited) since Thu 2017-10-05 20:11:08 CEST; 1 months 7 days ago - Process: 6697 ExecReload=/bin/true (code=exited, status=0/SUCCESS) - Main PID: 17520 (code=exited, status=0/SUCCESS) + Main PID: 5338 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 4915) + Memory: 0B + CPU: 0 CGroup: /system.slice/postgresql.service ~~~ @@ -31,7 +30,7 @@ postgres (PostgreSQL) 9.6.4 Suite à l'installation, une première instance *main* est créée avec les paramètres par défaut. -### Dépôt PGDG +### apt.postgresql.org Le *PostgreSQL Global Development Group (PGDG)* maintient un dépôt Debian qui contient plusieurs versions majeures de PostgreSQL (plus récentes et plus anciennes) que celle disponible dans Debian stable, ainsi que plusieurs extensions au serveur. @@ -55,6 +54,78 @@ Enfin, récupérer la clé publique GPG : # wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc |apt-key add - ~~~ + +## Administration basique + +### Pour lister les instances existantes : + +~~~ +# pg_lsclusters +Ver Cluster Port Status Owner Data directory Log file +9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log +~~~ + +### lister les requêtes actives (PostgreSQL >= 9.2) + +~~~ +# su - postgres +$ psql +psql (9.6.6) + +postgres=# SELECT * FROM pg_stat_activity ORDER by query_start; +postgres=# SELECT pid, datname, usename, client_addr, query_start, query FROM pg_stat_activity WHERE state='active' ORDER by query_start; +~~~ + +### Lister les requêtes actives (PostgreSQL < 9.2) : + +~~~ +# su - postgres +$ psql + +postgres=# SELECT * FROM pg_stat_activity WHERE current_query!=''; +~~~ + +### pg_top + +~~~ +# apt install ptop +# su - postgres +$ pg_top +~~~ + +Commandes utiles : + +~~~ + - update screen +A - EXPLAIN ANALYZE (UPDATE/DELETE safe) +C - toggle the use of color +E - show execution plan (UPDATE/DELETE safe) +I - show I/O statistics per process (Linux only) +L - show locks held by a process +M - sort by memory usage +P - sort by CPU usage +R - show user table statistics +Q - show current query of a process +T - sort by time +X - show user index statistics +c - toggle the display of process commands +e - list errors generated by last "kill" or "renice" command +i - toggle the displaying of idle processes +k - kill processes; send a signal to a list of processes + not avilable when connected to a remote database +o - specify sort order (cpu, size, res, time, command) + index stats (idx_scan, idx_tup_fetch, idx_tup_read) + table stats (seq_scan, seq_tup_read, idx_scan, idx_tup_fetch, + n_tup_ins, n_tup_upd, n_tup_del) + i/o stats (pid, rchar, wchar, syscr, syscw, reads, writes, cwrites, command) +s - change number of seconds to delay between updates +t - Toggle between cumulative or differential statistics when viewing + user table or user index statistics. +u - display processes for only one user (+ selects all users) +~~~ + + + ### Multiples versions et instances (clusters) Une surcouche Debian permet de gérer très simplement plusieurs versions et plusieurs instances d'une même version de PostgreSQL. Cela permet entre autre de faciliter les migrations d'une version majeure à une autre. @@ -128,7 +199,7 @@ La plupart des changements de configuration peuvent être pris en compte à chau 2016-12-20 17:02:58 CET [13555]: [3-1] user=,db= LOG: parameter "log_temp_files" changed to "6MB" ~~~ -### pgass +### pgpass Pour se connecter plus facilement à postgresql (avec `psql` mais aussi `pgdump` etc), on peut utiliser le fichier `~/.pgpass` avec comme format @@ -723,18 +794,6 @@ Par défaut, PostgreSQL utilise le schéma *public* mais il est possible d'utili ## Monitoring -* Lister les requêtes actives (PostgreSQL < 9.2) : - -~~~ -SELECT * FROM pg_stat_activity WHERE current_query!=''; -~~~ - -* lister les requêtes actives (PostgreSQL >= 9.2) : - -~~~ -SELECT pid, datname, usename, client_addr, query_start, waiting, query FROM pg_stat_activity WHERE state='active' ORDER by query_start; -~~~ - * lister les connections en idle qui n'ont effectué aucune requête depuis plus d'un jour : ~~~ @@ -790,6 +849,8 @@ Et taper `?` pour la liste de toutes les commandes possibles. ## VACUUM +TODO : expliquer davantage + Faire un VACUUM FULL sur toutes les bases de données : ~~~ @@ -871,6 +932,17 @@ Testing: 10 clients with 50 transactions (5 samples) pg_benchmark executed 30 tests in about 5 seconds ~~~ +## Outils + +* pgbouncer +* pgpool -> rmw +* barman +* pgbadger +* phpmyadmin / pgadmin +* pg_bench_* + +(TODO) + ## Réplication Plusieurs solutions de réplication plus ou moins avancées existent avec PostgreSQL : @@ -883,3 +955,21 @@ Plusieurs solutions de réplication plus ou moins avancées existent avec Postgr Pour plus de détails sur ces solutions, voir ce post sur [dba.stackexange.com](https://dba.stackexchange.com/questions/73812/postgresql-streaming-versus-file-based-replication-in-terms-of-server-behavior). Pour d'autres types de solutions pour avoir de la haute disoponibilite, postgresql a [une page sur cela dans leur documentation](https://www.postgresql.org/docs/current/static/different-replication-solutions.html). > *Note* : l'expédition des logs entre des serveurs pgsql nécessite qu'ils soient à la même version majeure. + + +### Réplication native (streaming) + +Voir [/HowtoPostgreSQL/Replication](). + +### Slony + +Voir [/HowtoPostgreSQL/Slony](). + + +## FAQ + +pg_top ne montre rien ? + +essayer une autre version du paquet ptop + + diff --git a/HowtoPostgreSQLStreamingReplication.md b/HowtoPostgreSQL/Replication.md similarity index 100% rename from HowtoPostgreSQLStreamingReplication.md rename to HowtoPostgreSQL/Replication.md diff --git a/HowtoPostgreSQLReplication.md b/HowtoPostgreSQL/Slony.md similarity index 100% rename from HowtoPostgreSQLReplication.md rename to HowtoPostgreSQL/Slony.md