début de relecture / réorganisation

This commit is contained in:
Gregory Colpart 2018-01-25 04:33:07 +01:00
parent 5bc36a67c7
commit 5b057f47c7
3 changed files with 112 additions and 22 deletions

View file

@ -1,10 +1,9 @@
---
title: Howto PostgreSQL : installation et utilisation courante
title: Howto PostgreSQL
categories: databases
...
* Documentation : <http://www.postgresql.org/docs/current/static/>
* Wiki : <https://wiki.postgresql.org/wiki/Main_Page>
* Rôle Ansible : <https://forge.evolix.org/projects/ansible-roles/repository/show/postgresql>
[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!='<IDLE>';
~~~
### pg_top
~~~
# apt install ptop
# su - postgres
$ pg_top
~~~
Commandes utiles :
~~~
<space> - 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!='<IDLE>';
~~~
* 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