Slide 1

Slide 1 text

Novedades de PostgreSQL 11 Jorge Solórzano Almanza

Slide 2

Slide 2 text

Novedades de PostgreSQL 11 Jorge Solórzano Almanza Java Software Developer y DBA en OnGres PostgreSQL JDBC Driver Contributor @pg_jorsol Acerca de...

Slide 3

Slide 3 text

Novedades de PostgreSQL 11 Disclaimer ► The views expressed herein are those of the presenter only; they do not necessarily reflect the views of my employer nor the PostgreSQL community. ► This presentation contains statements which are, or may be deemed to be “forward-looking statements” which are prospective in nature.

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Novedades de PostgreSQL 11 Calendario de desarrollo ► Agosto 2017 – rama 10 ► Septiembre 2017 – CF1 ► Noviembre 2017 – CF2 ► Enero 2018 – CF3 ► Marzo 2018 – CF4 ► 24 Mayo 2018 – Beta 1 ► 28 Junio 2018 – Beta 2 ► 09 Agosto 2018 – Beta 3 ► 20 Septiembre 2018 – Beta 4 ► 11 Octubre 2018 – RC1 18 Octubre 2018 – GA?

Slide 6

Slide 6 text

Novedades de PostgreSQL 11 Áreas de mejoras ► Paralelismo ► Procedimientos almacenados ► Rendimiento general ► Particionamiento ► SQL ► Varios

Slide 7

Slide 7 text

Novedades de PostgreSQL 11 Atención al (Texto) Rojo

Slide 8

Slide 8 text

Novedades de PostgreSQL 11 Incompatibilidades

Slide 9

Slide 9 text

Novedades de PostgreSQL 11 Incompatibilidades ► pg_dump/pg_restore permite restaurar todos los aspectos de la base de datos. ► Cláusula WITH de CREATE FUNCTION eliminada. ► Eliminadas funciones de contrib/adminpack pg_file_read(), pg_file_length(), and pg_logfile_rotate(). ► Módulo contrib/chkpass eliminado.

Slide 10

Slide 10 text

Novedades de PostgreSQL 11 Incompatibilidades ► Columnas de catálogos eliminadas o reemplazadas. ► Función to_number() modificada para ignorar el separador en la plantilla. ► to_date(), to_number(), y to_timestamp() ignoran caracteres multibyte en las plantillas. ► En el Protocolo Extendido de Consulta el statement_timeout aplica a cada mensaje Execute.

Slide 11

Slide 11 text

Novedades de PostgreSQL 11 Paralelismo

Slide 12

Slide 12 text

Novedades de PostgreSQL 11 Paralelismo ► PostgreSQL 9.6 infraestructura inicial (OFF). – sequential scans, joins y aggregates. ► PostgreSQL 10 (ON). – B-tree index scan, bitmap heap scans – merge joins, non-correlated subqueries

Slide 13

Slide 13 text

Novedades de PostgreSQL 11 Paralelismo PostgreSQL 11 ► Hash joins ► CREATE INDEX para índices B-tree ► CREATE TABLE .. AS, CREATE MATERIALIZED VIEW. ► Algunas consultas con UNION

Slide 14

Slide 14 text

Novedades de PostgreSQL 11 Paralelismo - Ejemplo

Slide 15

Slide 15 text

Novedades de PostgreSQL 11 Procedimientos almacenados

Slide 16

Slide 16 text

Novedades de PostgreSQL 11 Procedimientos almacenados ► Similares a las funciones de toda la vida. ► Permiten controlar las transacciones dentro del procedimiento. ► No retornan valores. ► Se ejecutan usando CALL.

Slide 17

Slide 17 text

Novedades de PostgreSQL 11 Procedimientos almacenados ► Es una funcionalidad nueva en PostgreSQL 11. ► No esta del todo “cocinada”. ► Soporte oficial para algunas capas de abstracción aka drivers como JDBC y Npgsql en modo de espera. * – https://www.postgresql.org/message-id/4285.1537201440%40sss.pgh.pa.us

Slide 18

Slide 18 text

Novedades de PostgreSQL 11 Procedimientos almacenados - Ejemplo CREATE PROCEDURE transaction_test1 () LANGUAGE plpgsql AS $$ BEGIN FOR i IN 0..9 LOOP INSERT INTO test1 (a) VALUES (i); IF i % 2 = 0 THEN COMMIT; ELSE ROLLBACK; END IF; END LOOP; END; $$;

Slide 19

Slide 19 text

Novedades de PostgreSQL 11 Rendimiento general

Slide 20

Slide 20 text

Novedades de PostgreSQL 11 Rendimiento general ► ALTER TABLE .. ADD COLUMN con una columna NOT NULL y DEFAULT. ► VACUUM evita index scans innecesarios. ► postgres_fdw empuja UPDATEs y DELETEs usando joins a los servidores remotos.

Slide 21

Slide 21 text

Novedades de PostgreSQL 11 Compilación JIT ► Compilación Just-In-Time ► Usa la integración con LLVM. ► Actualmente acelera evaluación de expresiones y deformación de tuplas. (Más operaciones en el futuro) ► Expresiones en línea (Inlining).

Slide 22

Slide 22 text

Novedades de PostgreSQL 11 Compilación JIT ► Beneficio en consultas que son principalmente intensivas en CPU. (Analíticas) ► Para consultas pequeñas, el costo es mayor. ► En PostgreSQL 11: OFF

Slide 23

Slide 23 text

Novedades de PostgreSQL 11 Particionamiento

Slide 24

Slide 24 text

Novedades de PostgreSQL 11 Particionado por Hash ► PostgreSQL 10 – con RANGE y LIST ► PostgreSQL 11 – HASH ► Distribuye las filas basadas en el hash de su llave de partición.

Slide 25

Slide 25 text

Novedades de PostgreSQL 11 Particionado por Hash - Ejemplo ► CREATE TABLE hp (id serial, foo text ) PARTITION BY HASH (foo); ► CREATE TABLE hp_0 PARTITION OF hp FOR VALUES WITH (MODULUS 3, REMAINDER 0); ► CREATE TABLE hp_1 PARTITION OF hp FOR VALUES WITH (MODULUS 3, REMAINDER 1); ► CREATE TABLE hp_2 PARTITION OF hp FOR VALUES WITH (MODULUS 3, REMAINDER 2);

Slide 26

Slide 26 text

Novedades de PostgreSQL 11 Particionado por Hash - Ejemplo ► INSERT INTO hp SELECT md5(v::text) FROM generate_series(0,10000) v;

Slide 27

Slide 27 text

Novedades de PostgreSQL 11 Conteo de particiones SELECT name, COUNT(*) FROM hp, LATERAL (SELECT relname FROM pg_class WHERE pg_class.oid = hp.tableoid) AS table_name (name) GROUP BY name ORDER BY 1;

Slide 28

Slide 28 text

Novedades de PostgreSQL 11 Particionado por Hash - Ejemplo

Slide 29

Slide 29 text

Novedades de PostgreSQL 11 UPDATE’s mueven filas entre particiones ► PostgreSQL 10 no te permite actualizar columnas que contengan la llave de particionado. pg10=> UPDATE measurement SET logdate='2017-07-10'; ERROR: new row for relation "measurement_y2016" violates partition constraint DETAIL: Failing row contains (2017-07-10, 66, 100).

Slide 30

Slide 30 text

Novedades de PostgreSQL 11 Particiones Default ► Con la v11 es posible crear una partición “default”. ► Las filas que no aplican en los rangos o listas existentes entran en la partición “default”. ► En la v10 insertar este tipo de filas falla.

Slide 31

Slide 31 text

Novedades de PostgreSQL 11 Particiones Default - Ejemplo ► CREATE TABLE measurement_default PARTITION OF measurement DEFAULT; ● Luego de agregar un DEFAULT, no se puede agregar otra partición para cubrir un nuevo rango, es necesario un DETACH manual.

Slide 32

Slide 32 text

Novedades de PostgreSQL 11 Creación de índices automáticos ► En la v10 se deben crear índices manualmente por cada partición. ► En la v11 si creas un índice en la tabla padre, se creará automáticamente en las particiones. ► Las particiones nuevas también obtienen los índices creados “automágicamente”.

Slide 33

Slide 33 text

Novedades de PostgreSQL 11 Soporte para llaves foráneas ► PostgreSQL 10 CREATE TABLE invoices ( invoice_id integer PRIMARY KEY ); CREATE TABLE sale_amounts_1 ( saledate date NOT NULL, invoiceid integer REFERENCES invoices(invoice_id) ) PARTITION BY RANGE (saledate); ERROR: foreign key constraints are not supported on partitioned tables LINE 3: invoiceid integer REFERENCES invoices(invoice_id)

Slide 34

Slide 34 text

Novedades de PostgreSQL 11 Índices únicos… y llaves primarias ► PostgreSQL 10 CREATE TABLE sale_amounts_2 ( saledate date NOT NULL, invoiceid INTEGER, UNIQUE (saledate, invoiceid) ) PARTITION BY RANGE (saledate); ERROR: unique constraints are not supported on partitioned tables LINE 4: UNIQUE (saledate, invoiceid)

Slide 35

Slide 35 text

Novedades de PostgreSQL 11 SQL

Slide 36

Slide 36 text

Novedades de PostgreSQL 11 SQL ► Las funciones de ventana soportan todas las opciones del SQL:2011. ► RANGE distance PRECEDING/FOLLOWING, GROUPS mode, y frame exclusion. ► Marcus Winand: https://youtu.be/lL6g9PHHin4

Slide 37

Slide 37 text

Novedades de PostgreSQL 11 Varios

Slide 38

Slide 38 text

Novedades de PostgreSQL 11 Replicación lógica ► Soporte para TRUNCATE. * ► Función pg_replication_slot_advance – Avanza el slot a un LSN en el publicador. – Sirve para resolución de conflictos. – SELECT pg_replication_slot_advance('sub1', pg_current_wal_lsn()) ;

Slide 39

Slide 39 text

Novedades de PostgreSQL 11 Nuevos roles Nombre Descripción pg_execute_server_program Ejecuta programas en el servidor pg_read_server_files Lee archivos en el servidor pg_write_server_files Escribe archivos en el servidor

Slide 40

Slide 40 text

Novedades de PostgreSQL 11

Slide 41

Slide 41 text

Novedades de PostgreSQL 11 Large Pages en Windows ► La opción “Lock Pages In Memory” ahora está disponible en un entrono Microsoft Windows . ► Cuando huge_pages[1] está en “try” (default) o en “on”. ► Se recomienda a “off” (a menos que sepas que estas haciendo). ► [1] https://postgresqlco.nf/en/doc/param/huge_pages?version=11

Slide 42

Slide 42 text

Novedades de PostgreSQL 11 Varios ► VACUUM, ANALYZE de multiples tablas. ► LIMIT es empujado hacia sub-consultas. ► CONSTANTS en PL/pgSQL. ► Channel binding para SCRAM. ► Tamaño de WAL configurable en initdb.

Slide 43

Slide 43 text

Novedades de PostgreSQL 11 Varios ► pg_verity_checksums ► pg_basebackup verifica la integridad del checksum de los bloques del respaldo. ► Módulo amcheck, consistencia de índices btree.

Slide 44

Slide 44 text

Novedades de PostgreSQL 11 CREATE INDEX INCLUDE ► Agrega columnas a un índice. ► Caso de uso: UNIQUE CONSTRAINT ► Puede mejorar el rendimiento… ► También útil en columnas que no tienen soporte btree. ► CREATE UNIQUE INDEX idx1_data1 ON data1 (c1, c2) INCLUDE (c3);

Slide 45

Slide 45 text

Novedades de PostgreSQL 11

Slide 46

Slide 46 text

Novedades de PostgreSQL 11

Slide 47

Slide 47 text

Novedades de PostgreSQL 11 Salir de psql ► quit ► exit

Slide 48

Slide 48 text

Novedades de PostgreSQL 11 ¡Gracias!