tamanho do banco de dados Postgresql 9 inchaço após atualizações em massa diárias

2

Eu tenho um banco de dados do Postgres que estou importando / atualizando cerca de 4 GB de dados para o dia. (Geralmente, cerca de 15 a 20 milhões de linhas.) Estou importando de um arquivo simples de dados usando inserções em massa. Eu também tenho um gatilho de estilo "Inserir em chave duplicada, atualização" que simplesmente atualizará uma linha se o ID já existir. Os dados de importação em si não crescem muito (no que diz respeito ao tamanho do arquivo), é principalmente que os registros estão sendo atualizados com um pequeno número de novos registros sendo inseridos. Além disso, após cada importação, estou executando VACUUM ANALYZE .

Hoje notei que o tamanho do banco de dados aumentou para cerca de 15 GB. Depois de fazer alguns googling, decidi experimentar um VACUUM FULL e um REINDEX . O tamanho do banco de dados caiu significativamente (cerca de 50%). Eu li que isso pode estar relacionado à configuração max_fsm_pages , mas parece que foi removido a partir do Postgres 8.4, então não tenho certeza do que está acontecendo aqui. Não há nada nos logs de postgres de interesse particular que eu possa ver.

Veja uma transcrição do processo: link

Todas as tabelas diminuíram consideravelmente, mas achei interessante que antes do vácuo e da reindexação a maior tabela fosse um índice de 3.7GB (maior que a maior tabela de conteúdo que era de 2.8GB) e encolheu para 629MB.

Isso é normal ou há algo errado aqui? Eu estou tentando manter o tamanho do arquivo em disco para baixo, uma vez que este está sendo executado em uma pequena Linode VM.

ATUALIZAÇÃO: usando o pgAdmin, aqui estão algumas capturas de tela da guia "Estatísticas":

  • estatísticas do banco de dados: link
  • todas as estatísticas da tabela: link
  • estatísticas da tabela app_prices: link

Então, a partir da última tela, parece que o índice está causando o problema. O tamanho da tabela é de 3,0 GB, enquanto o tamanho do índice é de 4,4 GB. A tabela app_prices, por exemplo, é a tabela com mais linhas (cerca de 35 milhões), possui apenas 5 colunas e 3 índices. Isso ainda parece normal?

    
por mirthlab 09.06.2011 / 04:04

1 resposta

1

Devido à maneira como o Postgresql implementa o MVCC, isso provavelmente é normal.

Editar: link tem uma boa explicação do que está acontecendo e como lidar com isso.

    
por 09.06.2011 / 05:45

Tags