SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句
2017-05-02 16:24
369 查看
--查看数据库中表的语句 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 --查看存储过程执行的语句 SELECT DB_NAME(ISNULL(EPS.database_id,'')) [数据库名称] --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.last_worker_time '上次执行存储过程所用的CPU时间(微秒)' ,EPS.execution_count [上次编译以来所执行的次数]--AS ExecutionCount ,EPS.total_worker_time / EPS.execution_count [平均每次执行所用的CPU时间总量(微秒)]--AS AvgWorkerTime ,EPS.total_elapsed_time / EPS.execution_count [平均每次执行所用的时间(微秒)]--AS AvgElapsedTime ,(EPS.total_logical_reads + EPS.total_logical_writes) / EPS.execution_count AS AvgLogicalIO ,b.text [存储过程内容] FROM sys.dm_exec_procedure_stats AS EPS CROSS APPLY sys.dm_exec_sql_text(EPS.sql_handle) b ORDER BY EPS.last_elapsed_time DESC; --展示耗时的查询 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 --当前进程及其语句: 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; --5、开销较大的查询: 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
相关文章推荐
- 查看存储过程,查看死锁进程语句,查询表占的空间,数据库连接
- sqlserver 死锁 查看当前进程,或死锁进程,并能自动杀掉死进程
- 查询SQLServer 服务器,执行过的SQL语句耗时!
- 查询mysql当前连接情况(查看负载较大用户)
- sqlserver 查询当前阻塞进程 并杀掉
- 查看sqlserver当前正在执行的语句
- SqlServer查询和Kill进程死锁的语句
- sqlserver查询所有表名、字段名、类型、长度和存储过程、视图的创建语句
- 怎样查看oracle当前的连接数呢?只需要用下面的SQL语句查询一下就可以了。
- 查询SQLSERVER进程的执行的语句
- SqlServer查询和Kill进程死锁的语句
- Oracle的查看进程的查询语句
- SQLServer 查询当前服务器有多少连接请求的语句
- SQL大圣之路笔记——SQL 通过创建存储过程,查看当前进程情况(是否造成表锁死等)
- SqlServer 查询某数据库下的所有表的物理空间和行数 语句和存储过程
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- oracle 中--怎么查看当前表空间在作什么操作?--查锁,死锁,当前执行时间长的Sql语句,没提交的事务,对象为哪些进程所用
- linux查看是否有某个运行的进程命令(不包括查询进程这条语句)
- SQL语句和存储过程查询语句的流程控制
- 如何用sqll语句查看当前表是否被锁?