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 / 196785
Accepted
SqlWorldWide
SqlWorldWide
Asked: 2018-02-01 19:28:49 +0800 CST2018-02-01 19:28:49 +0800 CST 2018-02-01 19:28:49 +0800 CST

Diferença entre os atributos 'GrantedMemory' e 'MaxQueryMemory' no Showplan XML

  • 772

Após o novo atributo para o esquema XML do Showplan, o SQL Server 2014 ou 2016 foi introduzido pelo KB3170112 .

MaxQueryMemory em MemoryGrantInfo: quantidade máxima de memória disponível para concessão de consulta individual em KB, se a consulta exigir memória para ser executada.

O atributo GrantedMemoryexistia antes de ser anunciado acima. Agora ambos estão lá no Showplan XML.

Aqui está um exemplo:

insira a descrição da imagem aqui

Da imagem acima, se eu adicionar o valor de RequestedMemorye RequiredMemorytotal é = 62.864 KB. Onde está o valor de 295.344 KB de MaxQueryMemoryorigem ou o que esse valor realmente significa?

Eu também olhei para 2017 Schema , que tem definição abaixo.

MaxQueryMemory: Memória máxima em KB permitida para consulta única.

sql-server sql-server-2014
  • 2 2 respostas
  • 696 Views

2 respostas

  • Voted
  1. Best Answer
    Joe Obbish
    2018-02-05T20:29:21+08:002018-02-05T20:29:21+08:00

    É um instantâneo das mesmas informações que você pode obter de sys.dm_exec_query_resource_semaphores . Acredito que seja target_memory_kbpara o semáforo de recurso regular multiplicado pela porcentagem máxima de concessão de consulta para o grupo do Resource Governor no qual a consulta está sendo executada. Se o RG não estiver ativado, use apenas o padrão de 25%.

    Nos servidores que examinei, geralmente vejo cerca de 28% da memória do servidor não disponível para concessões de memória de consulta. Então, depois de executar uma carga de trabalho, a concessão máxima de consulta disponível para uma consulta é 0,25 * 0,72 * MaxServerMemory.

    Aqui está uma consulta que você pode executar que termina quase instantaneamente, mas solicita uma grande concessão de memória:

    DECLARE @zero INT = 0;
    
    WITH CTE AS (
        SELECT high
        FROM master..spt_values
        WHERE @zero = 1
    )
    SELECT *
    FROM CTE t1
    CROSS JOIN CTE t2
    CROSS JOIN CTE t3
    ORDER BY t1.high + t2.high + t3.high;
    

    Se eu forçar o tempo limite dessa consulta, recebo o seguinte no plano real:

    insira a descrição da imagem aqui

    MaxQueryMemorynão muda como resultado do tempo limite. Ele não é afetado diretamente por outras consultas atualmente em execução e usando a memória de consulta. Ele é afetado indiretamente por qualquer coisa que altere KB de memória de destino para o pool de recursos.

    Essas informações podem ser úteis se você tiver vários pools e grupos do Resource Governor diferentes e quiser validar se uma consulta vai para o local correto. Ele também pode fornecer contexto para o tamanho total ou configuração de um servidor ao qual você não tem acesso. É outra maneira de saber se uma consulta expirou aguardando uma concessão de memória, mas já existem outras maneiras de fazer isso. O caso de uso pretendido pode ser fornecer mais informações sobre problemas de desempenho causados ​​​​pela memória de destino mudando bastante nos servidores, mas nunca vi isso acontecer pessoalmente. Talvez isso possa acontecer em servidores com várias instâncias do SQL Server em execução?

    • 2
  2. Shanky
    2018-02-01T22:53:10+08:002018-02-01T22:53:10+08:00

    Cito a mesma atualização do artigo de suporte para expor a memória máxima habilitada para uma única consulta no Showplan XML no SQL Server 2014 ou 2016

    MaxQueryMemory em MemoryGrantInfo: quantidade máxima de memória disponível para concessão de consulta individual em KB, se a consulta exigir memória para ser executada.

    O que significa quantidade máxima de memória que pode ser concedida à consulta na situação "atual" se a consulta, durante o processamento, solicitar memória. Esse valor é calculado quando a consulta é executada considerando os requisitos de memória de outras consultas em execução e a memória do sistema usada. Isso é útil na solução de problemas de uma consulta lenta que está sendo executada lentamente porque as estatísticas são distorcidas e o otimizador prepara um plano subótimo que força a consulta a solicitar memória diferente do que realmente precisaria durante a execução. Quando ele solicita muito mais do que o solicitado, a consulta se torna super lenta porque não recebeu a memória necessária. Isso também ajuda a entender se há uma pressão de memória no sistema.

    GrantedQueryMemoryOTOH significa quantidade total de memória "realmente" concedida em kilobytes. Pode ser NULL se a memória ainda não foi concedida. O MaxQueryMemorysignifica o máximo que pode ser concedido.

    Um blog que vale a pena ler. Noções básicas sobre concessões de memória de consulta

    • 1

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