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!
Respostas:
Sem mais informações sobre suas consultas e tamanhos de dados, é realmente difícil fornecer qualquer tipo de estimativa, muito menos uma estimativa precisa.
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.
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.
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.
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_XX
o 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.
fonte
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.
fonte
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.
fonte