Capacidade máxima de tabela no SQL Server 2008

11

Eu tenho um aplicativo que insere mais de 1 bilhão de linhas anualmente em uma tabela. Esta tabela contém alguns varchare bigintcolunas e uma coluna de bolha bem.

As 1 bilhão de linhas consistem em dados do histórico que são mantidos para fins de rastreamento. Então, eu estava pensando se haverá uma limitação de capacidade da tabela se eu continuar nessa estrutura de acordo com este artigo do MSDN sobre o tamanho máximo da tabela .

O tamanho do arquivo de dados mencionado nesse link se refere ao grupo de arquivos de dados da tabela?

GAP = VÃO
fonte
@marc_s obrigado por capturar isso. fique à vontade para se juntar a nós em A Heap onde, entre outras coisas, chamar a atenção coletiva para estes
JNK
Qual é o tamanho máximo de cada linha?
Nick Chammas

Respostas:

6

Não há limite prático, exceto espaço em disco. Li a tabela à qual você vinculou inteiramente e verifiquei.

Se você precisar ir acima de 16 TB, precisará de vários arquivos (um procedimento simples).

usr
fonte
Eu acho que isso pode ser conseguido particionando a tabela e restringindo o particionamento para usar diferentes grupos de arquivos, se eu estiver correto?
GAP
1
Isso nem é necessário. Basta adicionar um novo arquivo (ao grupo de arquivos existente). O SQL Server começará a preencher todos os arquivos uniformemente. Se um arquivo não puder mais crescer, ele apenas aumentará o outro arquivo.
usr
2

uma tabela no sql server 2008 pode lidar com um grande número de registros e, como o @usr mencionou, depende do espaço em disco, mas é recomendável que, se sua tabela tiver muitas linhas e continuar crescendo, você use a Tabela Particionada http://technet.microsoft. com / en-us / library / dd578580 (v = sql.100) .aspx

Quando uma tabela de banco de dados cresce em tamanho para centenas de gigabytes ou mais, pode ser mais difícil carregar novos dados, remover dados antigos e manter índices

mais informações sobre isso

http://msdn.microsoft.com/en-us/library/ms190787.aspx

e como implementá-lo http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizontal-partition-database-table/

AmmarR
fonte
Você precisa ter muito cuidado com o particionamento. A função e a chave precisam ser cuidadosamente consideradas, bem como o caso de uso. O campo lógico para particionar nunca pode ser usado em nenhuma das consultas, o que prejudicaria o desempenho.
JNK
Verdadeiro, mas bilhões de linhas em uma única tabela também afetarão o desempenho, também há a opção de dividir os dados em muitas tabelas, por exemplo, uma tabela separada para cada ano e, se você deseja visualizar todos os dados, pode usar a visualização A, mas em menos a unsert e atualização será mais rápido em cada mesa
AmmarR
inserções em uma tabela enorme não são necessariamente lentas, depende de chaves e índices. Faço cargas mensais de cerca de 30m de linhas em uma tabela com 700m de linhas existentes e não fazemos particionamento. Tentei particionar, mas causou mais problemas do que resolveu. Esta é realmente uma pergunta, se você quiser dar uma olhada.
JNK
Eu estava pensando em mover meus dados do histórico para uma tabela separada e criar uma exibição de união para que ele possa ser usado pelo aplicativo quando precisar de histórico de consultas + dados mais recentes, que representam cerca de menos de 25% das consultas que tenho no sistema. Isso será mais eficiente do que ter vários arquivos de dados ou particionar a tabela com base na coluna que marca os dados como mais recentes? Das operações de IO, que serão mais eficientes? porque minha dúvida é que será o mesmo da perspectiva de IO em ambas as soluções.
GAP
qualquer abordagem adotada tem suas práticas recomendadas que podem torná-la boa ou ruim; quero dizer, se você tiver muitas tabelas, sua consulta será complicada e difícil de manter; se você tiver uma tabela e usar o particionamento de tabelas, haverá considerações diferentes, como sua edição sql deve ser empresa etc, tendo muitos arquivos de dados é um recomendado para melhores operações de IO, mas também tem suas melhores práticas, para o desempenho do SQL não há nenhuma maneira para a frente ...
AmmarR
0

Talvez uma Vista Particionada funcionasse.

Do artigo Usando o MSDN do Modo de Exibição Particionado :

As visualizações particionadas permitem que os dados em uma tabela grande sejam divididos em tabelas de membros menores. Os dados são particionados entre as tabelas de membros com base em intervalos de valores de dados em uma das colunas. Os intervalos de dados para cada tabela de membro são definidos em uma restrição CHECK especificada na coluna de particionamento. Uma visualização que usa UNION ALL para combinar seleções de todas as tabelas de membros em um único conjunto de resultados é então definida. Quando as instruções SELECT que referenciam a exibição especificam uma condição de pesquisa na coluna da partição, o otimizador de consulta usa as definições de restrição CHECK para determinar qual tabela de membros contém as linhas.

Não sei ao certo como isso difere de uma tabela particionada sobre a qual o AmmarR forneceu informações em sua resposta.

Adam Porad
fonte