当前位置:  开发笔记 > 数据库 > 正文

如何记录和查找最昂贵的查询?

如何解决《如何记录和查找最昂贵的查询?》经验,为你挑选了2个好方法。

sql2k8中的活动监视器允许我们查看最昂贵的查询.好的,这很酷,但有没有办法可以通过查询分析器记录此信息或获取此信息?我真的不想打开Sql Management控制台,而是查看活动监视器仪表板.

我想弄清楚哪些查询写得不好/架构设计不当等等.

谢谢你的帮助!



1> Mitch Wheat..:

    使用SQL Server Profiler(在SSMS中的工具菜单上)创建记录这些事件的跟踪:

     RPC:Completed
     SP:Completed
     SP:StmtCompleted
     SQL:BatchCompleted
     SQL:StmtCompleted
    

    您可以从标准跟踪模板开始并修剪它.您没有指定这是针对特定数据库还是整个服务器,如果是针对特定Db,则包括DatabaseID列并为您的DB(SELECT DB_ID('dbname'))设置过滤器.确保每个事件都包含逻辑"读取数据"列.将跟踪设置为记录到文件.如果你要让这个跟踪在后台无人值守运行,最好设置一个最大跟踪文件大小,如果你有足够的空间,说500MB或1GB(这一切都取决于服务器上有多少活动,所以你将不得不吮吸它并看到).

    简要地开始跟踪然后暂停它.转到文件 - >导出 - >脚本跟踪定义并选择您的数据库版本,并保存到文件.您现在有一个sql脚本,它创建的跟踪比通过分析器GUI运行的开销要少得多.当您运行此脚本时,它将输出跟踪ID(通常@ID=2); 注意这一点.

    获得跟踪文件(.trc)后(由于达到最大文件大小而完成跟踪,或者使用跟踪文件停止了运行跟踪)

    EXEC sp_trace_setstatus @ID,0
    EXEC sp_trace_setstatus @ID,2

您可以将跟踪加载到探查器中,或使用ClearTrace(非常方便)或将其加载到表中,如下所示:

SELECT * INTO TraceTable
FROM ::fn_trace_gettable('C:\location of your trace output.trc', default)

然后,您可以运行查询来聚合数据,例如:

SELECT COUNT(*) AS TotalExecutions, 
    EventClass, CAST(TextData as nvarchar(2000))
 ,SUM(Duration) AS DurationTotal
 ,SUM(CPU) AS CPUTotal
 ,SUM(Reads) AS ReadsTotal
 ,SUM(Writes) AS WritesTotal
FROM TraceTable
GROUP BY EventClass, CAST(TextData as nvarchar(2000))
ORDER BY ReadsTotal DESC

一旦确定了昂贵的查询,就可以生成并检查实际的执行计划.



2> 小智..:

以下脚本为您提供结果.

SELECT TOP 10 
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 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 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.plan_handle) qp
ORDER BY qs.total_logical_reads DESC 


这是从这里拿走的吗?=> http://blog.sqlauthority.com/2010/05/14/sql-server-find-most-expensive-queries-using-dmv/如果是这样,提及它是一种更好的风格......
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有