Eu tenho um servidor PostgreSQL em execução e bastante carregado. Preciso tirar instantâneos de certas mesas em um determinado horário (meia-noite). Essas tabelas estão bem carregadas (muitas atualizações e inserções).
Qual é a melhor maneira de fazer isso?
Editado: A tabela que eu tenho que capturar tem cerca de 50.000.000 registros. Apenas 5-20% deles estão mudando ao longo do dia.
Adicionado: Na verdade, tenho uma ideia para adicionar o gatilho de inserção/atualização para cada tabela que deve ser alterada e gravar todas as alterações em outra tabela que é particionada diariamente.
Por favor me diga se é uma boa ideia ou não?
Eu usaria um
pg_dump
oucreate table foo_log as select * from foo
Parece bom também. Isso também funciona com regras, por exemplo:
E então, diariamente:
A principal diferença com a criação da tabela em tempo real diariamente será a sobrecarga que você introduzirá em cada inserção/atualização, em vez de obter as linhas atualizadas de uma só vez.
Se você estiver executando uma carga de trabalho mista (OLTP na tabela e análise no instantâneo), considere a replicação e um hot-standby
Isso reduz o impacto no servidor fortemente carregado para 0 - você precisa estar no 9.0 embora...