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 / 324422
Accepted
SteLoe
SteLoe
Asked: 2023-03-06 21:23:09 +0800 CST2023-03-06 21:23:09 +0800 CST 2023-03-06 21:23:09 +0800 CST

O plano do Query Store não inclui a lista de parâmetros

  • 772

Eu uso o repositório de consultas para obter uma visão geral das consultas executadas em nossos bancos de dados e para gerar testes de desempenho nos quais executo essas consultas em paralelo em vários hosts.

Minha tarefa é testar quantos usuários simultâneos podemos sustentar antes que os tempos de resposta do banco de dados aumentem.

Em todos os bancos de dados que examinei com armazenamento de consulta, os planos de consulta XML incluíam uma tag "ParameterList" da qual li todos os parâmetros para a consulta.

Agora me deparei com um banco de dados onde nem uma única consulta capturada no repositório de consultas tem seus valores de parâmetro listados no plano de consulta.

Qual é a razão disso?

Se for relevante: O banco de dados em questão é usado pelo Microsoft Dynamics.

O servidor é 13.0.4259.0. Nível de compatibilidade do banco de dados é 2016(130')

As consultas no repositório de consultas têm a seguinte aparência:

(@0 int,@1 nvarchar(20),@2 int)SELECT "39"."timestamp",...... WITH(READUNCOMMITTED) 
ON ("39"."Document Type" = "39_e1"."Document Type") 
AND ("39"."Document No_" = "39_e1"."Document No_") 
AND ("39"."Line No_" = "39_e1"."Line No_") 
WHERE ("39"."Document Type"=@0 
AND "39"."Document No_"=@1 AND "39"."Line No_"=@2) 
OPTION(OPTIMIZE FOR UNKNOWN)
sql-server
  • 2 2 respostas
  • 99 Views

2 respostas

  • Voted
  1. Best Answer
    Erik Darling
    2023-03-07T00:53:14+08:002023-03-07T00:53:14+08:00

    feio

    O uso da dica otimizar para desconhecido removerá a lista de parâmetros do XML do plano de consulta da mesma forma que o uso de variáveis ​​locais. Observe que isso se aplica apenas a variáveis ​​locais em planos em cache e planos no repositório de consultas. Eles ainda aparecerão nos planos de execução reais.

    DECLARE
        @ick int = 1;
    
    SELECT
        u.*
    FROM dbo.Users AS u
    WHERE u.Id = @ick;
    
    
    SELECT
        u.*
    FROM dbo.Users AS u
    WHERE u.Id = 1
    OPTION(OPTIMIZE FOR UNKNOWN);
    

    desconcertante

    OPTIMIZE FOR UNKNOWNé considerada a pior prática pela maioria das pessoas que se preocupam com o desempenho do banco de dados.

    Ele pode ser desabilitado nas configurações do Dynamics globalmente junto com outras opções bizarras de dicas de consulta.

    NOZES

    • 3
  2. Paul White
    2023-03-07T19:02:28+08:002023-03-07T19:02:28+08:00

    Quando OPTIMIZE FOR UNKNOWNou USE HINT ('DISABLE_PARAMETER_SNIFFING')é usado, ou a opção de configuração com escopo do banco de dados é definida para não realizar a detecção de parâmetros, a Lista de Parâmetros aparece apenas em planos de pós-execução ('reais') executados localmente.

    O cache do plano e o armazenamento de consulta contêm uma versão do plano sem a Lista de Parâmetros . Este parece ser um comportamento intencional, provavelmente porque os planos não dependem de valores de parâmetros nesses casos. Alguém poderia argumentar que isso é inútil, mas é o que é.

    Há uma opção para produzir um plano com base nas estatísticas de distribuição média, mantendo a Lista de Parâmetros : Habilitar o sinalizador de rastreamento documentado 4136 em vez de usar as dicas de consulta. Consulte KB980653 para obter detalhes.

    Isso pode ser feito no nível da consulta OPTION (QUERYTRACEON 4136)ou habilitado nos escopos de sessão, global e de inicialização.

    O sinalizador de rastreamento 4136 requer permissões de administrador para definir, mas se as consultas forem conhecidas com antecedência, você poderá usar um guia de plano para aplicar o sinalizador de rastreamento como uma dica de consulta sem que o chamador precise dessas permissões elevadas.

    No SQL Server 2022, é possível aplicar OPTIMIZE FOR UNKNOWNou USE HINT('DISABLE_PARAMETER_SNIFFING')como uma dica de armazenamento de consulta , mantendo a lista de parâmetros .

    • 3

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