mysql 存储过程耗时_SQLServer数据库之SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句...

本文主要向大家介绍了SQLServer数据库之SqlServer查看表、存储过程、耗时查询、当前进程、开销较大的语句,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

--查看数据库中表的语句

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

以上就介绍了SQL Server的相关知识,希望对SQL Server有兴趣的朋友有所帮助。了解更多内容,请关注职坐标数据库SQL Server频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值