DBA工具——DMV——如何知道TSQL语句已运行了多久

原文:DBA工具——DMV——如何知道TSQL语句已运行了多久

DBA通常想知道正在运行的语句已经执行了多久了?可以使用Sqlserver profiler来捕获语句的开始时间,和现有时间比较,但是在生产环境下通常会对性能有负面影响,所以通常不建议在非必要的前提下在生产环境使用SQL Server Profiler。

此时,可以使用DMV来查询:

sys.dm_exec_requests中有一个重要字段:start_time,表示request的开始时间,一个批处理就是一个request,一个request对应一个task,如果批处理是并发,则对应多个tasks。下面脚本不考虑并发情况。在DMV中的sys.dm_os_workers里面有一个字段task_bound_ms_ticks表示线程(worker)拿到task的时间(单位是tick)。

由于sys.dm_exec_requests没有包含语句文本,所以需要借助sys.dm_exec_sql_text转换sql_handle而得到。然后从sys.dm_exec_query_plan得到执行计划。还输出正在执行的哪一句具体的stmt。这对于一个批处理包含多条语句时特别有用:

DECLARE @ms_per_tick DECIMAL(10, 6)
 --millisecond per tick
SELECT  @ms_per_tick = 1.0 * DATEDIFF(millisecond, sqlserver_start_time,
                                      GETDATE()) / ( ms_ticks
                                                     - sqlserver_start_time_ms_ticks )
FROM    sys.[dm_os_sys_info] ;

--select @ms_per_tick

SELECT  req.session_id ,
        req.start_time request_start_time ,
        ( ( SELECT  ms_ticks
            FROM    sys.dm_os_sys_info
          ) - workers.task_bound_ms_ticks ) * @ms_per_tick ‘ms_since_task_bound‘ ,
        DATEDIFF(ms, req.start_time, GETDATE()) ‘ms_since_request_start‘ ,
        tasks.task_state ,
        workers.state worker_state ,
        req.status request_state ,
        st.text ,
        SUBSTRING(st.text, ( req.statement_start_offset / 2 ) + 1,
                  ( ( CASE req.statement_end_offset
                        WHEN -1 THEN DATALENGTH(st.text)
                        ELSE req.statement_end_offset
                      END - req.statement_start_offset ) / 2 ) + 1) AS stmt ,
        qp.query_plan ,
        req.*
FROM    sys.dm_exec_requests req
        LEFT JOIN sys.dm_os_tasks tasks ON tasks.task_address = req.task_address
        LEFT JOIN sys.dm_os_workers workers ON tasks.task_address = workers.task_address
        CROSS APPLY sys.dm_exec_sql_text(req.sql_handle) st
        CROSS APPLY sys.dm_exec_query_plan(req.plan_handle) qp
WHERE   ( req.session_id > 50
          OR req.session_id IS NULL
        )

go

上面的@ms_per_tick用来计算一个tick相当与多少ms(毫秒),一般一个tick基本就是一毫秒。输出如下:

时间: 2024-10-08 00:42:10

DBA工具——DMV——如何知道TSQL语句已运行了多久的相关文章

如何知道TSQL语句已经运行了多久

如何知道TSQL语句已经运行了多久 declare @ms_per_tick decimal(10,6) --millisecond per tick SELECT @ms_per_tick=1.0*datediff(millisecond,sqlserver_start_time ,getdate())/(ms_ticks-sqlserver_start_time_ms_ticks) FROM sys.[dm_os_sys_info]; --SELECT @ms_per_tick select

DBA工具——DMV——通过sys.dm_exec_procedure_stats查看存储过程执行信息

原文:DBA工具--DMV--通过sys.dm_exec_procedure_stats查看存储过程执行信息 对于DBA来说,经常要手机存储过程的某些信息: 执行了多少次 执行的执行计划如何 执行的平均读写如何 执行平均需要多少时间 列名 数据类型 说明 database_id int 存储过程所在的数据库 ID. object_id int 存储过程的对象标识号. type char(2) 对象的类型: P = SQL 存储过程 PC = 程序集 (CLR) 存储过程 X = 扩展存储过程 t

测量TSQL语句的性能

你怎样确定你的应用程序执行的怎么样?你可以使用什么工具?每一个开发人员需要确定每一条应用程序TSQL语句是最优的.通过调整每一个查询你可以确定你的应用程序运行得尽可能的高效.你使用开发环境时更容易对应用程序的代码进行修改.一旦你的代码已成为了产品那么要做修改以优化你的代码就可能需要很长的时间,或甚至是不可能的.这就是为什么你需要在应用程序开发过程中定期检查你的应用程序代码的执行情况.本篇文章将讲述关于怎样确定运行较慢的查询的一些不同方法,并提供给你一些小技巧用于在你反复修改每一个查询来试图改进性

SQL sever T-SQL语句

一.创建/删除数据库.表 create database 数据库名     --创建数据库  大小写不限制  --为注释符   可以选中该行点执行  只执行该行命令 drop database 数据库名   --删除数据库  很少使用 go     --官方说法是:GO只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志.可以理解为一个.sql文件的结束标记,先执行此标记上面的内容,再执行下面的内容. use 数据库名     --使用该数据库 一下操作都在该数据库内进行

精妙T-SQL语句收集

SQL语句收集 1.查看SQL Server版本 SELECT SERVERPROPERTY('productversion') SELECT SERVERPROPERTY('productlevel') SELECT SERVERPROPERTY('edition') SELECT @@VERSION 2.查询Proc或是View内容 proc: select name,textfrom  sys.procedures a,sys.syscomments b where a.object_id

使用T-SQL语句插入、更新、删除数据表

在对数据进行管理时,使用SSMS进行数据维护有可视化.方便的优点,但是在批量维护或重复维护时,使用SSMS就不方便了,还容易出错,这就需要编写SQL语句对数据库进行维护 SQL和T-SQL SQL是Structured Query Language的缩写,即结构化查询语言,是关系数据库的标准语言.如今Oracle.Sybase.Informix.SQL Server这些大型数据库管理系统都支持SQL作为查询语言 T-SQL是SQL的加强版,除了标准的SQL命令外,还支持类似于程序语言的基本功能,

数据库表的管理(使用T-SQL语句)

使用T-SQL语句操作数据表使用SQL Server Managenment 中对数据进行插入,更新或者删除比较简单.除此外,使用T-SQL语句实现表数据的插入,更新和删除等操作. 1.插入数据INSERT语法格式如下INSTER [INTO] <表名> [列名] VALUES <列表值>其中:[INTO]是可选的,可以省略.表名是必须的,而表的列是可选的.多个列名和多个值列表用逗号分隔. 2.更新数据UPDATE语法格式如下UPDATE <表名> SET <列名

SQL 数据库T-SQL语句查询

         SQL 数据库T-SQL语句查询 附加数据库的数据文件 查询表中种类是水果的出厂日期在201-04-01之后的 查询所有种类的总成本 以倒序的方式查询表中水果的成本 查询种类是蔬菜的并且价格在1-5之间 将product表中的名称,种类,出厂日期的数据保存在另一个名为product_new的表中,并查看 在products表和sales表中查询产品的名称.种类.成本.销售地点和销售价格. 在products表和sales表中查询销往海南的产品名称.种类.成本和销售价格. 查询年

SQL Server 2012笔记分享-46:如何快速学习T-SQL语句

对于初学者来说,T-SQL语句的编写一直是个难题,初学者还是习惯使用图形界面来做相关的SQL方面的维护工作.但是在一个稍微复杂大型的SQL场景中,如果我们能够快速的掌握和理解SQL语句的编写和使用,那么会使我们的运维工作达到事半功倍的效果. 其实对于SQL server 2012来说,本身就提供了很多途径来帮助初学者获取日常管理任务的对应T-SQL脚本.下面我们来举几个快速获取T-SQL脚本的例子. ================================================