SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
PostgreSQL 10 : Nouveautés
Sébastien Lardière
Loxodata
novembre 2017
slardiere PG10 – novembre 2017 1 / 41
Break It! Drop It!
BREAK IT !
slardiere PG10 – novembre 2017 2 / 41
Break It! Drop It!
9.6 → 10
slardiere PG10 – novembre 2017 3 / 41
Break It! Drop It!
Version
La numérotation des versions change :
La version majeure est maintenant sur un nombre : 10
suivi de la version mineure
9.6.6 → 10.1
server_version_num : 090606 → 100001
En 2018, la prochaine version sera la 11
slardiere PG10 – novembre 2017 4 / 41
Break It! Drop It!
s/xlog/wal/g
slardiere PG10 – novembre 2017 5 / 41
Break It! Drop It!
WAL
Les répertoires, API et commandes sont renommés :
mv $PGDATA/pg_xlog $PGDATA/pg_wal
Des fonctions :
pg_current_xlog_flush_location() → pg_current_wal_flush_lsn()
pg_wal_replay_pause(), pg_wal_replay_resume(), pg_walfile_name()
Dans la vue pg_stat_replication : *_location → *_lsn
Des commandes :
pg_receivexlog -> pg_receivewal
initdb et pg_basebackup : --xlogdir → --waldir
pg_basebackup : --xlog-method → --wal-method
slardiere PG10 – novembre 2017 6 / 41
Break It! Drop It!
DROP IT !
slardiere PG10 – novembre 2017 7 / 41
Break It! Drop It!
OOOOLD!
D’anciennes options sont supprimées :
protocole client/serveur 1.0 (avant v6.3)
Floating Point Timestamp
extension contrib/tsearch2 (avant 8.3)
pg_dump : support des versions < 8.0
slardiere PG10 – novembre 2017 8 / 41
SQL
WRITE IT !
slardiere PG10 – novembre 2017 9 / 41
SQL
Partitionnement
Partitionnement déclaratif :
implémentation initiale, utilisable en SQL :
RANGE
LIST
chaque partition est une table
plus besoin de trigger
slardiere PG10 – novembre 2017 10 / 41
SQL
Partitionnement
Exemple
CREATE TABLE IF NOT EXISTS testpart
(
id bigserial,
dateev date not null default current_date ,
t text,
y boolean not null,
n numeric(13,3)
)
PARTITION BY RANGE (dateev) ;
slardiere PG10 – novembre 2017 11 / 41
SQL
Partitionnement
Exemple
CREATE TABLE IF NOT EXISTS testpart_2017
PARTITION OF testpart2
FOR VALUES FROM (’2017-01-01’) TO ( ’2018-01-01’ )
PARTITION BY LIST ( (id % 4) );
CREATE TABLE IF NOT EXISTS testpart_2017_0
PARTITION OF testpart2_2017
FOR VALUES IN ( 0 ) ;
slardiere PG10 – novembre 2017 12 / 41
SQL
Séquences
Le pseudo-type SERIAL est remplacé par la notion d’identité, repectant le standard, et
simplifiant la gestion des dépendances :
Exemple
CREATE TABLE test (
id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
dateev date not null default current_date ,
t text,
y boolean not null,
n numeric(13,3)
);
slardiere PG10 – novembre 2017 13 / 41
SQL
Séquences
Les séquences sont toujours utilisées :
nouveau catalogue : pg_sequence
chaque séquence n’a plus que 3 champs :
last_value
log_cnt
is_called
slardiere PG10 – novembre 2017 14 / 41
SQL
Déclencheurs
pour un déclencheur AFTER UPDATE/INSERT :
Accès aux données modifiés : old et new
déclaration dans le CREATE TRIGGER
très utile FOR EACH STATEMENT
crée une table lisible dans la fonction déclencheur
slardiere PG10 – novembre 2017 15 / 41
SQL
Déclencheurs
pour un déclencheur AFTER UPDATE/INSERT :
Exemple
CREATE TRIGGER transfer_insert
AFTER INSERT ON transfer
REFERENCING NEW TABLE AS inserted
FOR EACH STATEMENT
EXECUTE PROCEDURE check_transfer_balances_to_zero();
slardiere PG10 – novembre 2017 16 / 41
SQL
Statistiques
Corrélation statistique :
lorsque les données d’une table sont corrélés, le planner peut se tromper
ce qui peut faire des plans d’exécution lents
l’objet STATISTICS permet au planner de connaître la corrélation des données
il est possible de collecter des statistiques sur 2 colonnes ou plus d’une même table
slardiere PG10 – novembre 2017 17 / 41
SQL
Statistiques
Corrélation statistique :
Exemple
CREATE STATISTICS s1 (dependencies)
ON a, b FROM t1;
ANALYZE t1 ;
slardiere PG10 – novembre 2017 18 / 41
SQL
Activité
La vue pg_stat_activity, comme d’habitude :
Tous les processus apparaissent : Writers, Workers, etc...
Pleins de nouveaux wait_event : 187
Requête exécuté par les processus parallélisés
slardiere PG10 – novembre 2017 19 / 41
SQL
Réplication
Réplication logique intégrée :
Code du plugin pg_logical
Intégration simplifiée
Décodage logique des WAL
Granularité = table
Commandes SQL
wal_level = logical
slardiere PG10 – novembre 2017 20 / 41
SQL
Réplication
Réplication logique intégrée :
Exemple
CREATE PUBLICATION emp_repli FOR TABLE employees.departments, employees.dept_emp,
employees.dept_manager, employees.employees, employees.salaries, employees.titles ;
–
CREATE SUBSCRIPTION sub_emp_repli CONNECTION ’port=5432 dbname=employees’
PUBLICATION emp_repli WITH (ENABLED, COPY_DATA) ;
slardiere PG10 – novembre 2017 21 / 41
SQL
Divers
XMLTABLE : transforme un document XML en table
FTS pour JSON et JSONB
Support le ICU pour les collations
Index Hash réplicable et « crash-safe »
RLS : logique PERMISSIVE (OR) ou RESTRICTIVE (AND)
slardiere PG10 – novembre 2017 22 / 41
Clients
CONNECT IT !
slardiere PG10 – novembre 2017 23 / 41
Clients
Connections
Nouveau protocole d’authentification : SCRAM
SHA-256 pour le moment
client en v10
à configurer dans pg_hba.conf
peut être utilisé même avec md5 dans la config
slardiere PG10 – novembre 2017 24 / 41
Clients
Connections
Plusieurs serveurs peuvent être défini coté client :
permet le failover transparent
client en v10
target_session_attrs permet de préciser le mode :
any : n’importe quel serveur
read-write : seulement le serveur accessible en écriture
slardiere PG10 – novembre 2017 25 / 41
Clients
Connections
Plusieurs serveurs peuvent être défini coté client :
Exemple
host=host1,host2 port=port1,port2
postgresql://host1:port2,host2:port2/
host=host1,host2 port=port1,port2 target_session_attrs=read-write
postgresql://host1:port2,host2:port2/?target_session_attrs=read-write
slardiere PG10 – novembre 2017 26 / 41
Clients
psql
Client psql :
if elif else endif
gx : exécute en mode étendu
timing : affichage lisible
slardiere PG10 – novembre 2017 27 / 41
Clients
Sauvegarde
Sauvergarde logique :
pg_dump peut être parallélisé sur un standby : --jobs
pg_dump peut ignorer les larges objects : --no-blobs
les dumps de pg_dump sont flushés, sauf avec --no-sync
pg_restore peut exclure un schéma : -N/--exclude-schema
slardiere PG10 – novembre 2017 28 / 41
Clients
Sauvegarde
Sauvergarde physique :
pg_basebackup
-X stream par défaut,
et maintenant possible en mode tar
Slot temporaire par défaut
pg_receivewal : compression avec : -Z/–compress
slardiere PG10 – novembre 2017 29 / 41
Internals
INTERNALS
slardiere PG10 – novembre 2017 30 / 41
Internals
pg_ctl
Démarrage
pg_ctl attend au démarrage
-w/--wait par défaut pour start, stop, restart et promote
-t/--timeout par défaut : 60sec
code de retour en erreur != 0
-W/--no-wait pour ne pas attendre
détection du changement d’état plus fin
-o/--options : passe des paramètres de configuration
slardiere PG10 – novembre 2017 31 / 41
Internals
Parallélisme
Améliorations :
Merge Join, en plus des Nested Loop et Hash Join
Bitmap Heap Scan : les Heap Scan sont parallélisables
Index Scan et Index Only Scan parallélisables
Préservation du tri des données d’une tâche parallélisée
slardiere PG10 – novembre 2017 32 / 41
Configuration
CONFIGURE IT !
slardiere PG10 – novembre 2017 33 / 41
Configuration
Parallélisme
max_parallel_workers_per_gather : 2 par défaut, active le parallélisme
max_parallel_workers : nombre maximal de tâches utilisables
min_parallel_table_scan_size et min_parallel_index_scan_size
remplacent min_parallel_relation_size, respectivement 8MB et 512kB
slardiere PG10 – novembre 2017 34 / 41
Configuration
Réplication
Réplication activée par défaut :
wal_level : replica
max_wal_senders : 10
max_replication_slots : 10
pg_hba.conf pour les connexions locales
hot_standby : on
slardiere PG10 – novembre 2017 35 / 41
Configuration
Réplication
Réplication synchrone configurable :
synchronous_standby_names accepte :
ANY N ( node1, node2, ... )
FIRST N ( node1, node2, ... )
slardiere PG10 – novembre 2017 36 / 41
Extensions
EXTENDS IT
slardiere PG10 – novembre 2017 37 / 41
Extensions
Extensions
FDW :
file_fdw sait utiliser des programmes
postgres_fdw pousse les joins et les aggrégats
amcheck peut valider la structure d’un index
slardiere PG10 – novembre 2017 38 / 41
11
POSTGRESQL 11
slardiere PG10 – novembre 2017 39 / 41
11
11
Déjà 140 commits
PARTITION BY HASH (username);
Contrib : pg_autoprewarm
https://commitfest.postgresql.org/
slardiere PG10 – novembre 2017 40 / 41
11
Merci!
DES QUESTIONS ?
slardiere PG10 – novembre 2017 41 / 41

Contenu connexe

Similaire à Meetup PostgreSQL Nantes PG10

Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5slardiere
 
Nouveautés PostgreSQL 12
Nouveautés PostgreSQL 12Nouveautés PostgreSQL 12
Nouveautés PostgreSQL 12slardiere
 
optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdfoptimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdfPascal Ponzoni
 
PostgreSQL plprofiler - Mars 2017 - Loxodata
PostgreSQL  plprofiler - Mars 2017 - LoxodataPostgreSQL  plprofiler - Mars 2017 - Loxodata
PostgreSQL plprofiler - Mars 2017 - Loxodataslardiere
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introOlivier Mallassi
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingDavid Morel
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015Rodolphe Quiédeville
 

Similaire à Meetup PostgreSQL Nantes PG10 (11)

Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5Nouveautés de PostgreSQL 9.5
Nouveautés de PostgreSQL 9.5
 
Nouveautés PostgreSQL 12
Nouveautés PostgreSQL 12Nouveautés PostgreSQL 12
Nouveautés PostgreSQL 12
 
optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdfoptimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 3.pdf
 
Pgbackrest meetup
Pgbackrest meetupPgbackrest meetup
Pgbackrest meetup
 
PostgreSQL plprofiler - Mars 2017 - Loxodata
PostgreSQL  plprofiler - Mars 2017 - LoxodataPostgreSQL  plprofiler - Mars 2017 - Loxodata
PostgreSQL plprofiler - Mars 2017 - Loxodata
 
Pgbadger
PgbadgerPgbadger
Pgbadger
 
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -introNosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Pytong2015
Pytong2015Pytong2015
Pytong2015
 
Utiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreamingUtiliser Hadoop en perl avec HadoopStreaming
Utiliser Hadoop en perl avec HadoopStreaming
 
SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015SQL Debug avec Django @ PyConFr 2015
SQL Debug avec Django @ PyConFr 2015
 

Meetup PostgreSQL Nantes PG10

  • 1. PostgreSQL 10 : Nouveautés Sébastien Lardière Loxodata novembre 2017 slardiere PG10 – novembre 2017 1 / 41
  • 2. Break It! Drop It! BREAK IT ! slardiere PG10 – novembre 2017 2 / 41
  • 3. Break It! Drop It! 9.6 → 10 slardiere PG10 – novembre 2017 3 / 41
  • 4. Break It! Drop It! Version La numérotation des versions change : La version majeure est maintenant sur un nombre : 10 suivi de la version mineure 9.6.6 → 10.1 server_version_num : 090606 → 100001 En 2018, la prochaine version sera la 11 slardiere PG10 – novembre 2017 4 / 41
  • 5. Break It! Drop It! s/xlog/wal/g slardiere PG10 – novembre 2017 5 / 41
  • 6. Break It! Drop It! WAL Les répertoires, API et commandes sont renommés : mv $PGDATA/pg_xlog $PGDATA/pg_wal Des fonctions : pg_current_xlog_flush_location() → pg_current_wal_flush_lsn() pg_wal_replay_pause(), pg_wal_replay_resume(), pg_walfile_name() Dans la vue pg_stat_replication : *_location → *_lsn Des commandes : pg_receivexlog -> pg_receivewal initdb et pg_basebackup : --xlogdir → --waldir pg_basebackup : --xlog-method → --wal-method slardiere PG10 – novembre 2017 6 / 41
  • 7. Break It! Drop It! DROP IT ! slardiere PG10 – novembre 2017 7 / 41
  • 8. Break It! Drop It! OOOOLD! D’anciennes options sont supprimées : protocole client/serveur 1.0 (avant v6.3) Floating Point Timestamp extension contrib/tsearch2 (avant 8.3) pg_dump : support des versions < 8.0 slardiere PG10 – novembre 2017 8 / 41
  • 9. SQL WRITE IT ! slardiere PG10 – novembre 2017 9 / 41
  • 10. SQL Partitionnement Partitionnement déclaratif : implémentation initiale, utilisable en SQL : RANGE LIST chaque partition est une table plus besoin de trigger slardiere PG10 – novembre 2017 10 / 41
  • 11. SQL Partitionnement Exemple CREATE TABLE IF NOT EXISTS testpart ( id bigserial, dateev date not null default current_date , t text, y boolean not null, n numeric(13,3) ) PARTITION BY RANGE (dateev) ; slardiere PG10 – novembre 2017 11 / 41
  • 12. SQL Partitionnement Exemple CREATE TABLE IF NOT EXISTS testpart_2017 PARTITION OF testpart2 FOR VALUES FROM (’2017-01-01’) TO ( ’2018-01-01’ ) PARTITION BY LIST ( (id % 4) ); CREATE TABLE IF NOT EXISTS testpart_2017_0 PARTITION OF testpart2_2017 FOR VALUES IN ( 0 ) ; slardiere PG10 – novembre 2017 12 / 41
  • 13. SQL Séquences Le pseudo-type SERIAL est remplacé par la notion d’identité, repectant le standard, et simplifiant la gestion des dépendances : Exemple CREATE TABLE test ( id bigint GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, dateev date not null default current_date , t text, y boolean not null, n numeric(13,3) ); slardiere PG10 – novembre 2017 13 / 41
  • 14. SQL Séquences Les séquences sont toujours utilisées : nouveau catalogue : pg_sequence chaque séquence n’a plus que 3 champs : last_value log_cnt is_called slardiere PG10 – novembre 2017 14 / 41
  • 15. SQL Déclencheurs pour un déclencheur AFTER UPDATE/INSERT : Accès aux données modifiés : old et new déclaration dans le CREATE TRIGGER très utile FOR EACH STATEMENT crée une table lisible dans la fonction déclencheur slardiere PG10 – novembre 2017 15 / 41
  • 16. SQL Déclencheurs pour un déclencheur AFTER UPDATE/INSERT : Exemple CREATE TRIGGER transfer_insert AFTER INSERT ON transfer REFERENCING NEW TABLE AS inserted FOR EACH STATEMENT EXECUTE PROCEDURE check_transfer_balances_to_zero(); slardiere PG10 – novembre 2017 16 / 41
  • 17. SQL Statistiques Corrélation statistique : lorsque les données d’une table sont corrélés, le planner peut se tromper ce qui peut faire des plans d’exécution lents l’objet STATISTICS permet au planner de connaître la corrélation des données il est possible de collecter des statistiques sur 2 colonnes ou plus d’une même table slardiere PG10 – novembre 2017 17 / 41
  • 18. SQL Statistiques Corrélation statistique : Exemple CREATE STATISTICS s1 (dependencies) ON a, b FROM t1; ANALYZE t1 ; slardiere PG10 – novembre 2017 18 / 41
  • 19. SQL Activité La vue pg_stat_activity, comme d’habitude : Tous les processus apparaissent : Writers, Workers, etc... Pleins de nouveaux wait_event : 187 Requête exécuté par les processus parallélisés slardiere PG10 – novembre 2017 19 / 41
  • 20. SQL Réplication Réplication logique intégrée : Code du plugin pg_logical Intégration simplifiée Décodage logique des WAL Granularité = table Commandes SQL wal_level = logical slardiere PG10 – novembre 2017 20 / 41
  • 21. SQL Réplication Réplication logique intégrée : Exemple CREATE PUBLICATION emp_repli FOR TABLE employees.departments, employees.dept_emp, employees.dept_manager, employees.employees, employees.salaries, employees.titles ; – CREATE SUBSCRIPTION sub_emp_repli CONNECTION ’port=5432 dbname=employees’ PUBLICATION emp_repli WITH (ENABLED, COPY_DATA) ; slardiere PG10 – novembre 2017 21 / 41
  • 22. SQL Divers XMLTABLE : transforme un document XML en table FTS pour JSON et JSONB Support le ICU pour les collations Index Hash réplicable et « crash-safe » RLS : logique PERMISSIVE (OR) ou RESTRICTIVE (AND) slardiere PG10 – novembre 2017 22 / 41
  • 23. Clients CONNECT IT ! slardiere PG10 – novembre 2017 23 / 41
  • 24. Clients Connections Nouveau protocole d’authentification : SCRAM SHA-256 pour le moment client en v10 à configurer dans pg_hba.conf peut être utilisé même avec md5 dans la config slardiere PG10 – novembre 2017 24 / 41
  • 25. Clients Connections Plusieurs serveurs peuvent être défini coté client : permet le failover transparent client en v10 target_session_attrs permet de préciser le mode : any : n’importe quel serveur read-write : seulement le serveur accessible en écriture slardiere PG10 – novembre 2017 25 / 41
  • 26. Clients Connections Plusieurs serveurs peuvent être défini coté client : Exemple host=host1,host2 port=port1,port2 postgresql://host1:port2,host2:port2/ host=host1,host2 port=port1,port2 target_session_attrs=read-write postgresql://host1:port2,host2:port2/?target_session_attrs=read-write slardiere PG10 – novembre 2017 26 / 41
  • 27. Clients psql Client psql : if elif else endif gx : exécute en mode étendu timing : affichage lisible slardiere PG10 – novembre 2017 27 / 41
  • 28. Clients Sauvegarde Sauvergarde logique : pg_dump peut être parallélisé sur un standby : --jobs pg_dump peut ignorer les larges objects : --no-blobs les dumps de pg_dump sont flushés, sauf avec --no-sync pg_restore peut exclure un schéma : -N/--exclude-schema slardiere PG10 – novembre 2017 28 / 41
  • 29. Clients Sauvegarde Sauvergarde physique : pg_basebackup -X stream par défaut, et maintenant possible en mode tar Slot temporaire par défaut pg_receivewal : compression avec : -Z/–compress slardiere PG10 – novembre 2017 29 / 41
  • 30. Internals INTERNALS slardiere PG10 – novembre 2017 30 / 41
  • 31. Internals pg_ctl Démarrage pg_ctl attend au démarrage -w/--wait par défaut pour start, stop, restart et promote -t/--timeout par défaut : 60sec code de retour en erreur != 0 -W/--no-wait pour ne pas attendre détection du changement d’état plus fin -o/--options : passe des paramètres de configuration slardiere PG10 – novembre 2017 31 / 41
  • 32. Internals Parallélisme Améliorations : Merge Join, en plus des Nested Loop et Hash Join Bitmap Heap Scan : les Heap Scan sont parallélisables Index Scan et Index Only Scan parallélisables Préservation du tri des données d’une tâche parallélisée slardiere PG10 – novembre 2017 32 / 41
  • 33. Configuration CONFIGURE IT ! slardiere PG10 – novembre 2017 33 / 41
  • 34. Configuration Parallélisme max_parallel_workers_per_gather : 2 par défaut, active le parallélisme max_parallel_workers : nombre maximal de tâches utilisables min_parallel_table_scan_size et min_parallel_index_scan_size remplacent min_parallel_relation_size, respectivement 8MB et 512kB slardiere PG10 – novembre 2017 34 / 41
  • 35. Configuration Réplication Réplication activée par défaut : wal_level : replica max_wal_senders : 10 max_replication_slots : 10 pg_hba.conf pour les connexions locales hot_standby : on slardiere PG10 – novembre 2017 35 / 41
  • 36. Configuration Réplication Réplication synchrone configurable : synchronous_standby_names accepte : ANY N ( node1, node2, ... ) FIRST N ( node1, node2, ... ) slardiere PG10 – novembre 2017 36 / 41
  • 37. Extensions EXTENDS IT slardiere PG10 – novembre 2017 37 / 41
  • 38. Extensions Extensions FDW : file_fdw sait utiliser des programmes postgres_fdw pousse les joins et les aggrégats amcheck peut valider la structure d’un index slardiere PG10 – novembre 2017 38 / 41
  • 39. 11 POSTGRESQL 11 slardiere PG10 – novembre 2017 39 / 41
  • 40. 11 11 Déjà 140 commits PARTITION BY HASH (username); Contrib : pg_autoprewarm https://commitfest.postgresql.org/ slardiere PG10 – novembre 2017 40 / 41
  • 41. 11 Merci! DES QUESTIONS ? slardiere PG10 – novembre 2017 41 / 41