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 / 207684
Accepted
Del Lee
Del Lee
Asked: 2018-05-24 17:54:19 +0800 CST2018-05-24 17:54:19 +0800 CST 2018-05-24 17:54:19 +0800 CST

De onde vem essa consulta?

  • 772

Habilitei o Query Store no SQL 2017 e estou vendo uma consulta que está ocorrendo com frequência SELECT *em uma tabela específica.

Eu gostaria de restringir de onde esta solicitação está vindo e ver se podemos encontrar uma maneira melhor do que fazer o SELECT *.

Eu tenho um id de consulta, é claro, do Query Store. Recentemente, também pedi aos meus desenvolvedores que incluíssem o Nome do Aplicativo em suas cadeias de conexão, o que muitos fizeram.

Existe uma maneira (talvez usando um DMV, por exemplo) que eu possa descobrir o Nome do Aplicativo associado a esta consulta?

sql-server-2017 query-store
  • 1 1 respostas
  • 755 Views

1 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2018-05-25T12:37:46+08:002018-05-25T12:37:46+08:00

    Consulte as DMVs do repositório de consultas para o hash de consulta e, em seguida, use esse hash de consulta em uma sessão de eventos estendidos para capturar os detalhes pertinentes.

    Isso deve levá-lo até lá:

    SELECT qsq.query_hash
        , qsqt.query_sql_text
    FROM sys.query_store_query qsq
        INNER JOIN sys.query_store_query_text qsqt ON qsq.query_text_id = qsqt.query_text_id
    WHERE qsqt.query_sql_text LIKE '%some-pertinent-SQL%';
    

    Na consulta acima, eu tenho LIKE '%some-pertinent-SQL%'- isso limita os resultados da consulta para corresponder ao destino que você procura - você precisa substituir some-pertinent-SQLpor uma parte exclusiva da sua consulta de destino.

    Use o valor da query_hashcoluna retornada acima na definição da sessão Extended Events:

    CREATE EVENT SESSION [t] ON SERVER 
    ADD EVENT sqlserver.sql_statement_completed(
        ACTION(sqlserver.client_app_name
        , sqlserver.client_hostname
        , sqlserver.nt_username
        , sqlserver.plan_handle
        , sqlserver.query_hash)
        WHERE ([sqlserver].[query_hash]=(0x00000000))
        )
    ADD TARGET package0.ring_buffer
    WITH (STARTUP_STATE=OFF);
    GO
    

    Substitua o 0x00000000pelo valor de hash da consulta real.

    Inicie a sessão de Eventos Estendidos com:

    ALTER EVENT SESSION [t] ON SERVER 
    STATE = START;
    

    Clique com o botão direito do mouse na sessão Extended Events no Object Explorer para ver detalhes sobre o nome do host do cliente, nome de usuário, etc., para consultas à medida que elas acontecem.

    insira a descrição da imagem aqui

    Para testar isso, executei o seguinte código na minha instância de teste do SQL Server 2016:

    CREATE DATABASE QueryStoreTest
    ON PRIMARY 
    (
          NAME = QueryStoreTest_primary
        , FILENAME = 'C:\temp\QueryStoreTest_primary.mdf'
        , SIZE = 100MB
        , FILEGROWTH = 100MB
        , MAXSIZE = 1000MB
    )
    LOG ON 
    (
          NAME = QueryStoreTest_log
        , FILENAME = 'C:\temp\QueryStoreTest_log.ldf'
        , SIZE = 100MB
        , FILEGROWTH = 100MB
        , MAXSIZE = 1000MB
    );
    GO
    ALTER DATABASE QueryStoreTest 
    SET QUERY_STORE = ON;
    

    Aqui, criarei alguns objetos no banco de dados QueryStoreTest e uma consulta de teste:

    USE QueryStoreTest;
    CREATE TABLE dbo.qst
    (
        id int NOT NULL
            PRIMARY KEY CLUSTERED
            IDENTITY(1,1)
    );
    
    CREATE TABLE dbo.qst2
    (
        id int NOT NULL
            PRIMARY KEY CLUSTERED
            IDENTITY(1,1)
    );
    
    SELECT *
    /*  test query store query  */
    FROM dbo.qst
        LEFT MERGE JOIN dbo.qst2 on qst.id = qst2.id;
    

    Aqui, obterei o hash de consulta do repositório de consultas:

    SELECT qsq.query_hash
        , qsqt.query_sql_text
    FROM sys.query_store_query qsq
        INNER JOIN sys.query_store_query_text qsqt ON qsq.query_text_id = qsqt.query_text_id
    WHERE qsqt.query_sql_text LIKE '%test query store query%';
    

    Resultados:

    ╔════════════════════╦════════════════════════════ ════════════════════════════╗
    ║ query_hash ║ query_sql_text ║
    ╠════════════════════╬════════════════════════════ ════════════════════════════╣
    ║ 0x3A0100223AD74766 ║ SELECT * /* test query store query */ FROM dbo.qst ║
    ║ ║ LEFT MERGE JOIN dbo.qst2 em qst.id = qst2.id ║
    ╚════════════════════╩════════════════════════════ ════════════════════════════╝
    

    Agora, vou criar a Sessão de Eventos Estendidos:

    CREATE EVENT SESSION [t] ON SERVER 
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION (
              sqlserver.client_app_name
            , sqlserver.client_hostname
            , sqlserver.nt_username
            , sqlserver.plan_handle
            , sqlserver.query_hash
        )
        WHERE ([sqlserver].[query_hash]=(0x3A0100223AD74766))
    )
    ADD TARGET package0.ring_buffer
    WITH (STARTUP_STATE=OFF)
    GO
    

    E inicie a sessão:

    ALTER EVENT SESSION [t] ON SERVER 
    STATE = START;
    

    Agora, se eu executar a consulta de teste e observar os dados ativos da sessão, vejo:

    insira a descrição da imagem aqui

    Limpar:

    USE master;
    GO
    ALTER EVENT SESSION [t] ON SERVER 
    STATE = STOP;
    GO
    DROP EVENT SESSION [t] ON SERVER;
    GO
    ALTER DATABASE QueryStoreTest SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE QueryStoreTest;
    
    • 6

relate perguntas

  • SQL Server Query Store - O que é considerado uma consulta 'ad-hoc'?

  • SQL Server 2017: como funciona o feedback de concessão de memória no modo de lote?

  • SQL Server 2017: como funcionam as associações adaptativas do modo de lote?

  • Não consigo acessar nenhum diagrama de banco de dados

  • Não é possível iniciar o SQL Server no Ubuntu 16.04

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