none
Boas Praticas - Tamanho do arquivo DATA (mdf) RRS feed

  • Pergunta

  • Boa Tarde!!

    Gostaria de saber se existe alguma documentação ou recomendação sobre arquivos .MDF e LDF. Na verdade eu gostaria de saber se existe uma recomendação de tamanho destes arquivos.

    Por exemplo, hoje eu tenho um arquivo .MDF de 200GB, já me disseram que seria recomendado eu ter 02 arquivos de no máximo 100GB que com isso eu teria um ganho de performance, mas não sei se isso é só uma lenda ou é realidade.

    Sei que com ARRAY de discos diferente eu ganharia performance, mas não é este o caso.

    Obrigado

    Luciano

    segunda-feira, 29 de outubro de 2012 19:44

Respostas

  • Bom dia Luciano !

    Nunca vi nada sobre isto tambem, mas falo sobre o que ja passei, pelo que te disseram o certo seria se seu arquivo .mdf tiver 1TB voce dividiria em 10 arquivos de 100GB, acho que isto não ajudaria em nada, muito pelo contrario, se por acaso sua base corromper e descobrir que seu backup tambem esta corrompido ficaria muito dificil fazer um workaround nesta situação.

    Agora se voce tem problemas de performance devido a muitas leituras e gravações em disco, poderia dividir o arquivo mas em discos diferentes o que balancearia a leitura e gravação. Te falo que ja trabalhei com bases grandes (16TB) onde havia uma distribuição, mas tambem ja tive bases com mais de 3TB em um unico arquivo e nunca tive problemas.


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 30 de outubro de 2012 12:40

Todas as Respostas

  • Bom dia Luciano !

    Nunca vi nada sobre isto tambem, mas falo sobre o que ja passei, pelo que te disseram o certo seria se seu arquivo .mdf tiver 1TB voce dividiria em 10 arquivos de 100GB, acho que isto não ajudaria em nada, muito pelo contrario, se por acaso sua base corromper e descobrir que seu backup tambem esta corrompido ficaria muito dificil fazer um workaround nesta situação.

    Agora se voce tem problemas de performance devido a muitas leituras e gravações em disco, poderia dividir o arquivo mas em discos diferentes o que balancearia a leitura e gravação. Te falo que ja trabalhei com bases grandes (16TB) onde havia uma distribuição, mas tambem ja tive bases com mais de 3TB em um unico arquivo e nunca tive problemas.


    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 30 de outubro de 2012 12:40
  • Em bases muito grandes é altamente recomendável que os dados sejam divididos em vários arquivos (normalmente com a extensão mdf e ndf). Porém, se estes arquivos estiverem no mesmo disco, você não terá melhora alguma. Então, se você tiver discos diferentes pra colocar os arquivos, aconselho fazer. Do contrário, deixe do jeito que está.

    Já em relação ao arquivo de log (ldf), não adiantará criar vários arquivos, pois o SQL trata os arquivos de log sequencialmente. Ou seja, só começará a utilizar o segundo ldf quando o primeiro já estiver cheio. Então, em relação à performance, vários arquivos de log, ainda que estejam em discos distintos, de nada adianta.

    Pode até ser útil dividir o arquivo de log em vários arquivos e colocar cada um em um disco diferente pra "pesar" menos cada disco. Mas o desempenho de sua utilização ficará da mesma forma.

    Para saber mais sobre isso:

    1) http://www.devmedia.com.br/trabalhando-com-filegroups-no-sql-server/13723

    2) http://sqlserverperformance.idera.com/io-performance/multiple-files/

    3) http://fabriciolima.net/blog/2011/05/22/criando-mais-de-um-arquivo-de-log-melhora-a-performance-do-sql-server/


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 30 de outubro de 2012 16:03
  • Alexandre, Boa Tarde

    Obrigado pela resposta. Na verdade eu tenho problemas de performance, apenas houve falar que "seria uma boa pratica" deixar o arquivo com no máximo 100GB e com isso ir criando outros. Não entendo por que ganharia performance diminuindo o arquivo para um tamanho menor deixando tudo no mesmo array. 

    Obrigado

    quarta-feira, 31 de outubro de 2012 16:24
  • Roberson, Boa Tarde

    Tudo bem?

    Obrigado pela resposta, eu não consegui entender o por que é recomendado que em bases grandes eu tenha os arquivos MDF e NDF com tamanhos menores, já que vou deixar tudo no mesmo array de discos. 

    Obrigado

    quarta-feira, 31 de outubro de 2012 16:26
  • Luciano,

    O segredo é você utilizar diversos filegroups para alocar estes arquivos em locais e unidades de discos distintos!!!

    Em relação ao tamanho do arquivo, eu particularmente nunca encontrei esta informação, mas é algo que temos que ter em mente que quanto maior o tamanho de um arquivo, mais tempo teremos nos processos de leitura, gravação e até mesmo cópia.

    No caso dos arquivos de log eu particularmente costume trabalhar com este arquivos em discos rígidos diferentes, como também, o próprio banco de dados TEMPDB em outra unidade.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 31 de outubro de 2012 16:46
    Moderador
  • Luciano, acredito que o tamanho do arquivo em si pouco importa em relação a performance, independente do tamanho do arquivo o que garante uma boa performance alem da questão do hardware, seriam bons indices e uma programação (procedures, funcions, views) utilizando as melhores praticas do SQL, caso voce disponha de mais de 1 disco voce poderia separar os seus arquivo mdf e ldf mas se for no mesmo disco não faria diferença.

    Alexandre Matayosi Conde Mauricio. Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 31 de outubro de 2012 16:48
  • Ok. Obrigado pelo retorno. Eu tinha em mente que não ira mudar em nada tem vários arquivos no mesmo array de discos.  Quanto ao banco TEMPDB eu nunca separei ele em outra unidade, não sei se teria algum ganho com ele. Eu apenas deixo este em uma unidade com espaço grande. Mas assim que tiver oportunidade vou fazer um teste com ele.

    Obrigado pelo retorno!!!

    quarta-feira, 31 de outubro de 2012 17:08
  • Valeu Alexandre, era isso mesmo!! Obrigado pela atenção!!
    quarta-feira, 31 de outubro de 2012 17:09
  • Luciano,

    o simples fato de separar o mdf em filegroups (outros arquivos ndf), apontando para discos distintos, fizeram 3 de meus clientes terem uma boa diferença de performance. Também colocamos a TempDb em um disco à parte. Não consegui benefícios em todos os clientes, mas em nenhum deles foi prejudicial o fato de separar o mdf em mais arquivos, em discos distintos.

    Se você usa discos diferentes, consegue se beneficiar da cabeça de leitura de hardwares diferentes. Se não fosse benéfico, talvez nem existisse o recurso de filegroups, pois a principal intenção da Microsoft quando criou este recurso foi a melhoria de performance por aproveitar vários discos distintos.

    Tem vários artigos sobre isso, de autores renomados na área, falando sobre como é uma melhor prática separar o mdf em mais de um arquivo, em discos diferentes.

    Veja, por exemplo, este artigo: http://blogs.msdn.com/b/buckwoody/archive/2009/05/21/sql-server-best-practices-setting-a-default-filegroup.aspx.


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 31 de outubro de 2012 17:21