Estou criando um banco de dados no qual haverá cerca de 30 tabelas, com todas as tabelas contendo dezenas de milhões de linhas e cada tabela contendo uma única coluna importante e uma coluna de chave primária / estrangeira, a fim de maximizar a eficiência da consulta diante de problemas pesados. atualizações e inserções e faça uso intenso de índices em cluster. Duas das tabelas conterão dados textuais de tamanho variável, com um deles contendo centenas de milhões de linhas, mas o restante conterá apenas dados numéricos.
Como realmente quero extrair toda a última gota de desempenho do hardware que tenho disponível (cerca de 64 GB de RAM, um SSD muito rápido e 16 núcleos), estava pensando em permitir que cada tabela tivesse seu próprio arquivo para que não importasse se Estou entrando em 2, 3, 4, 5 ou mais tabelas, cada tabela sempre será lida usando um thread separado e a estrutura de cada arquivo estará alinhada com o conteúdo da tabela, o que, com sorte, minimizaria a fragmentação e a tornaria mais rápida para o SQL Server adicionar ao conteúdo de qualquer tabela.
Uma ressalva, estou preso no SQL Server 2008 R2 Web Edition . O que significa que não posso usar o particionamento horizontal automático, o que exclui isso como um aprimoramento de desempenho.
O uso de um arquivo por tabela realmente maximizará o desempenho ou estou ignorando as características internas do mecanismo do SQL Server que tornariam isso redundante?
Segundo, se o uso de um arquivo por tabela é vantajoso, por que create table
me dá a opção de alocar a tabela para um grupo de arquivos e não para um arquivo lógico específico? Isso exigiria que eu criasse um grupo de arquivos separado para cada arquivo no meu cenário, o que sugere que talvez o SQL Server não esteja visualizando as vantagens que estou assumindo que viriam ao fazer o que estou propondo.
fonte
Minha primeira sugestão seria não fazer suposições sobre desempenho sem fazer testes de carga nas duas configurações.
Meu palpite por ter visto essas configurações (que fazem sentido no papel) no passado seria que ter cada tabela em um arquivo separado não teria um impacto positivo mensurável no desempenho ... e que a complexidade adicional compensaria qualquer ganho de desempenho mesmo que fossem mensuráveis.
Por fim, quando se trata de extrair cada gota de desempenho de um Sql Server, refiro-lhe o seguinte gráfico (fornecido pela Microsoft):
Quaisquer otimizações em potencial que possam ser feitas da perspectiva de um aplicativo superam facilmente todas as otimizações possíveis no nível de configuração de hardware / banco de dados ... então concentre sua atenção adequadamente.
fonte
Como outros observaram, não há benefício direto de um arquivo por tabela; aqui está uma ótima sinopse de Steve Jones sobre como esse mito se originou: http://www.sqlservercentral.com/blogs/steve_jones/2009/10/13/sql-server-legend-data-files-and-threads/
Você também pode querer investigar uma exibição particionada que, acredito, é suportada pelo 2008 Web Edition. Existem alguns truques para codificar em uma exibição particionada, mas você pode imitar muita funcionalidade das tabelas particionadas com relativa facilidade.
fonte
Eu acho que arquivos separados para cada tabela não trariam benefícios de desempenho. Os índices corretos podem ter incrase de desempenho potencial (leitura de disco) no servidor de banco de dados.
O SQL Server 2008 R2 suporta compactação? Se sim, ative isso.
Corrija-me se eu estiver errado.
fonte