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 / 52351
Accepted
Elijah W. Gagne
Elijah W. Gagne
Asked: 2013-10-29 10:43:21 +0800 CST2013-10-29 10:43:21 +0800 CST 2013-10-29 10:43:21 +0800 CST

Por que uma consulta de execução longa permaneceria inativa e com wait_info nulo

  • 772

A consulta a seguir foi executada no SQL Server 2008 R2 e levou mais de 1 hora para ser executada:

select log_id, type, instance_id from ts_cache_log where log_id > 146400 order by log_id

Produziu 0 linhas retornadas. Sei disso porque restaurei o banco de dados no momento em que a consulta começou a ser executada e a executei novamente. Quando fiz isso, a consulta correu muito rápido (menos de 1 segundo).

Enquanto essa consulta estava em execução por mais de uma hora, sp_WhoIsActive foi iniciado a cada 5 minutos por meio de um trabalho do SQL Agent e registrou os detalhes em uma tabela. A imagem abaixo, que você deve baixar e visualizar ampliada , mostra o que estava sendo executado durante esse período.

sp_WhoIsActive Detalhes

A consulta de execução longa é destacada em verde. A coluna wait_info é nula e o sleep_status está sempre dormindo.

Alguma ideia de por que essa consulta demorou tanto para ser executada e/ou alguma ideia sobre o que posso fazer para solucionar o problema ainda mais?

sql-server performance
  • 2 2 respostas
  • 6716 Views

2 respostas

  • Voted
  1. Best Answer
    Jon Boulineau
    2013-10-29T13:17:36+08:002013-10-29T13:17:36+08:00

    Concordo com @Ian na maior parte. Deixe-me expandir, no entanto.

    Provavelmente é o IIS mantendo a conexão aberta, mas é por design devido ao pool de conexões, que é quase sempre usado por padrão atualmente.

    O outro ponto é que a consulta não foi executada por mais de uma hora. Preste muita atenção à incrível documentação que Adam inclui em sp_WhoIsActive. Execute-o com @help =1. No atributo de tempo que você está usando para medir o tempo de execução, Adam escreve o seguinte:

    Para uma solicitação ativa, o tempo em que a consulta está em execução

    Para uma sessão de suspensão, tempo desde a conclusão do último lote

    E para o atributo sql_text, Adam escreve:

    Mostra o texto SQL para solicitações ativas ou a última instrução executada para sessões adormecidas , se disponível em qualquer um dos casos.

    O que realmente está acontecendo aqui é que a consulta é concluída muito rapidamente e a conexão é liberada de volta para o pool (no estado 'dormindo') para ser apanhada quando for solicitada novamente. Os resultados em sua tabela refletem que a última conexão que executou a consulta está simplesmente sem uso por um longo período de tempo. Então, nada com que se preocupar, tudo está funcionando conforme planejado.

    No entanto, você pode modificar seu trabalho de agente para executar sp_WhoIsActive com @show_sleeping_spids = 1, que mostrará apenas spids adormecidos se eles tiverem uma transação ativa, para que você não veja mais essas conexões em pool.

    ATUALIZAR:

    Ao olhar para a captura de tela novamente, vejo que você realmente tem uma transação aberta mantida nesse spid. Isso realmente não afeta minha resposta, exceto o último parágrafo, mas você precisa descobrir por que essa transação está sendo mantida. Você tem transações implícitas ativadas? Você está deixando de confirmar uma transação explícita no mesmo lote?

    • 9
  2. Ian Chamberland
    2013-10-29T11:49:53+08:002013-10-29T11:49:53+08:00

    O status de suspensão não indica que é uma consulta de execução longa, mas sim que a conexão estabelecida para executar essa consulta ainda está aberta. Enquanto essa conexão estiver aberta, ela será capturada e registrada em sua tabela. Parece que é mais um problema ou o IIS não está fechando a conexão com o banco de dados.

    • 3

relate perguntas

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

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

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • 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

    Conceder acesso a todas as tabelas para um usuário

    • 5 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
    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
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +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