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 / 274042
Accepted
MrCalvin
MrCalvin
Asked: 2020-08-20 23:28:32 +0800 CST2020-08-20 23:28:32 +0800 CST 2020-08-20 23:28:32 +0800 CST

Rejeite automaticamente determinadas declarações de consulta caras

  • 772

Eu tenho alguns clientes que às vezes executam algumas consultas muito caras "não permitidas".

Eu os localizei usando Eventos Estendidos.

É possível rejeitar essas consultas automaticamente? Eu conheço a instrução SQL, então seria capaz de pegá-los usando o evento "sql_text" no EE.

Mas não encontrei uma maneira de executar nenhuma ação no EE quando, por exemplo, um determinado evento está acontecendo.

Ou existe outra maneira de contornar isso?

sql-server extended-events
  • 2 2 respostas
  • 432 Views

2 respostas

  • Voted
  1. Best Answer
    Paul White
    2020-08-21T07:37:30+08:002020-08-21T07:37:30+08:00

    As principais opções são o limite de custo do governador de consulta e o Administrador de recursos .

    O primeiro é um pouco limitado porque se aplica a todas as consultas e as limita com base no custo estimado , que pode ser muito impreciso.

    Além disso, o SQL Server Management Studio apresenta problemas SET QUERY_GOVERNOR_COST_LIMIT 0ao se conectar (com as opções do SSMS definidas como padrão). Isso substitui a configuração no nível da instância e, portanto, torna essa opção bastante ineficaz.

    A melhor opção é o Resource Governor (se estiver disponível para você) quando combinado com:

    A atualização adiciona a configuração de tempo limite da CPU ao grupo de trabalho do Resource Governor REQUEST_MAX_CPU_TIME_SEC no SQL Server 2014, 2016 e 2017

    Quando o sinalizador de rastreamento (TF) 2422 estiver habilitado e se uma solicitação exceder o tempo máximo definido por REQUEST_MAX_CPU_TIME_SEC , a solicitação será abortada. Além disso, você pode receber uma mensagem de erro 10961 semelhante à seguinte:

    A solicitação foi anulada porque seu uso de CPU excede o limite máximo configurado para o grupo de carga de trabalho.

    Não é possível gerenciar isso com Eventos Estendidos.

    Suas outras opções foram descritas por Dominique Boucher :

    Por que não simplesmente conversar com as pessoas que estão executando essas consultas e dizer a elas que não o façam? [...] Remova o acesso daqueles que executam as consultas depois que você lhes disse para não fazer isso e isso deve ser feito. Caso contrário, você pode ter um trabalho que é executado o tempo todo e verificar as consultas em execução e matar o que você não quer ter em execução. Eles ainda começarão a ser executados, mas tecnicamente, o usuário final receberá erros o tempo todo para que possa eventualmente desistir.

    Erik Darling tinha uma sugestão semelhante:

    Se eu soubesse o texto da consulta com antecedência, provavelmente apenas configuraria um loop while em um trabalho de agente para descobrir quando essas consultas estão sendo executadas , coletar o SPID e encerrar a sessão.

    • 7
  2. MrCalvin
    2020-08-21T11:40:06+08:002020-08-21T11:40:06+08:00

    Obrigado Paul, tive problemas governor_cost_limitpara entrar em ação ao fazer um teste no SSMS, mas como você disse, o SSMS parece anular a configuração de todo o servidor.

    E encontrei a opção no SSMS aqui: insira a descrição da imagem aqui

    E, claro, a opção de todo o servidor na GUI (em propriedades do servidor): insira a descrição da imagem aqui

    Para configurá-lo pela instrução SQL:

    USE AdventureWorks2012;
    GO  
    EXEC sp_configure 'show advanced options', 1;  
    GO  
    RECONFIGURE;  
    GO  
    EXEC sp_configure 'query governor cost limit', 120 ;  
    GO  
    RECONFIGURE;  
    GO  
    

    De learn.microsoft.com

    Depois de definir a opção SSMS, ela agora é ativada quando faço um teste. Ele cancelará a consulta quase imediatamente (quando o servidor tiver calculado uma estimativa), não quando a consulta tiver decorrido os segundos especificados. Eu recebo este "erro" do servidor:

    The query has been canceled because the estimated cost of this query (965) exceeds the configured threshold of 10. Contact the system administrator.
    

    Ansioso para receber meus primeiros e-mails/telefonemas dos clientes reclamando. Eu perdi horas com esses problemas de tempo limite do SQL.

    • 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