Memória máxima do SQL Server, arquivo de paginação, paralelismo de grau máximo

15

Três perguntas esperam que você mestres em DBA do universo possam responder:


  1. Eu sei que é uma prática recomendada definir a memória máxima do SQL Server. Portanto, se um servidor com 44 GB de RAM tiver o SQL Server instalado, devemos definir a memória máxima do SQL Server para aproximadamente 37 GB.

Mas o que devemos definir se o SQL Analysis Service e o SQL Reporting Services estiverem instalados no mesmo servidor que o SQL Server? É melhor definir a memória máxima do SQL Server como 22 GB de RAM para que o Analysis possa usar os outros 22 GB de RAM?


  1. Em um servidor executando o SQL Server com 44 GB de RAM, qual é a melhor prática para definir o tamanho do arquivo de paginação? Li no Brent Ozar ( http://www.brentozar.com/archive/2014/06/sql-server-setup-checklist-free-ebook-download/ ) o seguinte:

O SQL Server não precisa de um arquivo de paginação gigante. se você estiver instalando outros aplicativos no servidor (o que não recomendamos - o SQL Server deve ser isolado). você pode precisar de um arquivo de paginação maior. Se o SQL Server é o único serviço importante em execução na caixa, normalmente criamos um arquivo de paginação de tamanho de 2 GB na unidade do sistema.

A Microsoft diz que devemos definir o sistema de arquivos de paginação gerenciado para 1,5x a RAM, o que corresponde aos conselhos de Remus (consulte -> http://rusanu.com/2009/11/22/system-pagefile-size-on-machines-with -large-ram / ).

Portanto, em nosso servidor com 44 GB de RAM, temos o SQL Server instalado próximo ao SQL Analysis Service e SQL Reporting Services. Que tamanho devemos definir o arquivo de paginação?


  1. Para o SharePoint, o SQL Server que faz parte do farm do SharePoint e onde o SharePoint armazena seus bancos de dados, o grau máximo de paralelismo deve ser definido como 1. Agora que temos um servidor que não faz parte do farm do SharePoint (chame-o de sql2) servidor, temos o SQL Server, o SQL Analysis and Reporting instalado. O SharePoint não armazena seus bancos de dados neste servidor, mas temos bancos de dados / cubos de relatórios e análises criados nos quais o SharePoint lê e grava.

Brent Ozar diz:

Regra geral: defina isso como o número de núcleos físicos em um soquete de nó (processador) do NUMA no hardware ou menos

O que devemos configurar nesta instância do SQL Server para obter o máximo grau de paralelismo quando tiver 4 VCPUs?


Espero que vocês dêem não apenas a mim, mas mais administradores sql, um pouco mais sobre as melhores práticas do que a selva nas interwebs.

sp_eric_blitz
fonte

Respostas:

12

Seus 3 perguntas tocar max memory, page filee max dop setting.

MEMÓRIA MAX


Se o servidor for dedicado ao SQL Server apenas sem os serviços de análise (como o SSAS é outro animal), as melhores práticas recomendadas por Glenn são um bom ponto de partida . Para componentes adicionais, você deve consultar o blog de Jonathan sobre como configurar a memória máxima .

Eu respondi na configuração de memória máxima e mínima do SQL Server . Isso será útil se você tiver muitos pacotes SSIS em execução na instância do servidor.

Arquivo de paginação


Normalmente, eu o afasto da C:\unidade que possui espaço em disco suficiente. Eu concordo com a recomendação de Remus e Brent. Deveria ser PAGE FILE FOR SQL SERVER = 1.5 * RAM. Um arquivo de paginação será útil quando você se encontrar em uma situação em que precisará fazer um DUMP DE MEMÓRIA COMPLETA (normalmente solicitado pelo Microsoft CSS) para solucionar problemas.

Leia Como determinar o tamanho apropriado do arquivo de paginação para as versões de 64 bits do Windows KB 889654 e Buck Woody fala sobre o arquivo de paginação aqui .

Configuração MAX DOP


Para o sharepoint, é recomendável maxdop = 1definir toda a instância. Para um servidor sql normal, sugiro que você siga - Qual é uma maneira boa e repetível de calcular o MAXDOP no SQL Server? Eu tenho um script escrito que irá calcular para você.

A essência está abaixo ( KB 2806535 também menciona a mesma coisa):

8 or less processors    ===> 0 to N (where N= no. of processors)
More than 8 processors  ===> 8
NUMA configured         ===> MAXDOP should not exceed no of CPUs assigned to each 
                                 NUMA node with max value capped to 8
Hyper threading Enabled ===> Should not exceed the number of physical processors.

Como observação lateral, sugiro que você leia - Atualizações recomendadas e opções de configuração para o SQL Server 2012 e SQL Server 2014 com cargas de trabalho de alto desempenho

Kin Shah
fonte
Uma coisa a ser observada é que, no post de Buck Woody mencionado acima, Remus comenta "O que salva o dia é o AWE: a memória reservada através do AWE não precisa ter uma reserva de arquivo de paginação (pois está bloqueada na RAM física e, portanto, não pode ser paginado). O uso do AWE é automático em x64. " O que parece ser visto com o AWE, não precisamos de um arquivo de paginação grande.
Jason Carter
@Kin você disse "Eu concordo com a recomendação de Remus e Brent". Mas, depois de ler o Guia de Instalação do Brent (citado pelo OP acima) e o Artigo Remus, eles são contraditórios. Então, para mim, sua resposta sobre o arquivo de paginação deixa perguntas pendentes.
Magier
1
@ Magier Eu costumo seguir a recomendação da Microsoft, pois já estive em situação em que precisávamos fazer um despejo de memória completo para diagnosticar o problema - não sabíamos se era o Windows ou o servidor SQL. Nessa situação, a recomendação da EM é a melhor. Se você não entrar nessa situação, o conselho de Brent também é válido. Eu costumo estar do lado seguro, então vou com ele PAGE FILE FOR SQL SERVER = 1.5 * RAM. Isso responde à sua pergunta ?
Kin Shah
3

Portanto, em nosso servidor com 44 GB de RAM, temos o SQL Server instalado próximo ao SQL Analysis Service e SQL Reporting Services. Que tamanho devemos definir o arquivo de paginação?

Bem, acrescentando ao que Kin já mencionou, sugiro que você use Perfmon Counterspara calcular qual deve ser o tamanho do seu arquivo de paginação. Também concordo com a recomendação de Remus do arquivo de paginação ser 1,5 vezes a RAM do sistema . Mas esta recomendação está considerando todos os aspectos e cenários possíveis e 'recomendação geral'. Eu acho que você está mais interessado em valor concreto. Então aqui está

As necessidades do arquivo de paginação de um sistema individual variam de acordo com a função do servidor, carga, etc. Existem alguns contadores de desempenho que você pode usar para monitorar o uso de memória confirmada privada em todo o sistema ou por arquivo de paginação. Não há como determinar quanto da memória confirmada privada de um processo reside e quanto é paginado para arquivos de paginação.

Memória: bytes confirmados : número de bytes de memória virtual que foram confirmados. Isso não representa necessariamente o uso do arquivo de paginação - representa a quantidade de espaço no arquivo de paginação que seria usada se o processo fosse completamente não residente

Memória: limite de confirmação: número de bytes de memória virtual que podem ser confirmados sem a necessidade de estender os arquivos de paginação.

Arquivo de paginação:% de uso Porcentagem do arquivo de paginação confirmada

Arquivo de paginação:% de pico de uso Porcentagem mais alta do arquivo de paginação confirmada

Use os contadores acima para definir o valor adequado para o arquivo de paginação. Você pode ler este link para obter mais informações sobre o arquivo de paginação.

É melhor definir a memória máxima do SQL Server como 22 GB de RAM para que o Analysis possa usar os outros 22 GB de RAM?

Não, acho que você não atendeu aos requisitos do SO aqui. Você precisa primeiro definir a memória máxima ideal do servidor para o SQl Server. Esse encadeamento SE tem mais detalhes sobre a configuração do valor máximo correto da memória do servidor. Novamente, eu sempre respondo pesadamente e sempre nos contadores de perfmon para ver o que seria o valor ideal. Sugiro que você leia este artigo e obtenha ajuda dos contadores para definir o valor ideal para o SSAS. Uma vez eu usei este blog para definir o valor da memória para o SSAS. Como não gosto muito do SSAS, meus comentários serão limitados apenas a este artigo.

Você deve manter MAXDOP = 1 para instâncias do Sharepoint como seu parâmetro amplamente aceito. Se o IIRC, a recomendação se tornasse amplamente aceita, após conflitos freqüentes, quando o grau máximo de paralelismo era deixado no valor padrão

Shanky
fonte
3

Todas as outras respostas fornecidas até agora para o tamanho do arquivo de paginação referenciam artigos relativamente desatualizados. Esta publicação do blog da Technet está mais atualizada (outubro de 2015) e fornece uma maneira mais detalhada de calcular o tamanho ideal do arquivo de paginação em sistemas modernos.

Eles afirmam claramente que a regra de ouro antiga de 1,5 x RAM não se aplica mais.

Colei o conteúdo principal desse artigo abaixo para evitar a podridão do link.

Observe que eles recomendam a coleta de métricas do seu servidor em execução no pico de uso por pelo menos 1 semana - portanto, nos estágios de planejamento e implementação de seus projetos, você pode não estar em condições de fazer isso e precisará reservar um tempo mais tarde no projeto. para fazer isso.


Ao dimensionar o arquivo de paginação, precisamos considerar as necessidades de memória de nossos aplicativos e as configurações de despejo de memória.

Como você sabe quanta memória seu aplicativo precisa? A melhor maneira é seguir uma linha de base.

Run Performance Monitor (Perfmon)
Go to Data Collector Sets\User Defined
Right click on User Defined and select New
Select Create Manually and next
Check Performance counter
Add the following counters:

        Memory\Committed Bytes - Committed Bytes is the amount of committed virtual memory, in bytes.
        Memory\Committed Limit - Amount of virtual memory that can be committed without having to extend the paging file
        Memory\% Committed Bytes In Use - Ratio of Memory\Committed Bytes to the Memory\Commit Limit 

Nota: Certifique-se de coletar as informações por um longo período (pelo menos uma semana) e se o servidor está sendo executado com o uso máximo.

A fórmula do tamanho do arquivo de paginação deve ser:

(Valor máximo de bytes confirmados + 20% de buffer adicional para acomodar qualquer rajada de carga de trabalho)

Por exemplo: Se o servidor tiver 24 GB de RAM e o máximo de bytes confirmados for 26 GB, o arquivo de paginação recomendado será: (26 * 1,2) -24) = 7,2 GB

E o segundo fator: o tamanho que precisamos para registrar informações quando o sistema trava?

O tamanho do despejo de memória é determinado por seu tipo:

Complete Memory Dump  RAM Size + 257 MB
Kernel Memory Dump  The amount of kernel-mode memory in use (on 32-bit maximum is 2 GB, on 64-bit the maximum can go up until 8 TB)
Small Memory Dump  64KB  512 KB

Na maioria dos casos, o Kernel Memory Dump é bom o suficiente para a análise da causa raiz, pois Complete Memory Dump é necessário apenas em casos específicos, por exemplo, você deseja ver o que aconteceu no modo de usuário.

De acordo com minha experiência, o tamanho do Kernel Memory Dump é geralmente o seguinte:

On System with up to 256GB RAM =  8-12 GB size for Kernel Memory dump
On System with up to 1.5TB RAM = 8-32 GB size for Kernel Memory dump

No entanto, esses números NÃO são uma recomendação oficial da Microsoft e podem ser diferentes em seus servidores; portanto, sempre teste antes de aplicar.

Mike
fonte
2

Respondendo desde que eu sou uma das pessoas que você está citando, heh.

1. Como devo definir a memória máxima quando também executo o Analysis Services?

Você não encontrará orientações por aí, porque o SSAS é como qualquer outro aplicativo instalado no SQL Server: simplesmente não sabemos quanta memória você usará. Trate o SSAS / SSIS / SSRS como aplicativos de terceiros - eles são incluídos como "gratuitos" na caixa do SQL Server. Eles têm necessidades totalmente diferentes de CPU, memória e armazenamento.

2. Como devo definir o tamanho do arquivo de paginação?

Minhas recomendações são para que o Windows possa fazer um mini-despejo. Se você encontrar um problema no qual precisará ligar para o suporte da Microsoft, poderá começar com o mini-despejo. Se o problema persistir e eles não conseguirem descobrir isso no mini-despejo (ou em outras fontes de informação, como o log de erros), eles podem solicitar que você vá para o tamanho de 1,5x RAM.

As recomendações de 1,5x RAM da Microsoft são para que o Windows possa executar um despejo COMPLETO de memória quando o sistema travar.

Hoje em dia, com servidores com 64 a 128 a 256 GB de RAM, geralmente não é uma boa ideia fazer o Windows fazer uma pausa para gravar todo o conteúdo da memória durante uma falha. Você prefere que o SQL Server volte a funcionar e lide com o conteúdo do minidump, em vez de com a totalidade. Salve os lixões completos para mais tarde - normalmente você pode seguir toda a sua carreira sem precisar fazer upload de um arquivo de dump de 64 GB para a Microsoft. (Boa sorte nessa.)

3. Como defino o MAXDOP para o SharePoint?

O que você chama de "minhas" recomendações são do Microsoft KB 2806535 . Comece lá em geral, mas quando um aplicativo específico diz algo diferente, eles sabem algo sobre o aplicativo diferente do SQL Server em geral - siga-o.

Brent Ozar
fonte