Autovacuum, eu sou seu amigo, mas se puder me poupar trabalho, lhe agradeço.
Já posso até imaginar o que se passa na sua cabeça nesse momento.
"Lá vem outro texto falando do autovacuum ! Será que ainda existe algo que eu não saiba a respeito ?"
Vou poupar um pouco do seu tempo. Se eu escrever algumas palavras como essas pg_stat_user_tables e n_dead_tup e você não tiver a menor ideia do que eu esteja falando, esse texto não é pra você.
Não vou me estender muito, então não pretendo fazer uma introdução dos conceitos de MVCC, Dead Tuples, Autovacuum, I/O etc Vou supor que você já esteja familiarizado com todos esses conceitos e que o autovacuum é algo comum na sua rotina de trabalho.
Ficou mais curioso ainda do que teria de novidade!
Sem mais delongas, vamos começar. Segue uma sequencia de instruções.
Até aqui nenhuma novidade, mas vejamos os comandos de INSERTs abaixo.
Puderam perceber que o INSERT que não respeitava o CONSTRAINT do PK, gerou um ERRO e por consequência o incremento de uma DEAD TUPLE, como pode-se observar no incremento de n_dead_tup na VIEW pg_stat_user_table. Ainda sem novidades, o MVCC explica esse comportamento.
A novidade está no segundo comando INSERT, em que incluímos a instrução ON CONFLICT (column) DO NOTHING.
Não teve a geração de DEAD TUPLE, e por consequência, uma economia futura de chamadas de AUTOVACUUM.
Em um cenário em que muitos comandos estão sendo barrados por CONSTRAINTS, teremos um aumento de DEAD TUPLES nas tabelas que poderiam ter sido evitadas. Seu amigo AUTOVACUUM agradece.
Mas como saber se minhas DEAD TUPLES são resultantes do trabalho esperado do MVCC ou se são de comandos sql que poderiam ser melhorados?
Bem... esse será o assunto do novo post. Obrigado.


Comentários
Postar um comentário