Sou responsável por um grande banco de dados PostgreSQL, com poucas dezenas de tabelas. Eu suspeito que muitas dessas tabelas nunca são acessadas.
Qual é a melhor maneira de verificar quando foi a última vez que uma determinada tabela foi acessada? Pensei em adicionar um gatilho DELETE
, INSERT
e UPDATE
, mas eu espero que haja uma maneira mais eficiente.
postgresql
Adam Matan
fonte
fonte
select
. Você já pensou em registrar ?Respostas:
pg_catalog.pg_statio_all_tables é seu amigo. Tudo o que você precisa fazer é pesquisar periodicamente pg_statio_all_tables para as tabelas em questão. Alterando estatísticas ~ tabela ativa, estatísticas não alteráveis ~ tabela potencialmente não utilizada. Apenas tome cuidado para que ninguém faça isso
select pg_stat_reset () ;
no meio do seu monitoramento.Por exemplo:
Inserções:
Selecione% s:
Exclui:
update-- 2011-09-01
Testes adicionais indicam que
vacuum
parece aumentar um pouco os valores em pg_statio_all_tables, o que é lamentável para o uso desejado. Emboravacuum
não utilize inútil pg_statio_all_tables, torna a interpretação dos resultados um pouco mais confusa.Talvez um lugar melhor para monitorar seja pg_catalog.pg_stat_all_tables (pelo menos nas versões mais recentes do Pg). Eu estou olhando para a versão 8.4 e que tem contagens para tuplas inseridas, lidas, atualizadas e excluídas - o ISTR 8.2 não tem tudo isso e eu não conheço a 8.3, portanto YMMV, dependendo da versão da página que você está usando.
Uma terceira opção (para inserir, atualizar e excluir atividades) é observar os registros de data e hora do arquivo no diretório $ PGDATA / base / $ datid. O nome do arquivo deve ser mapeado para o oid da tabela, para que você possa usá-lo para identificar tabelas que não estão recebendo inserções, atualizações ou exclusões. Infelizmente, isso não trata das tabelas que ainda estão sendo selecionadas e o uso de espaços de tabela causará complicações adicionais (pois esses arquivos não estarão em $ PGDATA / base / $ datid). Os carimbos de data e hora não serão atualizados até que todas as alterações pendentes sejam liberadas, mas se o arquivo não for alterado há meses, as chances de uma alteração atualmente pendente provavelmente serão pequenas.
fonte
Você pode obter algumas informações sobre a última alteração em uma tabela com
xmin
, por exemplo:Mas, você precisa estar ciente do módulo e dos xids envolventes e congelados . Não há como converter isso em um "horário", mas se você capturar o valor para suas tabelas agora e comparar posteriormente, poderá obter uma lista de tabelas que foram alteradas
fonte