PostgreSQL 9.4: O que vem por aí
timbira
A empresa brasileira de PostgreSQL
03/03/2015
Sobre este material
timbira
• Copyright © 2015 Timbira. Todos os direitos reservados.
• Embora este material tenha sido elaborado com toda
precaução, os autores não assumem quaisquer
responsabilidades por erros, omissões ou danos resultantes da
utilização das informações aqui contidas.
• É expressamente proibido copiar, modificar, publicar,
distribuir, transmitir ou vender este material.
• Se você encontrar qualquer erro, por favor reporte-o a
[email protected]
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
1 / 39
Ciclo de Desenvolvimento
timbira
• início: branch 9.3
• Commit fest 1: jun/2013
• Commit fest 2: set/2013
• Commit fest 3: nov/2013
• Commit fest 4: jan/2014
• Beta 1: 15 mai/2014
• Beta 2: 24 jul/2014
• Beta 3: 09 out/2014
• RC1: 20 nov/2014
• lançamento: 18 dez/2014
• versão atual: 9.4.1
Estatísticas
2732 files changed, 293801 insertions(+), 241440 deletions(-)
Timbira - A empresa brasileira de PostgreSQL
2 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
3 / 39
Melhorias de Performance
timbira
• reduzir bloqueios de alguns comandos ALTER TABLE
• visões materializadas pode ser atualizadas sem bloquear
leituras
• acelerar agregações que usam tipo NUMERIC
• escrever somente a parte modificada de registros atualizados
no WAL
• múltiplas conexões inserindo simultaneamente nos buffers do
WAL
• reduzir memória alocada em blocos DO
• aumentar limite da quantidade de memória usada por
ordenação durante criação de índice
Timbira - A empresa brasileira de PostgreSQL
4 / 39
timbira
Índices GIN
• reduzir tamanho dos índices GIN
• acelerar buscas em índices de múltiplas colunas
Timbira - A empresa brasileira de PostgreSQL
5 / 39
timbira
EXPLAIN
• saída do EXPLAIN ANALYZE mostra o tempo gasto com
planejamento da consulta
t i m b i r a=# EXPLAIN (ANALYZE, BUFFERS) SELECT bid ,
b b a l a n c e FROM pgbench_branches WHERE b i d > 4 ;
Seq Scan on pgbench_branches ( c o s t = 0 . 0 0 . . 1 . 0 6 rows=1
w i d t h =8) ( a c t u a l time = 0 . 0 1 2 . . 0 . 0 1 3 rows=1 l o o p s =1)
F i l t e r : ( b i d > 4)
Rows Removed by F i l t e r : 4
B u f f e r s : s h a r e d h i t =1
P l a n n i n g time : 0 . 1 5 6 ms
E x e c u t i o n time : 0 . 0 3 9 ms
(6 r e g i s t r o s )
Timbira - A empresa brasileira de PostgreSQL
6 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
7 / 39
tipos de dados
timbira
• tipo de dados line
• tipo de dados pg_lsn
• tipo de dados jsonb
• aceita mesma entrada do que tipo json
• entrada é mais lenta
• suporta indexação
• não preserva espaços, ordem das chaves e chaves duplicadas
Timbira - A empresa brasileira de PostgreSQL
8 / 39
jsonb: Ilustrando
timbira
t i m b i r a=# c r e a t e t a b l e t e s t e j s o n ( a j s o n b ) ;
t i m b i r a=# i n s e r t i n t o t e s t e j s o n v a l u e s ( ’ {” c p f ” :
”123456789 −01” , ”nome ” : ” E u l e r T a v e i r a ” , ” empresa ” : ”
T i m b i r a ” , ” c i d a d e ” : [ ” Palmas ” , ” G o i â n i a ” , ” Porto
Alegre ”]} ’ ) ;
t i m b i r a=# i n s e r t i n t o t e s t e j s o n v a l u e s ( ’ {” c p f ” :
”111333555 −01” , ”nome ” : ” John Doe ” , ” empresa ” : ”
Google ” , ” c i d a d e ” : [ ” Rio de J a n e i r o ” , ” N a t a l ” ] } ’ ) ;
Timbira - A empresa brasileira de PostgreSQL
9 / 39
jsonb: Ilustrando consultas
timbira
t i m b i r a=# s e l e c t a−> ’ c p f ’ as cpf , a−> ’ nome ’ as nome from
t e s t e j s o n where a @> ’ {” empresa ” : ” Google ”} ’ ;
cpf
|
nome
−−−−−−−−−−−−−−−−+−−−−−−−−−−−−
” 111333555 −01 ” | ” John Doe”
(1 r e g i s t r o )
t i m b i r a=# s e l e c t a−> ’ c p f ’ as cpf , a−> ’ nome ’ as nome from
t e s t e j s o n where a −> ’ c i d a d e ’ ? ’ Porto A l e g r e ’ ;
cpf
|
nome
−−−−−−−−−−−−−−−−+−−−−−−−−−−−−−−−−−−
” 123456789 −01 ” | ” E u l e r T a v e i r a ”
” 123789456 −01 ” | ” F a b r i z i o M e l l o ”
(2 r e g i s t r o s )
Timbira - A empresa brasileira de PostgreSQL
10 / 39
jsonb: Ilustrando indexação
timbira
t i m b i r a=# c r e a t e i n d e x t e s t e j s o n i d x on t e s t e j s o n u s i n g
g i n ( ( a −> ’ c i d a d e ’ ) ) ;
t i m b i r a=# s e t e n a b l e _ s e q s c a n t o o f f ;
t i m b i r a=# e x p l a i n a n a l y z e s e l e c t a−> ’ c p f ’ as cpf , a−> ’
nome ’ as nome from t e s t e j s o n where a −> ’ c i d a d e ’ ? ’
Porto A l e g r e ’ ;
Bitmap Heap Scan on t e s t e j s o n ( c o s t = 8 . 0 0 . . 1 2 . 0 2 rows=1
w i d t h =32) ( a c t u a l time = 0 . 0 3 3 . . 0 . 0 3 6 rows=2 l o o p s =1)
Recheck Cond : ( ( a −> ’ c i d a d e ’ : : t e x t ) ? ’ Porto A l e g r e ’
: : text )
Heap B l o c k s : e x a c t=1
−> Bitmap Index Scan on t e s t e j s o n i d x ( c o s t
= 0 . 0 0 . . 8 . 0 0 rows=1 w i d t h =0) ( a c t u a l time
= 0 . 0 1 4 . . 0 . 0 1 4 rows=2 l o o p s =1)
Index Cond : ( ( a −> ’ c i d a d e ’ : : t e x t ) ? ’ Porto
Alegre ’ : : text )
P l a n n i n g time : 0 . 1 0 6 ms
E x e c u t i o n time : 0 . 0 7 7 ms
(7 r e g i s t r o s )
Timbira - A empresa brasileira de PostgreSQL
11 / 39
timbira
json
• novas funções para permitir construir documentos complexos
JSON
t i m b i r a=# s e l e c t * from j s o n _ t o _ r e c o r d ( ’ {” s o f t w a r e ” : ”
PostgreSQL ” , ” empresa ” : ” T i m b i r a ” , ” p a í s ” : ” B r a s i l ”} ’
) as t ( s o f t w a r e t e x t , empresa t e x t , c o u n t r y t e x t ) ;
s o f t w a r e | empresa | c o u n t r y
−−−−−−−−−−−−+−−−−−−−−−+−−−−−−−−−
PostgreSQL | T i m b i r a | �
(1 r e g i s t r o )
t i m b i r a=# s e l e c t j s o n _ b u i l d _ o b j e c t ( ’ s o f t w a r e ’ , ’
PostgreSQL ’ , ’ empresa ’ , ’ T i m b i r a ’ , ’ p a í s ’ , ’ B r a s i l ’ ) ;
{” s o f t w a r e ” : ” PostgreSQL ” , ” empresa ” : ” T i m b i r a ” , ”
p a í s ” : ” B r a s i l ”}
(1 r e g i s t r o )
Timbira - A empresa brasileira de PostgreSQL
12 / 39
timbira
FILTER
• cláusula FILTER em agregações
• esqueça o CASE THEN!
t i m b i r a=# SELECT bid , count ( * ) t o t a l , count ( * ) FILTER (
WHERE d e l t a > 0) d e p o s i t o FROM p g b e n c h _ h i s t o r y GROUP
BY b i d ;
bid | t o t a l | deposito
−−−−−+−−−−−−−+−−−−−−−−−−
6 |
483 |
228
14 |
457 |
216
8 |
506 |
259
12 |
417 |
230
1 |
425 |
202
...
9 |
434 |
229
7 |
474 |
254
(15 r e g i s t r o s )
Timbira - A empresa brasileira de PostgreSQL
13 / 39
Agregação de conjunto ordenado
timbira
• nova classe de agregações
• cláusula WITHIN GROUP
•
t i m b i r a=# s e l e c t bid , mode ( ) w i t h i n group ( o r d e r by t i d )
from p g b e n c h _ h i s t o r y group by b i d ;
b i d | mode
−−−−−+−−−−−−
1 | 126
2 |
84
3 |
82
4 |
14
5 |
22
6 |
6
...
13 |
92
14 |
90
15 |
45
(15 r e g i s t r o s )
Timbira - A empresa brasileira de PostgreSQL
14 / 39
timbira
PL/pgSQL
• armazenar pilha de chamadas de uma função
• opção print_strict_params fornece parâmetros passados a
consultas que geram erros STRICT
• opções para fornecer erros (extra_errors) e avisos
(extra_warnings) adicionais de uma função
Timbira - A empresa brasileira de PostgreSQL
15 / 39
timbira
Gatilhos
• gatilhos em tabelas externas
• gatilhos de eventos em PL/Perl e PL/Tcl
Timbira - A empresa brasileira de PostgreSQL
16 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
17 / 39
background workers
timbira
• background workers foi adicionado na 9.3
• pode ser registrado, iniciado e terminado dinamicamente
• memória compartilhada pode ser alocada dinamicamente
Timbira - A empresa brasileira de PostgreSQL
18 / 39
ALTER SYSTEM
timbira
• parâmetros em um outro arquivo postgresql.auto.conf
• os parâmetros são aplicados após postgresql.conf
• DEFAULT ou RESET removem o parâmetro do
postgresql.auto.conf
• os parâmetros tem efeito somente após o reload
• somente para super-usuários
• não é permitido dentro de um bloco de transação
Timbira - A empresa brasileira de PostgreSQL
19 / 39
ALTER SYSTEM: exemplo
timbira
t i m b i r a=# a l t e r syste m s e t work_mem t o ’ 5MB’ ;
t i m b i r a=# show work_mem ;
work_mem
−−−−−−−−−−
4MB
(1 r e g i s t r o )
t i m b i r a=# s e l e c t p g _ r e l o a d _ c o n f ( ) ;
LOG : SIGHUP r e c e b i d o , r e c a r r e g a n d o a r q u i v o s de
configuração
LOG : p a r â m e t r o ”work_mem” mudou p a r a ” 5MB”
Timbira - A empresa brasileira de PostgreSQL
20 / 39
pg_stat_archiver
timbira
t i m b i r a=# s e l e c t * from p g _ s t a t _ a r c h i v e r ;
−[ RECORD 1 ]−−−−−−+−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
archived_count
| 13
l a s t _ a r c h i v e d _ w a l | 00000001000000000000000D
l a s t _ a r c h i v e d _ t i m e | 2015−03−02 15:38:05.272208 −03
failed_count
| 40
last_failed_wal
| 000000010000000000000001
last_failed_time
| 2015−03−01 05:38:00.048389 −03
stats_reset
| 2015−03−01 00:20:57.526647 −03
Timbira - A empresa brasileira de PostgreSQL
21 / 39
timbira
autovacuum
• novo parâmetro autovacuum_work_mem
• padrão é utilizar maintenance_work_mem (comportamento
antigo)
• controle independente de memória utilizada pelo autovacuum
Timbira - A empresa brasileira de PostgreSQL
22 / 39
timbira
tablespaces
• CREATE TABLESPACE ... WITH ( ... )
• ALTER [ TABLE | INDEX | MATERIALIZED VIEW ] ALL IN
TABLESPACE foo SET TABLESPACE bar
• move todos os objetos de uma tablespace para outra
Timbira - A empresa brasileira de PostgreSQL
23 / 39
timbira
Bloqueios
• informação detalhada sobre quem está esperando o que e em
qual tabela
LOG :
p r o c e s s o 15370 a i n d a e s p e r a p o r ShareLock em
t r a n s a ç ã o 1009 após 1 0 0 0 . 1 4 6 ms
DETALHE: P r o c e s s h o l d i n g t h e l o c k : 1 5 3 0 6 . Wait queue :
15370.
CONTEXTO: enquanto a t u a l i z a v a t u p l a ( 0 , 5 ) na r e l a ç ã o ”
foo ”
COMANDO: update f o o s e t b = ’ t e s t 2 ’ where a = 1 ;
Timbira - A empresa brasileira de PostgreSQL
24 / 39
timbira
Parâmetros
• log_connections mostra informação sobre SSL
• parâmetro huge_pages para utilizar huge pages no Linux
• aumento dos valores padrão:
• work_mem
• maintenance_work_mem
• effective_cache_size
• permitir unidades em TB
Timbira - A empresa brasileira de PostgreSQL
25 / 39
timbira
Opções
• createuser: opção -g especifica role da qual será membro
• pg_restore: opções -I, -P, -T e -n podem ser especificadas
várias vezes
• pg_dump, pg_dumpall e pg_restore: opção --if-exists
• adicionar IF EXISTS ao remover objetos antigos
• deve especificar opção --clean também
• pg_basebackup: opção --xlogdir
• pg_basebackup: opção --max-rate
• pg_basebackup: opção --tablespace-mapping
• vacuumdb: opção --analyze-in-stages
Timbira - A empresa brasileira de PostgreSQL
26 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
27 / 39
Replicação e Recuperação
timbira
• novo parâmetro no recovery.conf recovery_min_apply_delay
para configurar atraso na replicação
• opção immediate do parâmetro recovery_target para
recuperação assim que estado consistente for atingido
• adicionado entradas (slots) de replicação
• adicionado novo wal_level chamado logical
• parâmetro REPLICA IDENTITY para controlar replicação
lógica
• opção user_catalog_table para identificar tabelas do usuário
envolvidas na replicação lógica
• decodificação lógica via walsender
• pg_recvlogical: receber dados da decodificação lógica
Timbira - A empresa brasileira de PostgreSQL
28 / 39
recovery_min_apply_delay: exemplo
timbira
standby_mode = ’ on ’
p r i m a r y _ c o n n i n f o = ’ h o s t = 1 2 7 . 0 . 0 . 1 ’ u s e r= ’ r e p l i c a c a o ’ ”
r e c o v e r y _ t i m e _ d e l a y = 30000
• tempo em milisegundos
• replicação sincrona não é afetada
Timbira - A empresa brasileira de PostgreSQL
29 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
30 / 39
timbira
Extensões
• pgcrypto: função gen_random_uuid
• pg_prewarm: carregar dados de relações na cache do
PostgreSQL
• auto_explain: opção para incluir tempo de execução de
gatilhos
• pgbench: opção --progress
• pgbench: opção --rate (taxa de transações)
• pg_stat_statements: usar arquivo ao invés da memória
compartilhada para armazenar consultas
• pg_stat_statements: especificar um hash como identificador
da consulta
• pg_stat_statements: especificar parâmetro para omitir texto
da consulta
Timbira - A empresa brasileira de PostgreSQL
31 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
32 / 39
Imcompatibilidades
timbira
• EXPLAIN ANALYZE: “total time” -> “execution time”
• DISCARD ALL: descarta estado de sequências
• autenticação krb5 removida: use GSSAPI
• usa o último parâmetro recovery_target_* especificado
• suporte ao sistema operacional IRIX
• última versão ago/2006
• suporte até dez/2013
• leia as notas de lançamento!
Timbira - A empresa brasileira de PostgreSQL
33 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
34 / 39
timbira
9.5
• gatilho de eventos: COMMENT, SECURITY LABEL e
GRANT/REVOKE
• gatilho de eventos: reescrita de tabela
• ddl_command_start e ddl_command_end
• substituir checkpoint_segments por min_wal_size e
max_wal_size
• vacuumdb: modo paralelo
• REINDEX SCHEMA
• políticas de segurança a nível de registros (RLS)
• cláusula SKIP LOCKED para bloqueios em registros
• ALTER TABLE ... SET LOGGED / UNLOGGED
• IMPORT FOREIGN SCHEMA
Timbira - A empresa brasileira de PostgreSQL
35 / 39
timbira
9.5
• UPDATE foo SET (col1, col2, ...) = (SELECT ...), ...
• índice BRIN (Block Range Index)
• utilizar abreviação de chaves para ordenação rápida de tipo
text
• acelerar cálculo do CRC usando algoritmo slicing-by-8
• escrita do WAL
• aplicação do wAL
• novo formato do WAL
• ações do servidor em espera ao fim da recuperação
• action_at_recovery_target = pause | promote | shutdown
• pg_dump: opção --snapshot
Timbira - A empresa brasileira de PostgreSQL
36 / 39
timbira
Resumo
1 Introdução
2 Performance
3 Desenvolvimento
4 Administração
5 Replicação e Recuperação
6 Extensões
7 Migração
8 9.5
9 Conclusão
Timbira - A empresa brasileira de PostgreSQL
37 / 39
timbira
Referências
• pgsql-announce: PostgreSQL Weekly News
• http://www.postgresql.org/docs/current/
• http://www.postgresql.org/docs/devel/static
• http://www.depesz.com
• http://michael.otacoo.com
Timbira - A empresa brasileira de PostgreSQL
38 / 39
timbira
Treinamentos
• PostgreSQL Backup e Restore:
https://www.eventick.com.br/pgsql-bkp-201503
• PostgreSQL Tuning:
https://www.eventick.com.br/pgsql-tuning-201504
• PostgreSQL Monitoramento:
https://www.eventick.com.br/pgsql-mon-201505
• PostgreSQL Replicação Nativa:
https://www.eventick.com.br/pgsql-replicacao-201505
Timbira - A empresa brasileira de PostgreSQL
39 / 39
Download

PostgreSQL 9.4: O que vem por aí