none
SQL Server Memoria RRS feed

  • Pergunta

  • Ola pessoal

    Atualmente tenho um Servidor com Windows Server 2008R2, SQL Server 2012, discos SAS 15k

    em RAID 10 apenas para o banco, os discos para o SO estao em outro RAID, e uso RAID por controladora, o server é um Dell 410,  e uma base de dados de 30 gb. O server tem 20 GB de RAM, e gostaria da opinião de vocês sobre as considerações para configuração damemoria máxima, minima e default index fill factor, para este cenário.

    Obrigada

    terça-feira, 3 de setembro de 2013 11:58

Respostas

  • Patrícia,

    O pessoal já adiantou bastante mas seguem considerações importantes:

    Monitore seu ambiente. Se você configurar 14GB de RAM como Max Server Memory sobrarão 6GB para o SO. Monitorando você perceberá o quanto ainda fica livre e possivelmente poderá aumentar ou, se necessário, até diminuir.

    A opção Min Server Memory significa que se o seu servidor sofrer com falta de memória, o SQL Server poderá devolver ao SO até aquela quantidade, deixando o SQL com no mínimo o valor configurado. Geralmente deixamos com cerca de 70% do Max Server Memory, para que em caso de falta de memória o SQL devolva ao SO os 30% restantes.

    O Fill Factor é o fator de preenchimento de cada página de dados. É muito importante lembrar que a alocação dos dados em memória também é feito por páginas. Supondo que o tamanho dos seus registros te permita armazenar 10 registros por página (apenas um exemplo), se você configurar o Fill Factor para 80, após o processo de rebuild terá apenas 8 registros por página. Se na sua memória cabem 1.000 páginas, ao invés de ter 10.000 registros terá apenas 8.000, ou seja, precisará levar para a memória mais páginas para acessar a mesma quantidade de registros.

    A mesma coisa ocorre com o arquivo de dados, se você tem 1.000 páginas 100% cheias e altera o Fill Factor para 80, precisará de mais 200 páginas para alocar os registros que serão retirados das 1.000 páginas para que estas fiquem apenas 80% cheias. Resumindo, seu arquivo de dados crescerá 20%, assim como o consumo de memória.

    O Fill Factor deixará um espaço livre nas páginas para que você possa adicionar mais registros junto com os registros do mesmo objeto, por exemplo, diminuindo a incidência de fragmentação.

    Neste artigo em português expliquei como funciona a fragmentação, acredito que você poderá ter um entendimento legal sobre o Fill Factor:

    http://sqldicas.com.br/dicas/seu-job-de-rebuild-demora-muito/

    Lembre-se que em bases somente leitura não faz sentido nenhum configurar o Fill Factor com menos de 100% já que não vamos inserir dados.


    Luiz Mercante
    MCITP SQL 2008 | MCTS SQL 2008 | MTA Database Fundamentals | MCTS Windows Apps | MCTS Windows Network | MCP 2003
    sqldicas@outlook.com
    http://sqldicas.com.br
    Se a resposta foi útil de alguma forma, classifique como resposta ou vote como útil.

    terça-feira, 1 de outubro de 2013 14:44
    Moderador
  • Olá Patricia! Tudo certo?

    Respondendo as suas perguntas:

    MÍNIMO E MÁXIMO DE MEMÓRIA:

    Quanto a memória, creio que o minimo você pode deixar o default e limitar apenas o máximo deixando ao menos 30% livre para o sistema operacional, no seu caso ficaria 14336 MB ao SQL Server, sobrando 6144 MB ao Windows.

    FILL FACTOR:

    Quanto ao fill factor, ele estara diretamente relacionado a fragmentação de seus indices, leia o excelente artigo abaixo falando sobre as melhores práticas para o mesmo:

    http://www.sqlskills.com/blogs/kimberly/database-maintenance-best-practices-part-ii-setting-fillfactor/

    Abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 3 de setembro de 2013 12:14

Todas as Respostas

  • Olá Patricia! Tudo certo?

    Respondendo as suas perguntas:

    MÍNIMO E MÁXIMO DE MEMÓRIA:

    Quanto a memória, creio que o minimo você pode deixar o default e limitar apenas o máximo deixando ao menos 30% livre para o sistema operacional, no seu caso ficaria 14336 MB ao SQL Server, sobrando 6144 MB ao Windows.

    FILL FACTOR:

    Quanto ao fill factor, ele estara diretamente relacionado a fragmentação de seus indices, leia o excelente artigo abaixo falando sobre as melhores práticas para o mesmo:

    http://www.sqlskills.com/blogs/kimberly/database-maintenance-best-practices-part-ii-setting-fillfactor/

    Abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 3 de setembro de 2013 12:14
  • Andre,

    No caso da memoria como minimo vem padrão 0 (zero), neste caso chegando a zero, eu nao teria problemas?

    terça-feira, 3 de setembro de 2013 14:32
  • Patricia, o Sql tem um comportamento pró-ativo para alocar a memória gradativamente até o maximo configurado conforme o uso da mesma, dificilmente ele ira liberar esta memoria ao sistema operacional. Na prática o min server memory não é configurado.

    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 3 de setembro de 2013 14:54
  • E no caso do  default index fill factor,

    pelo que li do artigo tem que ficar entre 80% e 90% correto?

    terça-feira, 3 de setembro de 2013 16:35
  • Patricia,

    Se as condições do seu ambiente forem as mesmas expostas pelo artigo, sim, este é o valor recomendado.

    Abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    terça-feira, 3 de setembro de 2013 18:22
  • Andre, obrigada,

    So para concluir este theard, no caso se eu fizesse rebuild index, frequentemente em minha

    base de dados, substituiria a configuração do default index fill factor em 80%

    ou seja as duas coisas sao equivalentes?

    Estou perguntando isso para saber se entendi corretamente.

    Obrigada

    terça-feira, 3 de setembro de 2013 18:34
  • Patricia,

    Se você esta mencionando a opção fill factor nas configurações do SQL Server (sp_configure), não altere ela. Faça o reindex utilizando os 80%.

    Abraço!


    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   


    quarta-feira, 4 de setembro de 2013 01:28
  • Patrícia,

    Não sou a favor de deixar o valor default para memória mínima, se você já vai definir um valor para memória máxima não tem o porque deixar o mínima como default, muito pelo contrário, por questões de boas prática e também controle do seu ambiente é recomendável que o SQL Server tenha uma quantidade mínima para inicializar e instanciar os seus serviços e objetos.


    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]

    sexta-feira, 6 de setembro de 2013 14:44
    Moderador
  • André,

    Cara memória mínima como default, sinceramente é muito questionável!!!! Não vejo como boa prática.


    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]

    sexta-feira, 6 de setembro de 2013 14:45
    Moderador
  • Patrícia,

    Isso é muito relativo, tenha sempre em mente, quanto maior o FillFactor, maior será o fator de preenchimento das minhas páginas de dados, sendo assim, teremos:

    • Menos páginas de dados;
    • Menos fragmentação;
    • Páginas de dados mais sobrecarregadas;
    • Menos Alocação desnecessária de dados.

    Por outro lado, teremos:

    • Maior lentidão para armazenar e encontrar os dados;
    • Processos de Rebuild Index mais demorados por página;
    • Índices mais lentos.

    E um detalhe importante, quando você realizar a alteração do Fill Factor por exemplo de 70% por 80% poderá observar que no próximo Rebuild o seu Banco de Dados terá um crescimento muito grande, pois toda estrutura esta desestruturada.


    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]

    sexta-feira, 6 de setembro de 2013 14:49
    Moderador
  • Valeu J. Galvão, na prática não vejo a galera configurando ela mas concordo c/ o que voçê disse!

    Regards,

    André César Rodrigues

    Please click the Mark as answer button and vote as helpful if this reply solves your problem. Thanks!

    Blog: http://sqlmagu.blogspot.com.br  LinkedIn:   

    sexta-feira, 6 de setembro de 2013 14:52
  • André,

    Cara eu sou um pouco conservador em algumas coisas e entendo que o quanto maior deixarmos o nosso ambiente definido e padronizado é melhor.


    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]

    sexta-feira, 6 de setembro de 2013 16:43
    Moderador
  • Patrícia,

    O pessoal já adiantou bastante mas seguem considerações importantes:

    Monitore seu ambiente. Se você configurar 14GB de RAM como Max Server Memory sobrarão 6GB para o SO. Monitorando você perceberá o quanto ainda fica livre e possivelmente poderá aumentar ou, se necessário, até diminuir.

    A opção Min Server Memory significa que se o seu servidor sofrer com falta de memória, o SQL Server poderá devolver ao SO até aquela quantidade, deixando o SQL com no mínimo o valor configurado. Geralmente deixamos com cerca de 70% do Max Server Memory, para que em caso de falta de memória o SQL devolva ao SO os 30% restantes.

    O Fill Factor é o fator de preenchimento de cada página de dados. É muito importante lembrar que a alocação dos dados em memória também é feito por páginas. Supondo que o tamanho dos seus registros te permita armazenar 10 registros por página (apenas um exemplo), se você configurar o Fill Factor para 80, após o processo de rebuild terá apenas 8 registros por página. Se na sua memória cabem 1.000 páginas, ao invés de ter 10.000 registros terá apenas 8.000, ou seja, precisará levar para a memória mais páginas para acessar a mesma quantidade de registros.

    A mesma coisa ocorre com o arquivo de dados, se você tem 1.000 páginas 100% cheias e altera o Fill Factor para 80, precisará de mais 200 páginas para alocar os registros que serão retirados das 1.000 páginas para que estas fiquem apenas 80% cheias. Resumindo, seu arquivo de dados crescerá 20%, assim como o consumo de memória.

    O Fill Factor deixará um espaço livre nas páginas para que você possa adicionar mais registros junto com os registros do mesmo objeto, por exemplo, diminuindo a incidência de fragmentação.

    Neste artigo em português expliquei como funciona a fragmentação, acredito que você poderá ter um entendimento legal sobre o Fill Factor:

    http://sqldicas.com.br/dicas/seu-job-de-rebuild-demora-muito/

    Lembre-se que em bases somente leitura não faz sentido nenhum configurar o Fill Factor com menos de 100% já que não vamos inserir dados.


    Luiz Mercante
    MCITP SQL 2008 | MCTS SQL 2008 | MTA Database Fundamentals | MCTS Windows Apps | MCTS Windows Network | MCP 2003
    sqldicas@outlook.com
    http://sqldicas.com.br
    Se a resposta foi útil de alguma forma, classifique como resposta ou vote como útil.

    terça-feira, 1 de outubro de 2013 14:44
    Moderador