AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 260669
Accepted
DForck42
DForck42
Asked: 2020-02-27 11:52:55 +0800 CST2020-02-27 11:52:55 +0800 CST 2020-02-27 11:52:55 +0800 CST

Pressão de memória estranha para SQL Server 2016

  • 772

Estamos lutando contra um problema de pressão estranha de memória em um servidor específico há alguns meses. Veja como foi o último incidente no SentryOne:

Memoria do sistema

Memoria do sistema

Memória do SQL Server

Memória do SQL Server

Configuração de memória:

  • Memória Total do Servidor - 96 GB
  • Memória máxima do servidor - 84 GB

A razão pela qual isso parece estranho é que, se fosse pressão de memória externa, eu esperaria que a categoria Outros na Memória do Sistema crescesse durante isso, o que não acontece.

Parte do que vemos acontecer nesse período é que as consultas acabam gerando planos ruins e acabam causando problemas de desempenho para o aplicativo. Historicamente, executar o DBCC FreeProcCache durante essa situação aliviou a pressão, mas ainda não sabemos a causa. Eu acho que os planos de um plano ruim são um sintoma e não uma causa desse problema, mas posso estar errado.

Coisas que fizemos para tentar resolver esse problema:

  • Removida uma junção no que pensávamos ser o sp problemático
  • Registros duplicados excluídos no banco de dados
  • Maior memória no servidor (acho que adicionamos 16-32 gb)
  • Bloqueio de páginas na memória ativado

Estou completamente perdido quanto ao que olhar a seguir. Nosso arquiteto acha que talvez precisemos mexer em algumas configurações de VM com memória, mas ainda não chegamos lá.

O que posso ver para corrigir esse problema estranho de pressão de memória?

sql-server sql-server-2016
  • 3 3 respostas
  • 582 Views

3 respostas

  • Voted
  1. Best Answer
    John K. N.
    2020-02-29T06:23:39+08:002020-02-29T06:23:39+08:00

    Há um artigo legal de Jonathan Kehayias no SQL SQLSkills.com com o título Wow… Uma calculadora online para configurar incorretamente a memória do SQL Server! .

    Em seu artigo Jonathan escreve:

    Minha recomendação geral é usar o cálculo do meu livro Troubleshooting SQL Server: A Guide for the Accidental DBA , que é reservar 1 GB de RAM para o sistema operacional , 1 GB para cada 4 GB de RAM instalados de 4 a 16 GB , e, em seguida, 1 GB para cada 8 GB de RAM instalados acima de 16 GB de RAM . Este não é um cálculo excessivamente técnico, mas funcionou bem e geralmente configura a 'memória máxima do servidor' baixa o suficiente para que o servidor fique estável e tenha um desempenho confiável.

    Se você continuar com este exemplo, talvez seja melhor configurar seu SQL Server para ser executado com uma configuração max_memory de 81 GB.

    Você pode criar um Excel para produzir um pequeno gráfico agradável das configurações de memória máxima do SQL Server com as seguintes fórmulas e dados.

    Dados de exemplo para cálculo de memória do SQL Server

    A planilha do Excel começa com uma coluna HW Memory (A2):

    4
    

    A fórmula do Excel para a segunda coluna SO reservado (B2) é:

    IF(A2<=16;1 + A2/4;1+4+(A2-16)/8)
    

    A coluna da Memória SQL (C2) é então:

    A1-A2
    

    Isso produz o seguinte gráfico:

    Gráfico de configuração de memória do SQL Server

    Solução possível

    Como você pode ver, se você tiver 96 GB de RAM, deverá reservar 15 GB para o sistema operacional e definir a memória SQL (max_memory) para 81 GB.

    Jonathan continua explicando em seu artigo que ...

    O SQL Server tem um componente interno do SQLOS, o Monitor de Recursos, que monitora a API do Windows Server QueryMemoryResourceNotification para obter o status sobre a disponibilidade de memória no nível do sistema operacional no servidor. Se o sistema operacional Windows estiver sob pressão de memória, ele definirá uma notificação de pouca memória de que o thread do Monitor de recursos detectará e forçará os ponteiros do relógio externo nos caches internamente para iniciar as varreduras dos caches para limpar e reduzir o uso de memória, permitindo que o processo seja liberado memória de volta para o sistema operacional.

    Seu sistema operacional pode não ter memória suficiente e está retirando a memória do sistema operacional SQL Server.

    Reduzir ligeiramente a configuração max_memory para 81 GB permitirá que o sistema operacional e outros componentes do SQL Server que não são executados dentro da configuração max_memory tenham RAM suficiente.

    Sua milhagem pode variar

    • 3
  2. rois
    2020-03-02T07:02:06+08:002020-03-02T07:02:06+08:00

    Posso estar errado sobre isso, mas vamos tentar de qualquer maneira. Talvez seja útil para você.

    Na captura de tela que você fornece, parece que os tanques de expectativa de vida da página, quando você começa a ter problemas de desempenho. Presumo que você veja consultas com longas esperas PAGEIOLATCH_* nesse momento? Você também menciona que planos ruins estão sendo gerados e executar DBCC FREEPROCCACHE corrige o problema temporariamente. Para mim, soa como sintomas típicos de sniffing de parâmetros. Eu acho que você tem uma consulta, que, quando compilada com parâmetros errados, faz a varredura da tabela em vez de buscar, usa o índice errado ou a forma do plano de consulta muda. Geralmente, essa é uma consulta que requer muita E/S e satura o subsistema de armazenamento, de modo que até mesmo consultas simples que fazem pesquisas de chave ficam lentas. Eu tentaria identificar qual é e confirmar removendo apenas o plano dele, quando tiver problemas de desempenho.

    Para identificar a consulta problemática, eu apenas observaria aquelas que têm longas esperas PAGEIOLATCH e comparar seus planos de execução quando forem rápidos.

    Para corrigi-lo, você precisa ser criativo. Você pode tentar adicionar dicas de consulta, forçar a recompilação em cada execução, usar guias de plano. Também tive sucesso ao alterar índices nas tabelas subjacentes e reescrever consultas problemáticas. É difícil aconselhar algo específico, pois seu problema agora é identificar o que está causando seus problemas.

    • 2
  3. Andreas Bergdal
    2020-02-29T04:43:31+08:002020-02-29T04:43:31+08:00

    Eu vi problemas semelhantes ao executar trabalhos noturnos do SSIS, às vezes o uso da memória do SSIS é invisível para o Sentryone por qualquer motivo. Eu daria uma olhada no calendário de eventos no S1 para ver quais trabalhos estão sendo executados no momento.

    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve