【SqlServer】 分享 几个 优化 Sql 的 语句
1、查找目前SQL?Server所执行的SQL语法,并展示资源情况:?
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)
)?
[语句]?,
execution_count?
[执行次数]?,
last_execution_time?
[上次开始执行计划的时间]?,
total_worker_time?
[自编译以来执行所用的?CPU?时间总量(微秒)]?,
last_worker_time?
[上次执行计划所用的?CPU?时间(微秒)]?,
min_worker_time?
[单次执行期间曾占用的最小?CPU?时间(微秒)]?,
max_worker_time?
[单次执行期间曾占用的最大?CPU?时间(微秒)]?,
total_logical_reads?
[总逻辑读]?,
last_logical_reads?
[上次逻辑读]?,
min_logical_reads?
[最少逻辑读]?,
max_logical_reads?
[最大逻辑读]?,
total_logical_writes?
[总逻辑写]?,
last_logical_writes?
[上次逻辑写]?,
min_logical_writes?
[最小逻辑写]?,
max_logical_writes?
[最大逻辑写]
?
FROM ????
sys.dm_exec_query_stats?
s1
?????????
CROSS ?
APPLY?sys.dm_exec_sql_text(sql_handle)?
s2
WHERE???
s2.objectid?
IS ?
NULL
ORDER?
BY ?
DESC
2、展示耗时查询:
--?List?expensive?queries?
DECLARE?
@MinExecutions?
int
;?
SET?
@MinExecutions?=?5?
???
SELECT?
EQS.total_worker_time?
TotalWorkerTime?
???????
,EQS.total_logical_reads?+?EQS.total_logical_writes?
TotalLogicalIO?
As ?
ExeCnt?
LastUsage?
as ?
AvgCPUTimeMiS?
????????
AvgLogicalIO?
name ?
DatabaseName?
(EST.text?
?????????????????
EQS.statement_end_offset?=?-1??
????????????????????????
LEN(
convert
(nvarchar(
max
END ??
??????????????????
-?EQS.statement_start_offset)?/?2?
SqlStatement?
???????
--?Optional?with?Query?plan;?remove?comment?to?show,?but?then?the?query?takes?!!much?longer?time!!?
--,EQP.[query_plan]?AS?[QueryPlan]?
FROM?
EQS?
??????
APPLY?sys.dm_exec_sql_text(EQS.sql_handle)?
EST?
APPLY?sys.dm_exec_query_plan(EQS.plan_handle)?
EQP?
??????
LEFT ?
JOIN ?
sys.databases?
DB?
??????????
ON ?
EST.dbid?=?DB.database_id??????
WHERE?
EQS.execution_count?>?@MinExecutions?
???????
AND ?
EQS.last_execution_time?>?DATEDIFF(
MONTH
DESC ?
LoginName?
DatabaseName?
ProcessStatus?
Command?
LastBatch?
Cpu?
PhysicalIo?
[RowCount]?
SQLStatement?
sys.sysprocesses?
PRO?
??????
INNER ?
DB?
PRO.dbid?=?DB.database_id?
sys.dm_exec_sessions?
SES?
?????????
PRO.spid?=?SES.session_id?
APPLY?sys.dm_exec_sql_text(PRO.sql_handle)?
STM??????
PRO.spid?>=?50??
--?Exclude?system?processes?
PRO.physical_io?
DESC ?
DESC
;
4、存储过程执行情况: ISNULL
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |