AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 14047
Accepted
Nathan Ridley
Nathan Ridley
Asked: 2012-02-28 13:25:49 +0800 CST2012-02-28 13:25:49 +0800 CST 2012-02-28 13:25:49 +0800 CST

Banco de dados SQL Server em um SSD - alguma vantagem em um arquivo separado para cada tabela?

  • 772

Estou criando um banco de dados no qual haverá cerca de 30 tabelas, com cada tabela contendo dezenas de milhões de linhas e cada tabela contendo uma única coluna importante e uma coluna de chave primária/estrangeira para maximizar a eficiência da consulta em face de pesadas atualizações e inserções e fazem uso intenso de índices clusterizados. Duas das tabelas conterão dados textuais de comprimento variável, com uma delas contendo centenas de milhões de linhas, mas o restante conterá apenas dados numéricos.

Como eu realmente quero espremer até 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), pensei em permitir que cada mesa tenha seu próprio arquivo para que, não importa se Estou juntando em 2, 3, 4, 5 ou mais tabelas, cada tabela sempre será lida usando um thread separado e a estrutura de cada arquivo será 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 descarta isso como uma melhoria 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?

Em segundo lugar, se usar um arquivo por tabela é vantajoso, por que create tablesó 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 em meu cenário, o que me sugere que talvez o SQL Server não esteja prevendo as vantagens que presumo viriam de fazer o que estou propondo.

sql-server sql-server-2008
  • 4 4 respostas
  • 13359 Views

4 respostas

  • Voted
  1. Best Answer
    Remus Rusanu
    2012-02-28T14:08:40+08:002012-02-28T14:08:40+08:00

    Eu estava pensando em permitir que cada tabela tenha seu próprio arquivo para que não importa se eu 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 será estar estreitamente alinhado com o conteúdo da tabela, o que, com sorte, minimizaria a fragmentação e tornaria mais rápido para o SQL Server adicionar ao conteúdo de qualquer tabela

    Do que diabos você está falando? Não tenho certeza de onde você obteve suas informações, mas certamente deve descartar essa fonte. Nada do que você assume aqui é realmente correto.

    Se você quiser ler uma boa discussão sobre desempenho de SSD para SQL Server, existem várias séries de blogs por aí. Como sempre, o de Paul Randal é o mais lido:

    • Benchmarking: Apresentando SSDs (Parte 1b: matriz de arquivo de log não sobrecarregada)
    • Benchmarking: Apresentando SSDs (Parte 1: matriz de arquivo de log não sobrecarregada)
    • Benchmarking: Apresentando SSDs (Parte 2: inserções sequenciais)
    • Benchmarking: Apresentando SSDs (Parte 3: inserções aleatórias com detalhes de estatísticas de espera)
    • Benchmarking: Vários arquivos de dados em SSDs (além do driver Fusion-io mais recente)

    Brent também tem uma boa apresentação sobre o tema: SQL em SSDs: Hot and Crazy Love e tem mais por aí.

    Passando por todas essas apresentações, você notará rapidamente que todas elas se concentram nas gravações , pois é aqui que o desempenho dos SSDs entra em cena. O texto do seu post é quase inteiramente sobre leituras, que é um tópico diferente. Se as leituras são o seu ponto problemático, você deve falar sobre RAM, não sobre SSDs e sobre estratégias adequadas de indexação e consulta.

    • 18
  2. Michael Fredrickson
    2012-02-28T13:33:58+08:002012-02-28T13:33:58+08:00

    Minha primeira sugestão seria não fazer suposições sobre desempenho sem fazer testes de carga em ambas as configurações.

    Meu palpite de ter visto tais 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 para o desempenho... e que a complexidade adicional compensaria quaisquer ganhos de desempenho mesmo que fossem mensuráveis.

    Por fim, quando se trata de espremer cada gota de desempenho de um Sql Server, indico o seguinte gráfico (fornecido pela minha Microsoft):

    insira a descrição da imagem aqui

    Quaisquer otimizações potenciais que possam ser feitas a partir de uma perspectiva de aplicativo facilmente ofuscam quaisquer otimizações possíveis em um nível de configuração de hardware/banco de dados... portanto, concentre sua atenção adequadamente.

    • 17
  3. Stuart Ainsworth
    2012-02-28T14:35:40+08:002012-02-28T14:35:40+08:00

    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 ser suportada pelo 2008 Web Edition. Existem alguns truques para codificar em uma exibição particionada, mas você pode imitar muitas das funcionalidades das tabelas particionadas com relativa facilidade.

    • 4
  4. Peter Kiss
    2012-02-28T13:30:52+08:002012-02-28T13:30:52+08:00

    Acho que arquivos separados para cada tabela não trariam nenhum benefício de desempenho. Os índices corretos podem ter um aumento potencial de desempenho (leitura de disco) no servidor de banco de dados.

    O SQL Server 2008 R2 suporta compactação? Se sim, ligue isso.

    Corrija-me se eu estiver errado.

    • 2

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve