Escolar Documentos
Profissional Documentos
Cultura Documentos
com
Curso 801
Administração
PostgreSQL com Alta
Performance
Versão 2015_3.0
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Objetivos da aula:
➢ Vacuum e analyze
➢ Vacuum Full
➢ Freeze e Autovacuum
➢ Locks e deadlocks
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
IT Experience
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
MVCC
Mas como fazer com que uma transação que alterou um dado não propague
esta alteração para uma transação concorrente?
A transação que alterou o dado já terá a nova versão, assim como novas
transações que venham após o término daquela que fez a alteração, respeitando
totalmente a norma ACID.
Laboratório Dexter
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Informações sobre transações:
# su - postgres
1
$ psql dexter;
2
=# BEGIN;
3
=# SELECT txid_current();
4
=# COMMIT;
5
=# BEGIN;
6
=# SELECT txid_current();
7
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Informações sobre transações:
9=# COMMIT;
Quando uma linha é atualizada a tupla atual tem seu xmax preenchido pelo
número da transação atual e seu conteúdo copiado para uma nova tupla contendo o
xmin com o número da transação atual.
Quando uma linha é deletada, apenas seu xmax é preenchido com o número
da transação corrente.
Para saber com qual versão de uma linha é valida para uma transação, basta
verificar se o número da transação atual (txid) for maior que o xmin e menor que o
xmax. Matematicamente txid > xmin e txid < xmax.
Vacuum e Analyze
➢ Tuplas mortas:
● update
● delete
● insert
➢ Vacuum – Marca tuplas mortas para
reaproveitamento;
➢ Analyze – Gera estatística das tabelas.
10
● UPDATE
● DELETE
● INSERT (somente quando ocorre rollback)
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Informações sobre tuplas mortas:
2 =# ANALYZE clientes;
11
Neste caso o resultado indica que existem 4 tuplas mortas e 1 tupla viva.
Porém, quando consultada a tabela, verifica-se que o número de registros da tabela
não reflete no número de tuplas vivas apresentada. Isso ocorre devido ao fato das
estatísticas estarem desatualizadas.
Laboratório Dexter
Executar os comandos na
máquina DB Master
Informações sobre tuplas mortas:
7=# \q
8$ exit
12
Vale ressaltar que o vacuum não elimina as tuplas mortas, ele apenas as
marca para serem reutilizadas por novos dados modificados na tabela.
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Vacuum
● vacuum_cost_delay = 0ms
● vacuum_cost_page_hit = 1
● vacuum_cost_page_miss = 10
● vacuum_cost_page_dirty = 20
● vacuum_cost_limit = 200
13
Autovacuum
necessidade;
“log_autovacuum_min_duration=0”
14
Autovacuum
➢ autovacuum_max_workers = 3
➢ autovacuum_naptime = 1min
➢ autovacuum_vacuum_threshold = 50
➢ autovacuum_analyze_threshold = 50
➢ autovacuum_vacuum_scale_factor = 0.2
➢ autovacuum_analyze_scale_factor = 0.1
➢ autovacuum_vacuum_cost_limit = -1
16
Para permitir ajustes finos, as opções acima podem ser configurados por tabela.
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Autovacuum
18
Vacuum Full
19
● Para realizar esta operação é necessário ter espaço livre em disco equivalente ao
dobro do tamanho atual da tabela, pois a tabela é duplicada durante a operação
(versão 9.1 ou superior).
● É um processo lento (foi aprimorado na versão 9.1)
●
Faz lock exclusivo em toda a tabela.
● Recomenda-se recriar os índices após esta operação.
● Não pode ser executado sobre tabelas em produção.
Freeze
20
Sabe-se que o vacuum, por padrão, só analisa as páginas onde existem tuplas
mortas, porem é necessário que a tabela seja analisada por completo quando
alcança determinada idade, a qual é definida em vacuum_freeze_table_age.
Locks e Deadlocks
➢ Implícitos ou explícitos;
➢ Compartilhados ou exclusivos;
21
Laboratório Dexter
➢ Tarefas:
22
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Diretivas do postgresql.conf:
a) max_connections
1# vim /etc/postgresql/9.4/main/postgresql.conf
....
max_connections = 3000
23
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Diretivas do postgresql.conf:
b) shared_buffers
2# vim /etc/postgresql/9.4/main/postgresql.conf
....
shared_buffers = 256MB
24
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Diretivas do postgresql.conf:
c) maintenance_work_mem
3# vim /etc/postgresql/9.4/main/postgresql.conf
....
maintenance_work_mem = 256MB
25
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Diretivas do postgresql.conf:
d) checkpoint_segments
4# vim /etc/postgresql/9.4/main/postgresql.conf
....
checkpoint_segments = 50
26
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Diretivas do postgresql.conf:
e) autovacuum
5# vim /etc/postgresql/9.4/main/postgresql.conf
....
autovacuum = off
7# tail -f /var/log/postgresql/postgresql-9.4-main.log
27
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Funcionamento do armazenamento físico:
# su - postgres
1
$ psql
2
'dexter';
28
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Laboratório Dexter
Executar os comandos na
máquina DB Master
Funcionamento do armazenamento físico:
b) Descubra o OID da tabela "clientes" e encontre-a no
seu sistema de arquivos. Descreva a estrutura encontrada.
29
Laboratório Dexter
Executar os comandos na
máquina DB Master
Verificar o funcionamento do MVCC:
● Terminal A
1=# \c dexter
2=# BEGIN;
● Terminal B
O QUE ACONTECEU?
30
Laboratório Dexter
Executar os comandos na
máquina DB Master
Verificar funcionamento do MVCC:
➢ Terminal B
id = 1;
➢ Terminal C
#
6 ps aux | grep idle
O QUE ACONTECEU?
31
Laboratório Dexter
Executar os comandos na
máquina DB Master
Verificar funcionamento do MVCC:
➢ Terminal A
=# COMMIT;
7
➢ Terminais B e A
=#
8 SELECT * FROM clientes WHERE id = 1;
32
Anotações:
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
__________________________________________________
Sidymar Ramos Prexedes / sprexedes@hotmail.com
Próximos Passos
Mãos à obra!
33
Sidymar Ramos Prexedes / sprexedes@hotmail.com