Em 28 de junho de 2017 21:49, Euler Taveira <eu...@timbira.com.br> escreveu:

>
> O pg_dump faz um bloqueio (AccessShareLock) para cada tabela que irá
> copiar. Como ele faz isso numa única transação, o parâmetro
> max_locks_per_transaction deve ser no mínimo igual ao número de tabelas a
> serem copiadas.
>

Essa sentença ficou incorreta (possivelmente por falta de cafeína?). Quis
dizer que o valor de max_locks_per_transaction deve ser suficiente para que
o cálculo max_locks_per_transaction * (max_connections +
max_prepared_transactions) seja no mínimo igual ao número de tabelas a
serem copiadas. (Foi exatamente o que o Fabrizio disse no outro email).
Quanto ao cálculo correto:

max_locks_per_transaction * (max_connections + max_prepared_transactions) =
objetos_atuais

aumentando x locks para satisfazer o pg_dump teríamos:

max_locks_per_transaction' * (max_connections + max_prepared_transactions)
= objetos_atuais + x
max_locks_per_transaction' = (objetos_atuais + x) / (max_connections +
max_prepared_transactions)

Considerando os valores padrão (max_connections = 100;
max_prepared_transactions = 0 ; max_locks_per_transaction = 64),
objetos_atuais seria 6400. x = 181 esquemas x 233 tabelas = 42173.

max_locks_per_transaction' = (6400 + 42173) / (100 + 0) ~ 486

É sempre bom deixar uma margem de segurança porque
max_locks_per_transaction precisa de um reinício do serviço.


-- 
   Euler Taveira                                   Timbira -
http://www.timbira.com.br/
   PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento
<http://www.timbira.com.br>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a