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 / 313658
Accepted
John Eisbrener
John Eisbrener
Asked: 2022-06-23 08:58:55 +0800 CST2022-06-23 08:58:55 +0800 CST 2022-06-23 08:58:55 +0800 CST

Limitando concessões de memória desperdiçadas - MSSQL 2017

  • 772

Estou executando um SQL Server 2017 Enterprise no local no nível de patch/CU mais recente que dá suporte ao software do fornecedor, que se tornará importante mais tarde.

Estatísticas do servidor:

  • Máquina virtual (a memória está fixada )
  • Datacenter do Windows Server 2016
  • 16 vCPU
  • 192 GB de RAM (179 GB alocados ao SQL Server)
  • Arquivo de página de 30 GB (prefiro que isso não esteja lá, mas não foi uma batalha que ganhei)
  • Hospeda 5 bancos de dados de usuários, 1 dos quais tem aproximadamente 4 TB de tamanho
  • Servidor Obrigatório do Fornecedor Padrão de 1 paramax degree of parallelism

Como dito acima, este sistema suporta uma plataforma de fornecedor popular e, embora o fornecedor seja muito bom sobre índices personalizados ou outros ajustes de modelo de dados transparentes, eles tendem a desaprovar alterações de funcionalidade que exigem ajustes em seu código de aplicativo (por razões óbvias, pois afetaria milhares de seus clientes).

A situação que estou enfrentando é que esse aplicativo de fornecedor executa row modeconsultas de longa duração que enfileiram uma lista de itens que são processados ​​item por item em seu código de aplicativo. Essas consultas podem (e funcionam) ser executadas por dias ou até semanas se as permitirmos (mostrando ASYNC_NETWORK_IOesperas, como esperado). Quando essas consultas são iniciadas, elas solicitam grandes quantidades SerialDesiredMemoryem comparação com o SerialRequiredMemoryque realmente precisam. O resultado é que a Memória Solicitada/Concedida no administrador de MEMORYCLERK_SQLQERESERVATIONSmemória excede em muito o que é Usado. Por exemplo:

-- What amount of query execution memory is asked for and used
SELECT    SUM(granted_memory_kb) / 1024 AS granted_memory_mb
        , SUM(requested_memory_kb) / 1024 AS requested_memory_mb
        , SUM(used_memory_kb) / 1024 AS used_memory_mb
        , (SUM(granted_memory_kb) - SUM(used_memory_kb)) / 1024 AS excess_memory_grant_mb
FROM    sys.dm_exec_query_memory_grants
OPTION (RECOMPILE)

Devoluções:

insira a descrição da imagem aqui

Isso é absolutamente aterrorizante E isso ocorre depois de habilitar RESOURCE GOVERNORe reduzir o REQUEST_MAX_MEMORY_GRANT_PERCENTpool de recursos em que essas consultas caem para 5%, embora eu provavelmente reduza isso até o mínimo de 1% do SQL 2017 com base no que estou vendo.

Minha pergunta é enquanto estou preso no SQL 2017, há mais alguma coisa que eu possa fazer para limitar a quantidade de RAM desperdiçada em meus planos de execução de consulta, além de reduzir ainda mais o REQUEST_MAX_MEMORY_GRANT_PERCENTvalor do pool de recursos para 1%?

Como este é um aplicativo de fornecedor, os guias de plano de consulta podem ser uma opção, mas o ajuste MAX_GRANT_PERCENTnão me dá nada além do que estou obtendo ao ajustar o REQUEST_MAX_MEMORY_GRANT_PERCENTvalor no pool de recursos. Existe algo que eu possa fazer em um guia de plano para forçar a batch modeexecução na esperança de que isso acione o recurso de feedback de memória do modo de lote que está disponível no SQL 2017? Novamente, como este é o código do aplicativo do fornecedor com o qual estou trabalhando, não tenho a capacidade de alterar as consultas, portanto, as abordagens padrão de tolice provavelmente não funcionarão aqui.

Atualizar para o SQL 2019 (ou preferencialmente SQL 2022) é a resposta óbvia aqui, pois me dá acesso a vários recursos que posso empregar nessa situação, como Row Mode Memory Feedback e valores de ponto flutuante paraREQUEST_MAX_MEMORY_GRANT_PERCENT , mas existem outras opções disponíveis com o SQL 2017 que ainda não toquei? Se não, tudo bem, estou apenas tentando esgotar todas as opções pendentes que ainda não pensei.

sql-server sql-server-2017
  • 1 1 respostas
  • 68 Views

1 respostas

  • Voted
  1. Best Answer
    Charlieface
    2022-06-23T13:16:59+08:002022-06-23T13:16:59+08:00

    Conforme documentado , a dica de consulta MAX_GRANT_PERCENTpermite um valor de ponto flutuante até 0,0 mesmo no SQL Server 2017, portanto, ainda é uma opção.

    db<>violino

    Então você pode criar um guia de plano para isso

    EXEC sp_create_plan_guide   
        @name = N'Guide1',   
        @stmt = N'SELECT Something
    FROM Somewhere',   
        @type = N'SQL',  
        @hints = N'OPTION (MAX_GRANT_PERCENT = 0.5)';  
    
    • 2

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