Jump to content
msoares

Retorna User, Query, tempo inicio e fim da execução da query

Recommended Posts

Pessoal, boa tarde.

 

Preciso da ajuda para compreender um select que estou fazendo.

 

A consulta é simples, porém estou iniciando na área de SQL a pouco tempo, eu quero trazer todas as consultar executadas no banco por determinado usuário, inicio da execução da consulta e tempo que ficou executando. Segue meu código abaixo, o problema é que ele retorna o usuário e query diferente de outro código que tenho.

 

Primeira query, (não consegui colocar os usuário):

SELECT
--US.HOSTNAME,
--US.NT_USERNAME,
--US.PROGRAM_NAME,
--US.sql_handle US,
DB_NAME(D.dbid) AS BANCO,
t.[text], 
s.last_execution_time,
CONVERT(VARCHAR(12), CONVERT(time, DATEADD(ms, S.TOTAL_WORKER_TIME / 1000000 * 1000, 0)),114) AS TEMPO_TOTAL_EXECUTANDO,
CONVERT(VARCHAR(12), CONVERT(time, DATEADD(ms, S.TOTAL_ELAPSED_TIME / 1000000 * 1000, 0)),114),
S.TOTAL_ROWS
FROM sys.dm_exec_cached_plans AS p
INNER JOIN sys.dm_exec_query_stats AS s
   ON p.plan_handle = s.plan_handle
CROSS APPLY sys.dm_exec_sql_text(p.plan_handle) AS t
CROSS APPLY sys.dm_exec_sql_text(S.sql_handle) AS D
--LEFT JOIN sys.sysprocesses US ON US.sql_handle = S.sql_handle
WHERE s.last_execution_time >= '2018-01-17 18:00:00.000' AND s.last_execution_time <= '2018-01-18'
ORDER BY s.last_execution_time

 

 

Segunda Query (Peguei na net e adicionei o que eu precisava, porém as querys e user estão diferentes).

 

SELECT
--sp.host_name AS HOST_USER,
--sp.login_name AS NOME_USUARIO,
T.[text] AS QUERY, 
S.last_execution_time AS INICIO_EXECUCAO,
CONVERT(VARCHAR(12), CONVERT(time, DATEADD(ms, S.TOTAL_WORKER_TIME / 1000000 * 1000, 0)),114) AS TEMPO_TOTAL_EXECUTANDO,
CONVERT(VARCHAR(12), CONVERT(time, DATEADD(ms, S.TOTAL_ELAPSED_TIME / 1000000 * 1000, 0)),114) AS TOTAL_ELAPSED,
S.TOTAL_ROWS
FROM sys.dm_exec_requests ER 
INNER JOIN 
   sys.dm_exec_sessions SP ON er.session_id = sp.session_id
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle) as T
CROSS APPLY sys.dm_exec_query_stats AS S
--CROSS APPLY sys.dm_exec_query_plan(er.plan_handle) p
--CROSS APPLY sys.dm_exec_text_query_plan(s.plan_handle, s.statement_start_offset, s.statement_end_offset) as qp
--where sp.session_Id NOT IN (@@SPID)
WHERE s.last_execution_time >= '2018-01-17 18:00:00.000' AND s.last_execution_time <= '2018-01-18'
AND T.[text] <> 'sp_server_diagnostics'
ORDER BY S.last_execution_time


 

 

Valew galera.

 

Share this post


Link to post
Share on other sites

Minha sugestão é que você dê uma olhada na documentação da versão que você utiliza,  e olhe os retornos das DMVs que você deseja utilizar, acho que vai ficar mais simples na hora de fazer a query.

 

Pelo que entendi ou está faltando alguma DMV na query ou está faltando algum campo nos relacionamentos, por isso recomendo que você avalie cada uma delas ( sys.dm_exec_requests, sys.dm_exec_sessions,  sys.dm_exec_sql_text  e  sys.dm_exec_query_stats) na documentação que está disponível no endereço: https://docs.microsoft.com/pt-br/sql/relational-databases/system-dynamic-management-views/execution-related-dynamic-management-views-and-functions-transact-sql?view=sql-server-2017

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By DinhoPHP
      Olá!
      Alguém pode me dar uma luz sobre fazer um ORDER BY, hora ASC ou hora DESC? Por favor! Estou utilizando PHP e JS no projeto.
       
      $pegadados = $pdo->prepare("SELECT * FROM produtos WHERE categoria LIKE '%$dataSearch%' OR marca LIKE '%$dataSearch%' OR produto LIKE '%$dataSearch%' OR modelo LIKE '%$dataSearch%' OR descricao LIKE '%$dataSearch%' ORDER BY $filter $filter2");
    • By DinhoPHP
      Olá!
      Alguém pode me dar uma luz sobre fazer um ORDER BY, hora ASC ou hora DESC? Por favor! Estou utilizando PHP e JS no projeto.
       
      $pegadados = $pdo->prepare("SELECT * FROM produtos WHERE categoria LIKE '%$dataSearch%' OR marca LIKE '%$dataSearch%' OR produto LIKE '%$dataSearch%' OR modelo LIKE '%$dataSearch%' OR descricao LIKE '%$dataSearch%' ORDER BY $filter $filter2");
    • By Webster Moitinho
      Estou tentando fazer o controle de acesso do meu site. Para tanto criei duas tabelas:
      Stat (Armazena cada sessao dos usuários
      Estrutura da tabela `stat`
      CREATE TABLE `stat` ( `id_stat` int(11) NOT NULL, `navegador` varchar(85) NOT NULL, `usuario` int(11) NOT NULL, `cep` varchar(7) NOT NULL, `ip_visitante` varchar(15) NOT NULL, `sessao` varchar(72) NOT NULL, `pais` varchar(30) NOT NULL, `estado` varchar(30) NOT NULL, `cidade` varchar(50) NOT NULL, `latitude` decimal(11,5) NOT NULL, `longitude` decimal(11,5) NOT NULL, `ip_meuservidor` varchar(72) NOT NULL, `hora_req` time NOT NULL, `origem` varchar(175) NOT NULL, `idioma` varchar(50) NOT NULL, `SERVER_ADMIN` varchar(90) NOT NULL, `servidor` varchar(90) NOT NULL, `visitada` longtext CHARACTER SET utf8 NOT NULL, `registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- Indexes for table `stat` ALTER TABLE `stat` ADD PRIMARY KEY (`id_stat`); -- AUTO_INCREMENT for table `stat` ALTER TABLE `stat` MODIFY `id_stat` int(11) NOT NULL AUTO_INCREMENT; sub_stat (Para armazenar as páginas visitadas e as interações com o cliente:
      CREATE TABLE `sub_stat` ( `id_substat` int(11) NOT NULL, `sessao` varchar(72) NOT NULL, `hora_req` time NOT NULL, `origem` varchar(85) NOT NULL, `visitada` varchar(85) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- Indexes for table `sub_stat` ALTER TABLE `sub_stat` ADD PRIMARY KEY (`id_substat`); -- AUTO_INCREMENT for table `sub_stat` ALTER TABLE `sub_stat` MODIFY `id_substat` int(11) NOT NULL AUTO_INCREMENT; O desejado portanto, seria que quando o usuário entrasse na página, o script localizasse a sessão do usuário, buscaria a sessão na tabela stat, caso não existisse, iria inserir o registro tanto na tabela stat, quanto na tabela sub_stat. Se existisse a sessão na tabela stat, então somente haveria inserção dos registros na tabela sub_stat. Eu não estou conseguindo executar a segunda consulta, que vai popular a tabela sub_stat.
       
      Meu código está assim:
       
      $sql = "SELECT sessao FROM stat WHERE sessao = '$sessao'"; $prepara = $PDO->prepare( $sql ); $prepara->execute(); $login_check = $prepara->rowCount(); if($login_check < 1){ $sql = "INSERT INTO `stat` (`id_stat`, `navegador`, `usuario`, `cep`, `ip_visitante`, `sessao`, `pais`, `estado`, `cidade`, `latitude`, `longitude`, `ip_meuservidor`, `hora_req`, `origem`, `idioma`, `servidor`, `visitada`, `registro`) VALUES (NULL, '$navegador', '$usuario', '$cep', '$meuip', '$sessao', '$pais', '$estado', '$cidade', '$lat', '$long', '$ip', '$hora_req', '$origem', '$idioma', '$servidor', '$visitada', '$registro')"; $compile = $PDO->prepare($sql); $vai = $compile->execute(); $sql2 = "INSERT INTO `sub_stat` (`id_substat`, `sessao`, `hora_req`, `origem`, `visitada`) VALUES (NULL, '$sessao', '$hora_req', '$origem', '$visitada'"; $compile2 = $PDO->prepare($sql2); $vai = $compile2->execute(); } else { $sql = "INSERT INTO `sub_stat` (`id_substat`, `sessao`, `hora_req`, `origem`, `visitada`) VALUES (NULL, '$sessao', '$hora_req', '$origem', '$visitada'"; $compile = $PDO->prepare($sql); $vai = $compile->execute(); }  
    • By Pedro Batista Lopes
      Olá pessoal alguém pode me ajudar estou com uma duvida, espero que vocês consigam me ajudar,
      Faço uma busca no banco de dados com mysql, depois faço um laço de repetição foreach e pego os dados do banco e jogo em uma tabel, 
      gostaria de que um campo desse laço se repetisse varias vezes.
      No banco ele pegas as informações de nota fiscal, cliente,nome do cliente e a soma das notas por um período de tempo,
      gostaria que repetisse esse período, que no caso é um ano de janeiro a dezembro.
      segue o codigo.
      </form> <?php $dataIncio = $_POST['data-ini']; $dataFim = $_POST['data-fim']; $dataIncio = date('d/m/Y', strtotime($dataIncio)); $dataFim = date('d/m/Y', strtotime($dataFim)); $buscaNotas = $db->prepare("select a.empresa, a.cliente, b.nom_cliente, e.cod_uni_feder, d.cod_repres, b.cod_tip_cli, count(a.nota_fiscal) as QTD_MES from fat_nf_mestre a join clientes b on (b.cod_cliente = a.cliente) join fat_nf_item c on (c.empresa = a.empresa and c.trans_nota_fiscal = a.trans_nota_fiscal) join pedidos d on (d.cod_empresa = c.empresa and d.num_pedido = c.pedido) join cidades e on (e.cod_cidade = b.cod_cidade) where a.empresa = '10' and dat_hor_emissao between EXTEND(MDY(01,01,2019)) and EXTEND(MDY(01,30,2019)) // esse é o campo que gostaria que repetisse a data está ///01/01/2019 a 01/30/2019 gostaria de um jeito para mudar 01/02//2019 a 30/02/2019 assim por diante. and d.cod_tip_carteira = '1' --and b.nom_cliente = 'MAGAZINE LUIZA S/A' --and b.cod_cliente = '047960950075482' and c.seq_item_nf = '1' and a.sit_nota_fiscal <> 'C' group by 1,2,3,4,5,6"); $buscaNotas->execute(); $linha = $buscaNotas->fetchAll(PDO::FETCH_ASSOC); ?> <table border="1px solid black" class="table col-sm-12 table-striped table-hover"> <thead class="thead-dark "> <tr> <th>Empresa</th> <th>Cliente</th> <th>Nome do cliente</th> <th>Uni_Feder</th> <th>Codigo Representante</th> <th>Cod_tipo_cli</th> <th>janeiro</th>// aqui eu faria janeiro, feveiro, março, abril.....até dezembro <th>Fevereiro</th> </tr> </thead> <?php foreach ($linha as $listar) { ?> <tr> <td><?= $listar['empresa'];?></td> <td><?=$listar['cliente']; ?></td> <td><?=$listar['nom_cliente']; ?></td> <td><?=$listar['cod_uni_feder']; ?></td> <td><?=$listar['cod_repres']; ?></td> <td><?=$listar['cod_tip_cli']; ?></td> <td><?=$listar['qtd_mes']; ?></td> // aqui é a saida onde queria que saisse o restante dos dados. </tr> <?php } ?> </table> <?php   
    • By vdso
      Bom dia! Sou novo aqui no forum e tambem estou iniciando com sql, onde trabalho preciso encontrar uma determinada tabela e me falaram para procurar no dicionário de dados, como faço isso?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.