Eu tenho uma mesa muito grande. Eu quero particioná-lo, mas não posso.
Tamanho do banco de dados: 1 TB, espaço livre 200 GB
Mesa:
- Tamanho: 165 colunas (comprimento da linha 4216 KB, sem LOBs), 500 milhões de linhas, 600 GB de dados.
- Possível particionamento: um dia por partição
- Número de linhas por dia/parição: 2 milhões
Para particioná-lo, preciso criar um índice clusterizado. Mas criar parição requer espaço livre do mesmo tamanho da mesa e não tenho 600 GB extras.
Existem opções de como particionar esta tabela?
EDIÇÃO 1:
Eu tentei copiar dados em uma tabela separada.
No entanto, quando tento DELETE
(ou INSERT
) 1 dia de dados em outra tabela, recebo um erro, esse log de transação está cheio e minha transação está sendo revertida. Meu log de transações tem aproximadamente 20 GB e não posso aumentá-lo.
Você precisará criar uma nova tabela com o mesmo esquema, mas como um objeto particionado. Opcionalmente, você pode compactar a tabela para economizar ainda mais espaço. Como você está colocando em média apenas uma linha por página, não tenho certeza de quanta economia de espaço você verá. Eu recomendo colocar alguns milhares de linhas na nova tabela e compactar para ver se a economia de espaço vale a sobrecarga da CPU.
Quanto a como mover tantos dados sem consumir todo o espaço em disco e sem sobrecarregar o log de transações, isso precisará ser feito em um loop, movendo pequenas quantidades de dados por execução. Você desejará fazer algumas análises de dados para ver o tamanho de uma janela que pode processar, mas presumo que, com base nos volumes de dados, você precise mover as linhas um minuto por vez.
Quando tudo estiver pronto e você tiver verificado que todos os dados estão na nova tabela, solte a tabela antiga e renomeie a nova tabela para que ela tenha o nome das tabelas antigas. Assim nada quebra. Você desejará criar o script das permissões na tabela antiga (se houver) para poder aplicá-las à nova tabela.
Se houver tabelas com chaves estrangeiras para esta tabela, você precisará descartá-las antes que isso funcione.