Em 21/02/2014 12:48, Danilo Silva escreveu:
Pessoal,
Utilizo postgresql 9.1.9 em servidor debian.
Tenho uma tabela (principal tabela do banco de dados) que está com 18
milhões de registros e ocupando 21 GB de espaço.
Essa tabela é de histórico de leituras, portando muito utilizanda, tanto
para select quanto para inserts e updates.
Para ter um melhor desempenho, tenho duas opções:
1º Deletar registros mais antigos, algo em torno de 10 milhões de registros;
2º Particionar a tabela;
Penso em utilizar a 2ª opção visto ter acesso aos dados sem precisar
modificar a aplicação (que é para ambiente web).
Para a 2º opção o que vocês recomendam? Sei dos procedimentos para
particionar tabelas (criar as tabelas filhas, criar as triggers, etc),
mas a minha dúvida está na questão que a tabela já tem dados, como
proceder neste caso, visto que a tabela não é pequena?
[]s
Danilo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Olá Danilo.
Eu também te recomendaria a 2ª opção, para que não tenhas que excluir
informações do seu banco que podem ser necessárias no futuro.
Mas avalie bem e planeje como vai ser a sua condição de particionamento
(ex.: por data, tipo e etc) e crie as tabelas filhas, nunca esquecendo
de criar também as constraint de checks em cada delas.
E nunca se esqueça que a partir dai, as suas queries irão ter que levar
em consideração esta condição logica definida nas checks. O otimizados
de consultas do Postgres utiliza isto pra determinar em qual(is)
partição(ões) ele vai buscar a(s) informação(ões) que a sua query pede.
Caso não faça isso, o otimizador de query pode realizar um seq_scan em
todas as tabelas filhas (partições) e com isso criar uma situação muito
ruim em desempenho.
De uma boa olhada na documentação em
http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html
Após vc ter feito isto tudo, vc pode ativar as triggers que deve fazer
para distribuir os dados nas partições quando forem inseridos.
A partir disto, se estiver tudo correto, irão fazer as buscas (por
indice ou sequenciais) na partição filha correspondente e na tabela pai.
Enquanto vc nao mover as info antiga da tabela pai pras filhas, elas
serão encontradas na pai. E com o tempo, vc vai movendo as linhas da
tabela pai para as tabelas filhas (partições) nas madrugadas ou em
janelas de manutenção, como preferir.
Mas lembre-se de ter tudo isso planejado passo a passo e se possível,
testado antes em uma copia do banco de testes.
Boa sorte pra vc e abraços!
--
Lucio Chiessi
Rio de Janeiro - Brasil
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral