requisitos gerais de memória para o sql server 2008 r2

11

Não tenho experiência com o trabalho de DBA, mas estou tentando justificar a solicitação de recursos adicionais para nosso servidor sql e esperava que algumas pessoas inteligentes pudessem fornecer uma estimativa aproximada do que deveríamos estar executando. Suspeito que a alocação de recursos que a TI deu ao nosso servidor sql de produção seja baixa.

Hardware e Software:

Banco de dados: sql server 2008 r2 enterprise database

Windows: Windows 2008 r2 Enterprise de 64 bits, com certeza executando no VMware.

Processador: CPU Intel (R) Xeon (R) E7-4860 a 2,27GHz 2,26 GHz (2 processadores)

Memória instalada: 4GB

Disco rígido para arquivos de banco de dados: 300GB

Disco rígido para backups: 150 GB

Disco rígido para logs: 100 GB

Inscrição:

Temos três bancos de dados principais que somam cerca de 170 GB de dados, um banco de dados do Reporting Services (SSRS) no mesmo servidor que hospeda talvez 10 relatórios diferentes (com média de 700 mil registros cada) gerados diariamente. Nossa base de usuários é de cerca de 20 usuários simultâneos, talvez 5 deles possam ser considerados "intensivos em recursos" com a geração de grandes relatórios de processamento de dados. A maioria dos usuários interage com o banco de dados através do site asp.net e do servidor de relatório. Além disso, nossos desenvolvedores usam o SSIS no BIDS extensivamente remotamente diretamente no servidor (no máximo 2 conexões remotas). Por fim, temos uma operação de armazenamento de dados bastante envolvida que provavelmente gera 3 milhões de registros por dia por meio de pacotes SSIS que também são executados no servidor.

Problemas atuais:

Temos tempos limite de servidor de servidor crônico e o tempo de resposta ao site é muito ruim. Suspeito que a quantidade de memória que temos (4 GB) seja provavelmente um grande gargalo. Nossas solicitações anteriores de memória adicional foram negadas com a resposta comum de que precisamos para executar mais otimizações de consulta. Embora não sejamos profissionais de sql ou (como tenho certeza de que você sabe por nossa configuração) profissionais de administração de banco de dados, quero ter certeza de que não estou gastando todo o meu tempo tentando reduzir o desempenho em potencial se o hardware for o gargalo.

Obrigado a todos pela evasão tl; dr!

RMuesi
fonte
7
Eles esperam atender 170 GB de dados com 4 GB de memória? Nenhum ajuste de consulta vai corrigir isso, e eles estão fora de sua árvore.
Aaron Bertrand
Mostre a eles os números (estatísticas de desempenho). Você também pode mostrar a documentação da Microsoft que mostra que a memória mínima para o Windows Server 2008 R2 é de 4 GB; isso não deixa muito para o SQL Server.
2
O que mostram suas estatísticas de espera? Suspeito que você esteja vendo muitas PAGEIOLATCH_XX aguardar suas consultas. Se você for, poderá usá-lo como prova de que alguma memória extra seria benéfica.
SQLRockstar 2/13/13
2
E se você tiver memória, poderá começar a trabalhar em um subsistema de E / S melhor. DRIVE rígido para um banco de dados bem usado é uma piada de IOPS. Isso deve ser DRIVES. Você não compra unidade como capacidade, para bancos de dados que compra unidade como fonte IOPS. O que significa que um SSD de 512GB seria bom para os arquivos de banco de dados. O padrão "permite que seja grande e barato" matará o banco de dados.
TomTom
@ TomTom Tenho certeza (espero) que temos uma matriz de incursões. Não tenho certeza de como detectá-lo. Eu estava apenas baseando a descrição do disco rígido no que o explorador de janelas do computador estava mostrando no servidor windows.
RMuesi

Respostas:

14

... esperava poder obter ... uma estimativa aproximada do que deveríamos estar executando.

Sem mais informações sobre suas consultas e tamanhos de dados, é realmente difícil fornecer qualquer tipo de estimativa, muito menos uma estimativa precisa.

Banco de dados: sql server 2008 r2 enterprise database

Windows: Windows 2008 r2 Enterprise de 64 bits, com certeza executando no VMware.

Processador: CPU Intel (R) Xeon (R) E7-4860 a 2,27GHz 2,26 GHz (2 processadores)

Memória instalada: 4GB

Dois processadores (suponho que isso seja exposto na VM como 2 núcleos) podem ou não estar com fornecimento insuficiente. Os núcleos atribuídos a uma VM não são necessariamente mapeados diretamente para núcleos físicos (ou mesmo autorizados a usar 100% de um único núcleo quando necessário!); Portanto, você pode achar que esse é um recurso mais flexível que a memória. Sem mais informações sobre sua carga de trabalho ou configuração de hardware / virtualização, eu diria que aumentar para 4 seria bom.

Alocação de memória. Oh garoto. Isso é muito pouco provisionado para a carga de trabalho. O próprio Windows precisa de um mínimo de 2-3 GB para permanecer feliz, e cada um dos 2 usuários que executam Lances na caixa exigirá pelo menos 500 MB cada. E com isso, a caixa já está no máximo, e eu nem comecei a descobrir quanto o banco de dados vai precisar.

A maioria dos usuários interage com o banco de dados através do site asp.net e do servidor de relatório.

Você não disse, mas se eles estiverem rodando na mesma caixa, os requisitos de memória para eles também deverão ser levados em consideração.

Por fim, temos uma operação de armazenamento de dados bastante envolvida que provavelmente gera 3 milhões de registros por dia por meio de pacotes SSIS que também são executados no servidor.

Supondo que isso seja executado à noite quando não houver usuários ativos no sistema, não vejo isso como um problema, a menos que esteja demorando muito para ser executado. Essa parte das coisas é a menor das suas preocupações; usuários ao vivo são mais importantes.

Nossas solicitações anteriores de memória adicional foram negadas com a resposta comum de que precisamos para executar mais otimizações de consulta.

Como demonstrei acima, a quantidade atual de memória provisionada é completamente inadequada. Ao mesmo tempo, porém, no outro extremo do espectro, é extremamente improvável que você consiga fornecer memória suficiente provisionada para manter todo o banco de dados na memória de uma só vez.

Mesmo que você tenha uma resposta geral como essa (que, a propósito, provavelmente teve mais a ver com a persuasão de sua justificativa para recursos adicionais, e não com o uso real dos recursos), é muito provável que a eficiência do banco de dados seja melhorado. No entanto, não há uma quantidade única de ajustes que possa resolver os problemas que você está enfrentando agora; a sugestão disso é completa para mim.

Eu adotaria a abordagem geral de que a quantidade de memória atualmente provisionada está abaixo do mínimo necessário (que deve ser corrigido o mais rápido possível), e podem ser necessários recursos adicionais para melhorar a experiência do usuário para um nível utilizável enquanto são feitas melhorias para aumentar a eficiência de os sistemas.

Aqui estão alguns pensamentos (em ordem de ataque):

  • Você ganhará se puder provar quanto desempenho melhora toda vez que obtém mais recursos provisionados. Acompanhe as métricas de desempenho usando o log do Monitor de Desempenho (nota: a parte de log é muito importante), incluindo os tempos de resposta do site, se possível. Comece a fazer isso agora , antes de fazer qualquer outra coisa. Quando você finalmente obtém a quantidade mínima de memória (você não receberá 32 GB imediatamente), de repente você agora tem evidências de que a memória adicionada melhorou as coisas ... o que significa que adicionar ainda mais provavelmente ajudaria também! Se você não coletar uma linha de base na configuração atual, sentirá falta do barco quando as coisas subirem até o nível mínimo recomendado.

  • Analise as estatísticas de espera do seu servidor . Isso mostrará qual é o maior gargalo no sistema. Você provavelmente terá PAGEIOLATCH_XXo tempo de espera mais comum / mais alto, o que indica muita E / S sendo feita para buscar páginas do disco. Isso pode ser aliviado com a adição de memória, para que as E / S físicas se tornem menos frequentes, pois os dados necessários já estão na memória. Embora essa análise seja praticamente uma conclusão precipitada, o fato de você ter reunido essas estatísticas fornece mais munição ao justificar a necessidade de recursos.

  • Como mencionei acima, o requisito mínimo para memória não está sendo atendido. Colete o conjunto de requisitos de hardware recomendados para todo o software que você está executando e talvez também faça capturas de tela do Gerenciador de Tarefas. Isso por si só deve ser suficiente para justificar pelo menos 4-8 GB a mais, no local. Se eles ainda recusarem, tente convencê-los a permitir que você experimente por uma semana e devolva depois disso (você está coletando estatísticas de desempenho, para que não precise devolvê-lo, porque no meio da semana você ' será capaz de provar o quanto melhorou a situação). Se eles ainda recusarem, você está sendo preparado para falhar; URLT .

  • Se você puder descarregar parte da carga de trabalho (em particular, evite a comunicação remota, se possível), isso aumentará a quantidade de memória disponível para o banco de dados, o que é mais crítico.

  • Você não poderá ajustar o banco de dados inteiro na memória de uma só vez, o que significa que você precisa definir a configuração de memória máxima do SQL Server com muito cuidado para evitar a confirmação excessiva de memória , o que prejudica o desempenho como nada mais . O comprometimento excessivo é realmente ainda pior do que simplesmente não conseguir caber todos os dados na memória. É muito provável que você esteja nesse cenário agora, simplesmente porque não há memória disponível, e é provável que a configuração de memória máxima esteja definida como padrão (ilimitada).

  • Como você está executando o SQL Server Enterprise Edition e a memória é premium, eu consideraria fortemente implementar a compactação de dados . Isso compensará um aumento no uso da CPU por economia de espaço na memória (e, portanto, acesso a disco reduzido, comparativamente muito lento).

  • Ajuste o banco de dados. É provável que as estruturas e consultas possam usar melhorias no que diz respeito aos padrões de indexação e acesso. Além disso, se muitos dados estiverem sendo varridos e agregados com frequência, a criação de visualizações indexadas, tabelas de resumo ou relatórios pré-computados pode ser muito útil.

  • Isso pode ser longo, porque provavelmente significa mais provisionamento de hardware, mas implemente uma solução de cache. A consulta mais rápida é aquela que você nunca faz .

Essas são apenas algumas idéias. O ponto principal é que o ajuste sozinho não resolverá os problemas aqui, nem o hardware sozinho, embora o último provavelmente alivie a maioria dos problemas imediatos. É assim que funciona: jogue o hardware no problema a curto prazo para apagar o fogo e jogue o problema no longo prazo para corrigir a causa raiz da melhor maneira possível.

Jon Seigel
fonte
1
John, eu amo sua resposta e +1, mas nesse cenário, parece que o comentário de Aaron bateu na cabeça e eles simplesmente precisam de mais memória RAM, independentemente do quanto tentem ajustá-la.
Ali Razeghi
2
@ Ali: Sim, eu concordo, e mencionei isso na minha resposta. Eu queria principalmente focar em estratégias para obter mais memória RAM, porque esse parece ser o problema aqui. (Se ele é simplesmente não disponível isso é uma questão separada.)
Jon Seigel
Muito obrigado pela resposta detalhada! Eu sou novo no ajuste de desempenho de db, então só estou tentando entender por onde começar. Tenho alguns materiais de leitura e o Monitor de desempenho, agora só preciso entender as métricas. Mas suas sugestões fornecem um bom roteiro para abordar esse problema. Obrigado novamente.
RMuesi
@RMuesi: De nada. Se você tiver alguma dúvida específica sobre como realizar o que precisa fazer, fique à vontade para publicá-la (pesquise primeiro, é claro) e a comunidade ficará feliz em ajudar.
22813 Jon Seigel
9

Isso é insanidade da conta 'bean counter'. Os US $ 1100 a US $ 2500 que você gastaria em RAM poderiam se pagar em uma semana !

Eles estão tirando um tempo para 20 funcionários e 5 deles estão fazendo um trabalho 'intensivo em recursos'. Eu imagino que o tempo deles não é barato, e alguns desses relatórios são aqueles que o chefe não concorda com o salário. São toneladas de desperdício re-transmitido e lidando com frustração.

Explique a eles que eles provavelmente estão procurando de US $ 15 a US $ 20 por GB para RAM. Atualmente, 128 GB de RAM custariam aproximadamente US $ 2200- US $ 2500, e os preços da RAM subiram um pouco atualmente. Mesmo que a placa-mãe de seus servidores não a suporte (isso seria estranho), os 64 GB seriam de US $ 1100- US $ 1200 (acabei de verificar, e essa é a qualidade da RAM de servidores da Dell sem descontos). Apenas 64 GB de RAM podem fazer uma enorme diferença (especialmente se evitarmos varreduras de tabelas de tabelas grandes).

Descubra quanto tempo é desperdiçado e pergunte se vale US $ 1100- $ 2500. Se você gastar apenas US $ 1100 e obter 64 GB de RAM, evite varreduras de tabelas em tabelas grandes. Use mais disco com índices (se você tiver a latência para suportá-lo) para evitar verificações grandes que despejam a memória.

Ali Razeghi
fonte
5
Bem dito pela insanidade. Memória de 4GB é menor do que eu sugeriria hoje em dia para um desktop. E isso agora está tentando executar em um ambiente de banco de dados de 170GB. Piada maldita. Mas hey, a virtualização de meios beancounters você pode se livrar dos grandes servidores caros;)
TomTom
2
Totalmente de acordo. Pelo menos os contadores de feijão no cenário PO teve suas garras retirado do servidor físico (espero!)
Ali Razeghi
1
acredite. Eu não. TYPICAL seria um servidor com bastante memória RAM e - discos baratos LAAAAARGE. Assim, você pode executar muitas máquinas virtuais nelas. Afinal, a RAM é normalmente o fator limitante, não é;)? O resultado será um desempenho hediondo de IOPS - mesmo sem um banco de dados. Estive lá, vi isso. Memória de 64GB, espelhos 2 TB de disco SATA;)
TomTom
Obrigado pela resposta. Eu suspeitava disso, mas simplesmente não tenho os dados para provar que o problema é parcialmente imitação de hardware. Estou trabalhando nisso agora.
RMuesi
2
Convém que eles saibam que o SQL Server é um mecanismo de banco de dados na memória. Lendo do disco, até os SSDs (que tenho certeza de que esta loja não está utilizando) são dolorosamente lentos. Uma leitura da RAM leva cerca de 5ns. Mostre a eles um plano de execução com SET STATISTICSIO ON, que mostra as varreduras e leituras da tabela. Mostre a eles as leituras físicas versus as lógicas. Físico é conduzido a partir do disco.
Ali Razeghi
-1

Estou executando o 2008 R2 com 46 GB de RAM. Não há máquinas virtuais. SQL Server 2008.

Os bancos de dados têm cerca de 300 GB.

Coloquei os bancos de dados em uma unidade de estado sólido recentemente e triplicou minha saída de dados.

O servidor está atualmente usando 45 GB de RAM e funcionando bem.

FC Sata Raids e SAS SCSI Raids. 26 unidades lógicas ao todo. 144 Discos giratórios.

Ontem eu estava usando apenas 24 GB de RAM quando tinha apenas 50 TB de discos rígidos completos conectados e transferindo dados. Hoje eu tenho 160 TB de discos rígidos cheios e estou usando 45 GB de RAM.

Meu aplicativo não usa mais de 400 MB de RAM.

Eu suspeitaria que você precisa dos bancos de dados em uma unidade de estado sólido rápida ou unidade ram. Basicamente, você precisa de muito mais memória RAM.

david
fonte
IBM exFlash 400 GB MCS $ 4400. É para onde eu vou.
david