查看正在执行的sql

简介   大家都知道使用sp_who2这个命令来查看当前正在的执行的SQL语句的spids.但是显示的信息有限.比如,它只显示执行SELECT,DELETE,UPDATE等.看不到实际的sql命令.

知道正在执行哪条sql语句对于我们debug程序,找出哪些语句花费很长时间,或是哪些语句产生
堵塞来说非常重要.而且这个常用来查看存储过程执行到哪一步.执行到哪个语句.

所以我们需要一个比sp_who2更好的命令来做这些工作.
这个命令使用SQL的动态管理视图 Dynamic Management Views
(DMVs).所以只用执行在SQL2005或是
更高的版本上.

返回字段简介:

列名 类型 描述
spid smallint SQL Server process ID.
ecid smallint Econtext ID
dbid smallint 数据库ID
nt_username nchar(128) 用户名
status nchar(30) 状态
wait_type bigint 当前等待的 milliseconds.
Individual Query varchar 当前执行的SQL语句
Parent Query varchar 上层的SQL语句
program_name nchar(128) 程序名称
Hostname nchar(128) 主机名
nt_domain nchar(128) 域名
Start_time datetime 开始时间

CREATE PROC
[dbo].[dba_WhatSQLIsExecuting]
AS
/*--------------------------------------------------------------------
显示当前执行的SQL语句

----------------------------------------------------------------------
使用方法:
 1.
exec YourServerName.master.dbo.dba_WhatSQLIsExecuting

---------------------------------------------------------------------*/
BEGIN
   
-- Do not lock anything, and do not get held up by any locks.
    SET
TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    -- What SQL Statements Are
Currently Running?
    SELECT [Spid] = session_Id
, ecid
, [Database] =
DB_NAME(sp.dbid)
, [User] = nt_username
, [Status] = er.status
, [Wait]
= wait_type
, [Individual Query] = SUBSTRING (qt.text,
            
er.statement_start_offset/2,
(CASE WHEN er.statement_end_offset =
-1
       THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE
er.statement_end_offset END -
                               
er.statement_start_offset)/2)
,[Parent Query] = qt.text
, Program =
program_name
, Hostname
, nt_domain
, start_time
    FROM
sys.dm_exec_requests er
    INNER JOIN sys.sysprocesses sp ON er.session_id =
sp.spid
    CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt
    WHERE
session_Id > 50              -- Ignore system spids.
    AND session_Id
NOT IN (@@SPID)     -- Ignore this current statement.
    ORDER BY 1,
2
END

时间: 2024-07-30 19:21:30

查看正在执行的sql的相关文章

两种方式:mysql查看正在执行的sql语句

mysql查看正在执行的sql语句 2015年08月21日 17:32:59 阅读数:15398 有2个方法: 1.使用processlist,但是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到.好处是不用设置,不会保存. -- use information_schema; -- show processlist; 或者: -- select * from information_schema.`PROCESSLIST` where info is not null; 1

MySql使用show processlist查看正在执行的Sql语句

今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命令查看了当前正在执行的sql语句,从而定位到了对应的程序,发现代码中有一个死循环在不停的查询导致cpu占用99%,原因找到了问题就好解决了. 这里简单的记录一下processlist的用法: processlist 命令的输出结果显示了有哪些线程在运行,可以帮助识别出有问题的查询语句,两种方式使用这

Oracle查看正在执行的sql

1.查询Oracle正在执行的sql语句及执行该语句的用户 SELECT b.sid oracleID, b.username Oracle用户, b.serial#, spid 操作系统ID, paddr, sql_text 正在执行的SQL, b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c WHERE a.addr = b.paddr AND b.sql_hash_value = c.hash_value; 2.查看正在执行

查看正在执行的sql语句

;WITH t AS( SELECT [Spid] = session_Id, ecid, [Database] = DB_NAME(sp.dbid), [User] = nt_username, [Status] = er.status, [Wait] = wait_type, [Individual Query] = SUBSTRING(qt.text, er.statement_start_offset / 2, (CASE WHEN er.statement_end_offset = -

查看Mysql实时执行的Sql语句

最近给客户开发了基于Asp.Net mvc5 +Mysql+EF的项目,但是在EF里无法看到Mysql执行的语句 之前也找到一些监控Mysql的软件但一直没有用起来,现在又遇到了问题即在EF里Mysal的查询没有结果而在Mysql里没有问题 因为不知道EF生成的Mysql语句所以不知道是不是Sql的问题于是决定必须解决此问题 通过半天时间的努力解决了此问题,其实很简单即开启Mysql的Log功能,那么Mysql的执行语句都会写到Log文件里 然后通过BareTail这个专门查看Log文件的工具即

查看Oracle执行计划的几种常用方法-系列1

SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向. 执行计划的定义:执行目标SQL的所有步骤的组合. 我们首先列出查看执行计划的一些常用方法: 1. explain plan命令 PL/SQL Developer中通过快捷键F5就可以查看目标SQL的执行计划了.但其实按下F5后,实际后台调用的就是explain plan命令,相当于封装了该命令. explain plan

查看ORACLE执行计划的几种常用方法

SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向. 执行计划的定义:执行目标SQL的所有步骤的组合. 我们首先列出查看执行计划的一些常用方法: 1. explain plan命令 PL/SQL Developer中通过快捷键F5就可以查看目标SQL的执行计划了.但其实按下F5后,实际后台调用的就是explain plan命令,相当于封装了该命令. explain plan

Sql Server 查看当前正在执行的Sql 语句

查看Sql Server 当前正在执行的Sql 语句,可以使用 sys.sysprocesses 或 sys.dm_exec_requests,由于sys.sysprocesses是为了向后兼容而保留的,所以,推荐使用DMV:sys.dm_exec_requests 一,使用sys.sysprocesses Contains information about processes that are running on an instance of SQL Server. These proce

如何查看PostgreSQL正在执行的SQL

SELECT      procpid,      start,      now() - start AS lap,      current_query  FROM      (SELECT          backendid,          pg_stat_get_backend_pid(S.backendid) AS procpid,          pg_stat_get_backend_activity_start(S.backendid) AS start,