2008开始有报表直接查出来的。你也可以监控一下它用的是什么SQL
解决方案 »
- 这种情况下如何让数据分割到不能在分割?
- 一个存储过程创建2个视图,然后关联
- 求一个存储过程:把一个表中的数据完全插入的另一个表中,并且把这个表里的数据全部删除。
- 请问 如何 将 decimal 负数 转化为 正数
- 如何才能使别人拿走我的.mdf数据库以后,在SQL SERVER 2000的企业管理器中打不开,就是如何加密.mdf数据库
- SQL2008 无法连接到XXX error 40 MS SQL 错误2
- SQL Server2005不能新建数据库
- 请总高手们,一个关于系统时间的问题?
- 一般问题
- 谁有关于powerdesinger的资料?顺便介绍一下他的地位?
- 代码优化问题
- 请教大牛们一个“一对多的关系查询的问题”
SELECT SUBSTRING(qt.text, ( qs.statement_start_offset / 2 ) + 1,
( ( CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset ) / 2 ) + 1) ,
qs.execution_count ,
qs.total_logical_reads ,
qs.last_logical_reads ,
qs.total_logical_writes ,
qs.last_logical_writes ,
qs.total_worker_time ,
qs.last_worker_time ,
qs.total_elapsed_time / 1000000 AS total_elapsed_time_in_S ,
qs.last_elapsed_time / 1000000 AS last_elapsed_time_in_S ,
qs.last_execution_time ,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.sql_handle) qpORDER BY qs.total_worker_time DESC --CPU时间
==>
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp一点小bug我想问的是:
我列出来的第一种有什么问题?
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)
目的是为了查询对应的sql语句执行的信息是从sys.dm_exec_query_stats 中查询得到的
然后 根据 qs.last_elapsed_time 倒序排序,不知道告诉我你不知道last_elapsed_time 是啥意思
真不知道的话,继续看你的sql
, CAST(qs.last_elapsed_time / 1000000.0 AS DECIMAL(28, 2)) AS [最后完成消耗秒数]
我真觉得你没必要纠结是否CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)
sys.dm_exec_query_stats
*************************************************************************返回缓存查询计划的聚合性能统计信息。
缓存计划中的每个查询语句在该视图中对应一行,并且行的生存期与计划本身相关联。
在从缓存删除计划时,也将从该视图中删除对应行。配合sys.dm_exec_query_plan,查询sql缓存的执行计划信息
配合sys.dm_exec_sql_text,查询缓存的sql信息
(select text from sys.dm_exec_sql_text(sql_handle)) as [SQL]
这个是否合理?
CROSS APPLY的原理也是子查询
你想比较什么
(select text from sys.dm_exec_sql_text(sql_handle)) as [SQL]
这个是否合理?什么叫做合理?
主要看你想要看什么结果了
你统计top sql,不就是为了看看是那些个sql吗,不看文本,光看那些聚合结果有啥用
两个sql查询出来的字段有什么不一样吗?
两个sql查询出来的字段有什么不一样吗?不要看行数, 看行数, 这个如果仔细研究, 肯定是有区别的。
--1. 不用 CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)
取的是部分SQL--2. 用 CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle)
取的是全部SQL不明白为何无一人认真研究这个问题……
( ( CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset ) / 2 ) + 1) 这段,取出 当前存储过程中 某一个语句,看他的运行效率。另外 ,cross apply 和子查询的结果应该是不一样的,cross apply相当于inner join,所以如果没有对应的sql文本,那么就不返回结果。而 子查询,会返回所有的 sys.dm_exec_query_stats中的记录,所以是不完全一样的。
SUBSTRING(qt.text, ( qs.statement_start_offset / 2 ) + 1,
( ( CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset ) / 2 ) + 1) 这一段sql是干嘛的?不就是去掉变量的定义,直接揪出来语句本身,
(@0 int,@2 int,@3 int)select * from table where [Status] = @0 …… between @2 and @3
变成语句本身
select * from table where [Status] = @0 …… between @2 and @3查询结果出了这一列的处理,其他的不一样我给他吃了!!!!!!!!!