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 / 307658
Accepted
adam.g
adam.g
Asked: 2022-02-18 13:07:08 +0800 CST2022-02-18 13:07:08 +0800 CST 2022-02-18 13:07:08 +0800 CST

A sessão encerrada aparece no Repositório de Consultas?

  • 772

Existe alguma opção para ver sessões encerradas no Query Store?

Estou perguntando, porque temos uma ferramenta adicional que está encerrando as sessões se elas demorarem mais de 30 minutos para serem executadas ( KILLcomando).

Gostaria de verificar os planos de execução no Repositório de Consultas para consultas que foram encerradas. Não consigo encontrar sessões/consultas de armazenamento de consultas que foram eliminadas por este aplicativo adicional.

sql-server query-store
  • 2 2 respostas
  • 385 Views

2 respostas

  • Voted
  1. Zikato
    2022-02-19T00:15:12+08:002022-02-19T00:15:12+08:00

    Eles não. Eu testei isso.

    Crie um banco de dados e habilite o armazenamento de consultas.

    CREATE DATABASE QueryStoreTest
    GO
    USE QueryStoreTest;
    GO
    ALTER DATABASE QueryStoreTest
    SET QUERY_STORE = ON
        (
          OPERATION_MODE = READ_WRITE,
          CLEANUP_POLICY = ( STALE_QUERY_THRESHOLD_DAYS = 1 ),
          DATA_FLUSH_INTERVAL_SECONDS = 900,
          MAX_STORAGE_SIZE_MB = 50,
          INTERVAL_LENGTH_MINUTES = 60,
          SIZE_BASED_CLEANUP_MODE = AUTO,
          MAX_PLANS_PER_QUERY = 10,
          WAIT_STATS_CAPTURE_MODE = ON,
          QUERY_CAPTURE_MODE = ALL /* this is required for the testing */
        );
    GO
    

    Crie e execute uma consulta demorada. Já usei este:

    SELECT 
        *
    FROM sys.all_columns AS ac
    CROSS JOIN sys.all_parameters AS ap
    CROSS JOIN sys.all_objects AS ao
    

    Execute a consulta até a conclusão ou interrompa a execução no SSMS, e a consulta poderá ser encontrada no repositório de consultas.

    SELECT 
        qsq.query_id
        , qsq.query_hash
        , qsp.plan_id
        , qsqt.query_sql_text
        , qsrs.count_executions
        , qsrs.execution_type_desc
    FROM sys.query_store_query AS qsq
    LEFT JOIN sys.query_store_plan AS qsp
        ON qsp.query_id = qsq.query_id
    LEFT JOIN sys.query_store_query_text AS qsqt
        ON qsqt.query_text_id = qsq.query_text_id
    JOIN sys.query_store_runtime_stats AS qsrs
        ON qsrs.plan_id = qsp.plan_id
    WHERE qsqt.query_sql_text LIKE '%cross join%'
    AND qsqt.query_sql_text NOT LIKE '%query_store%'
    

    O tipo de execução é Regular ou Aborted . Mas se você matar a sessão de outra janela, não haverá aumento no count_executions nem um novo registro.

    • 6
  2. Best Answer
    John K. N.
    2022-02-19T00:17:43+08:002022-02-19T00:17:43+08:00

    Você pode querer considerar apenas o rastreamento de consultas que demoram mais do que um determinado período de tempo usando o recurso Extended Events (Quick Start Extended Events) fornecido com a versão mais recente do SQL Server.

    Vamos criar um Evento Estendido para você que capture instruções que sejam executadas por mais de 60 segundos (apenas um exemplo).

    Navegue até os eventos estendidos no SSMS

    Instância do SQL Server |  Gestão |  Eventos Estendidos |  Sessões

    Aqui você pode clicar com o botão direito do mouse na ramificação Sessions para abrir o menu de contexto.

    Nova sessão...

    Nova sessão... item do menu de contexto

    Ao contrário da sessão marcada, usaremos a opção Nova Sessão... vazia .

    Introdução ao Assistente de Nova Sessão

    Caixa de diálogo de introdução do assistente de nova sessão

    Clique em Avançar >

    Assistente de Nova Sessão Definir Propriedades da Sessão

    Caixa de diálogo Propriedades da sessão do novo assistente de sessão

    Daremos um nome à sessão: Statement Duration > 1 Minute , depois clique na opção Start the event session at server startup , e depois clique em Next > ..

    Assistente de Nova Sessão Escolher Modelo

    Caixa de diálogo Escolher modelo do assistente de nova sessão

    Não usaremos um modelo padrão. Próximo >

    Assistente de Nova Sessão Selecionar Evento para Capturar

    Caixa de diálogo Selecionar evento para captura do assistente de nova sessão

    Usaremos apenas o evento sql_transaction e o moveremos para a direita com a seta > correspondente. Próximo > .

    Assistente de Nova Sessão Captura Campos Globais

    Caixa de diálogo Capturar Campos Globais do Assistente de Nova Sessão

    Vamos selecionar pelo menos o campo sql_text , mas adicionei mais alguns como:

    • client_app_name
    • client_hostname
    • nome do banco de dados
    • nt_username
    • plan_handle
    • consulta_hash
    • query_plan_hash
    • sql_text
    • nome de usuário

    ... e depois clique em Avançar > .

    Assistente de Nova Sessão Definir Filtros de Eventos de Sessão

    Caixa de diálogo Novo Assistente de Sessão Definir Filtros de Eventos de Sessão

    Vamos filtrar em sqlos.task_execution_time no momento e definir um valor de 6000 . Voltaremos a essa configuração para alterá-la para duração . Clique em Avançar > .

    Assistente de Nova Sessão Especificar Armazenamento de Dados de Sessão

    Caixa de diálogo Especificar armazenamento de dados de sessão do Assistente de nova sessão

    Aqui você especifica onde deseja armazenar os dados nos arquivos ou no destino do ring_bugger. Usaremos um arquivo por enquanto. Configure os valores adequados ao seu servidor e clique em Avançar > .

    New Session Wizard Summary

    Caixa de diálogo Resumo do Assistente de Nova Sessão

    Validate your configuration and click on Next >.

    New Session Wizard Create Event Session

    Caixa de diálogo Criar sessão de evento do assistente de nova sessão

    Select both options to have something running and then click on Next >.

    Extended Events | Sessions | Statement Duration > 1 Minute

    Eventos Estendidos |  Sessões |  Duração do extrato > 1 minuto de imagem

    You'll now have a new Extended Event and a windows displaying the current output of this Extended Event.

    Change Configuration

    Right-click the session and stop it. Right-click again and go into the properties:

    Propriedades da sessão

    Select the sql_transaction and then click on Configure >...

    Filtro de configuração das propriedades da sessão

    ...switch to the Filters tab and delete the current filter. Add a new filter with the values duration, greater than and 60000000 (microseconds).

    Click on OK and then start your session again in the Extended Events. You might have to select Watch Live Data again to have a current window open.

    Menu de contexto da sessão de evento estendida

    The Fun Part

    Now you have an Extended Event Session which will track statements that take longer than 60 seconds. Run a statement on that server with something like this:

    BEGIN TRAN
        UPDATE DemoDB.dbo.Tweets SET TweetText = 'something else' WHERE TweetID = 2;
        WAITFOR DELAY '00:02';
    COMMIT TRAN;
    

    After a minute you should see an event pop up in your Watch Live Data window in SSMS. It might look like this:

    Capturar dados da sessão ao vivo

    You can read the statement and with the plan_handle you can even go and query the sys.dm_exec_text_query_plan DMV to have a look at the execution plan:

    SELECT 
    CAST(query_plan AS XML) 
    FROM sys.dm_exec_text_query_plan(0x06000100C0187C0A601FD200D902000001000000000000000000000000000000000000000000000000000000,0,-1)
    

    Which shows:

    Conjunto de resultados da consulta

    Click on the XML link and voilà:

    Plano de Execução Gráfica

    This (in my example) execution plan can then be used to see if things are running ok, or if you might benefit from additional indexes or query tuning.

    Answering Your Question

    Is there any option to see killed sessions in Query Store?

    If the statement has run before, but didn't take longer than your timeout, then these queries might be found in the Query Store.

    If the statement terminates, because something changed, then maybe. It depends on the reason for the time-out.

    Create an Extended Event as described in my solution and instead of setting it to 30 minutes set the time-out to 29 minutes and 59 seconds, or use the filter value of 1799000000 microseconds.

    Agora você deve ser capaz de rastrear transações de longa duração no Live Data ou no arquivo que é criado.

    • 5

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