检测Sql Server服务器SQL语句执行情况

1、查找目前SQL Server所执行的SQL语法,并展示资源情况:

SQL code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

SELECT  s2.dbid ,

         DB_NAME(s2.dbid) AS [数据库名] ,

         --s1.sql_handle ,

         SELECT TOP 1

                     SUBSTRING(s2.text, statement_start_offset / 2 + 1,

                               ( ( CASE WHEN statement_end_offset = -1

                                        THEN ( LEN(CONVERT(NVARCHAR(MAX), s2.text))

                                               * 2 )

                                        ELSE statement_end_offset

                                   END ) - statement_start_offset ) / 2 + 1)

         AS [语句] ,

         execution_count AS [执行次数] ,

         last_execution_time AS [上次开始执行计划的时间] ,

         total_worker_time AS [自编译以来执行所用的 CPU 时间总量(微秒)] ,

         last_worker_time AS [上次执行计划所用的 CPU 时间(微秒)] ,

         min_worker_time AS [单次执行期间曾占用的最小 CPU 时间(微秒)] ,

         max_worker_time AS [单次执行期间曾占用的最大 CPU 时间(微秒)] ,

         total_logical_reads AS [总逻辑读] ,

         last_logical_reads AS [上次逻辑读] ,

         min_logical_reads AS [最少逻辑读] ,

         max_logical_reads AS [最大逻辑读] ,

         total_logical_writes AS [总逻辑写] ,

         last_logical_writes AS [上次逻辑写] ,

         min_logical_writes AS [最小逻辑写] ,

         max_logical_writes AS [最大逻辑写]

 FROM    sys.dm_exec_query_stats AS s1

         CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2

 WHERE   s2.objectid IS NULL

 ORDER BY last_worker_time DESC

2、展示耗时查询:

SQL code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

-- List expensive queries 

 DECLARE @MinExecutions int

 SET @MinExecutions = 5 

  

 SELECT EQS.total_worker_time AS TotalWorkerTime 

       ,EQS.total_logical_reads + EQS.total_logical_writes AS TotalLogicalIO 

       ,EQS.execution_count As ExeCnt 

       ,EQS.last_execution_time AS LastUsage 

       ,EQS.total_worker_time / EQS.execution_count as AvgCPUTimeMiS 

       ,(EQS.total_logical_reads + EQS.total_logical_writes) / EQS.execution_count  

        AS AvgLogicalIO 

       ,DB.name AS DatabaseName 

       ,SUBSTRING(EST.text 

                 ,1 + EQS.statement_start_offset / 2 

                 ,(CASE WHEN EQS.statement_end_offset = -1  

                        THEN LEN(convert(nvarchar(max), EST.text)) * 2  

                        ELSE EQS.statement_end_offset END

                  - EQS.statement_start_offset) / 2 

                 AS SqlStatement 

       -- Optional with Query plan; remove comment to show, but then the query takes !!much longer time!! 

       --,EQP.[query_plan] AS [QueryPlan] 

 FROM sys.dm_exec_query_stats AS EQS 

      CROSS APPLY sys.dm_exec_sql_text(EQS.sql_handle) AS EST 

      CROSS APPLY sys.dm_exec_query_plan(EQS.plan_handle) AS EQP 

      LEFT JOIN sys.databases AS DB 

          ON EST.dbid = DB.database_id      

 WHERE EQS.execution_count > @MinExecutions 

       AND EQS.last_execution_time > DATEDIFF(MONTH, -1, GETDATE()) 

 ORDER BY AvgLogicalIo DESC

         ,AvgCPUTimeMiS DESC

3、当前进程及其语句:

SQL code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

-- Current processes and their SQL statements 

 SELECT PRO.loginame AS LoginName 

       ,DB.name AS DatabaseName 

       ,PRO.[status] as ProcessStatus 

       ,PRO.cmd AS Command 

       ,PRO.last_batch AS LastBatch 

       ,PRO.cpu AS Cpu 

       ,PRO.physical_io AS PhysicalIo 

       ,SES.row_count AS [RowCount] 

       ,STM.[text] AS SQLStatement 

 FROM sys.sysprocesses AS PRO 

      INNER JOIN sys.databases AS DB 

          ON PRO.dbid = DB.database_id 

      INNER JOIN sys.dm_exec_sessions AS SES 

         ON PRO.spid = SES.session_id 

      CROSS APPLY sys.dm_exec_sql_text(PRO.sql_handle) AS STM      

 WHERE PRO.spid >= 50  -- Exclude system processes 

 ORDER BY PRO.physical_io DESC

         ,PRO.cpu DESC;

4、存储过程执行情况:

SQL code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

-- Stored Procedure Execution Statistics 

 SELECT ISNULL(DBS.name‘‘AS DatabaseName 

       ,OBJECT_NAME(EPS.object_id, EPS.database_id) AS ObjectName 

       ,EPS.cached_time AS CachedTime 

       ,EPS.last_elapsed_time AS LastElapsedTime 

       ,EPS.execution_count AS ExecutionCount 

       ,EPS.total_worker_time / EPS.execution_count AS AvgWorkerTime 

       ,EPS.total_elapsed_time / EPS.execution_count AS AvgElapsedTime 

       ,(EPS.total_logical_reads + EPS.total_logical_writes) 

        / EPS.execution_count AS AvgLogicalIO 

 FROM sys.dm_exec_procedure_stats AS EPS 

      LEFT JOIN sys.databases AS DBS 

          ON EPS.database_id = DBS.database_id 

 ORDER BY AvgWorkerTime DESC;

5、开销较大的查询:

SQL code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/*

 开销较大的查询

 */

 SELECT  ss.SUM_execution_count ,

         t.text ,

         ss.SUM_total_elapsed_time ,

         ss.sum_total_worker_time ,

         ss.sum_total_logical_reads ,

         ss.sum_total_logical_writes

 FROM    SELECT    S.plan_handle ,

                     SUM(s.execution_count) SUM_Execution_count ,

                     SUM(s.total_elapsed_time) SUM_total_elapsed_time ,

                     SUM(s.total_worker_time) SUM_total_worker_time ,

                     SUM(s.total_logical_reads) SUM_total_logical_reads ,

                     SUM(s.total_logical_writes) SUM_total_logical_writes

           FROM      sys.dm_exec_query_stats s

           GROUP BY  S.plan_handle

         AS ss

         CROSS APPLY sys.dm_exec_sql_text(ss.plan_handle) t

 ORDER BY sum_total_logical_reads DESC

6, 查询某个SPID,session_id对应的执行sql.

SQL code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

select er.session_id, cast(csql.text AS varchar(255)) AS CallingSQL

from master.sys.dm_exec_requests er WITH (NOLOCK)

CROSS APPLY fn_get_sql (er.sql_handle) csql

where er.session_id =309

至尊箭神:http://www.zhizunjianshen.com/

时间: 2024-10-29 05:02:53

检测Sql Server服务器SQL语句执行情况的相关文章

Sql server的Merge语句,源表中如果有重复数据会导致执行报错

用过sql server的Merge语句的开发人员都应该很清楚Merge用来做表数据的插入/更新是非常方便的,但是其中有一个问题值得关注,那就是Merge语句中的源表中不能出现重复的数据,我们举例来说明这个问题. 现在我们有一张表叫T_Class_A,其建表语句如下: CREATE TABLE [dbo].[T_Class_A]( [ID] [int] IDENTITY(1,1) NOT NULL, [ClassName] [nvarchar](50) NULL, [StudentTotalCo

sql server中如何查看执行效率不高的语句

sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考. 在测量功能时,先以下命令清除sql server的缓存 dbcc freeProcCache 在点击某个按钮,执行完后,再执行下面语句,就可以知道系统运行什么Sql和多少次了,其主要慢语句是那些了; SELECT creation_time  N'语句编译时间'         ,last_execution_time  N'上次执行时间'

[SQL] sql server中如何查看执行效率不高的语句

sql server中,如果想知道有哪些语句是执行效率不高的,应该如何查看呢?下面就将为您介绍sql server中如何查看执行效率不高的语句,供您参考.在测量功能时,先以下命令清除sql server的缓存 dbcc freeProcCache 在点击某个按钮,执行完后,再执行下面语句,就可以知道系统运行什么Sql和多少次了,其主要慢语句是那些了; SELECT creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,total_phys

SQL SERVER 一个SQL语句的执行顺序

原文:SQL SERVER 一个SQL语句的执行顺序 一个SQL 语句的执行顺序 1.From (告诉程序 来自哪张表  如果是表表达式 依旧是如此顺序) 2.Where(条件筛选  谓词筛选 ) 3.Group by(分组) 4.Having(分组  谓词筛选 ) 5.Select (表达式) 6.表达式(开窗函数 聚合函数 等等) 7.Distinct(去重复) 8.ORDER BY 9.TOP/OFFSET-FETCH 原文地址:https://www.cnblogs.com/lonely

SQL Server服务器名称与默认实例名不一致的修复方法

SQL Server服务器名称与默认实例名不一致的修复方法 分类: 个人累积 SQl SERVER 数据库复制2011-08-10 09:49 10157人阅读 评论(0) 收藏 举报 sql server服务器sqlservermicrosoftserver远程连接 [sql] view plaincopy --原因分析: --SERVERPROPERTY 函数的 ServerName 属性与@@SERVERNAME 返回相似的信息. --ServerName 属性提供Windows 服务器和

SQL SERVER 作业(或叫执行计划)

如果在SQL Server 里需要定时或者每隔一段时间执行某个存储过程或3200字符以内的SQL语句时,可以用管理->SQL Server代理->作业来实现. 1.管理->SQL Server代理->作业(按鼠标右键)->新建作业-> 2.新建作业属性(常规)->名称[自定义本次作业的名称]->启用的方框内是勾号->分类处可选择也可用默认的[未分类(本地)]->所有者默认为登录SQL Server用户[也可选其它的登录]->描述[填写本次工

1. SQL Server服务器监控实现方法

原文:1. SQL Server服务器监控实现方法 对于服务器的监控,和对数据库的监控,很少有合二为一的工具,如果有的话,一般是付费软件,或者自行开发的工具.所以如果不想购买软件,也不想花精力去开发的话,可以结合一些免费/开源的工具.自定义脚本,来完成对数据库服务器的监控. 一. 第三方工具1. 开源工具比如:CACTI,Nagios,Zabbix等等,除了主机外,对于网络上的其他设备,比如路由器等也可以一并监控.以CACTI为例(CACTI可以在windows下安装),服务器监控的图示:(1)

SQL Server 服务器磁盘测试之SQLIO篇(二)

上次放出了一篇文章,针对磁盘卷簇大小默认4KB和自定义64KB进行了测试,测试内容为随机和顺序读写,大小为8KB和64KB,有人觉得这并没有照顾到SQL Server所有的IO使用情景.这篇测试文章,我们就来尽可能模拟一下SQL Server IO的行为,全方位对簇大小4KB.8KB和64KB做一次验证,注意:本次我们增加了簇为8KB的大小. 重点说明:本测试使用的是两块SSD组成的RAID1 首先,我们先来分析SQL Server的IO行为,参考网址:Choosing what SQLIO t

【转载】SQL Server - 使用 Merge 语句实现表数据之间的对比同步

原文地址:SQL Server - 使用 Merge 语句实现表数据之间的对比同步 表数据之间的同步有很多种实现方式,比如删除然后重新 INSERT,或者写一些其它的分支条件判断再加以 INSERT 或者 UPDATE 等.包括在 SSIS Package 中也可以通过 Lookup, Condition Split 等多种 Task 的组合来实现表数据之间的同步.在这里 "同步" 的意思是指每次执行一段代码的时候能够确保 A 表的数据和 B 表的数据始终相同. 可以通过 SQL Se