我如何登录和找到最昂贵查询?我如何登录和找到最昂贵查询?(How Can I Log and Fin

2019-05-09 09:35发布

在sql2k8活动监视器让我们看到了最昂贵的查询。 好吧,这很酷,但有什么办法可以登录这个信息或者得到通过查询分析器这个信息? 我真的不希望有SQL管理控制台开放和我在看活动监控仪表板。

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

感谢堆的任何帮助!

Answer 1:

  1. 使用(在SSMS的工具菜单)上的SQL Server Profiler来创建一个记录这些事件的轨迹:

      RPC:Completed SP:Completed SP:StmtCompleted SQL:BatchCompleted SQL:StmtCompleted 
  2. 您可以使用标准跟踪模板开始和修剪它。 您没有指定这是否是为特定的数据库或者整个服务器,如果是特定分贝dB的,包括DatabaseID列,设置一个过滤器,你的DB( SELECT DB_ID('dbname') 确保逻辑读取数据列包含每个事件。 设置跟踪记录到文件中。 如果你离开此跟踪运行在后台无人看管,这是一个好主意,设置最大跟踪文件的大小说500MB或1GB,如果你有足够的空间(这一​​切都取决于多少活动有在服务器上,所以你将不得不吮吸它,看看)。

  3. 简要启动跟踪,然后暂停。 转到文件 - >导出 - >脚本跟踪定义和选择你的数据库版本,并保存到一个文件中。 现在,您可以创建具有比通过探查GUI运行开销少得多一丝的SQL脚本。 当运行该脚本它将输出跟踪ID(通常@ID=2 ); 注意下来。

  4. 一旦你有一个跟踪文件(带.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

一旦你已经确定了昂贵的疑问,您可以生成并检查实际执行计划。



Answer 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 


Answer 3:

我从来没有听说过这个工具之前,但微软提供了一组做的正是给你这个了出色的工作报告 - 包括最慢的查询。 看看他们的性能仪表盘报告 。

不知道他们是SQL 2008兼容,但值得一试。



Answer 4:

请问SQL Server事件探查你需要什么? 我没有使用过2008年尚未所以我不知道,如果工具仍然在那里,但如果是我相信你可以设置一个跟踪记录满足特定条件(如那些执行以上驾驶CPU高达查询某个阈值)。

我们使用这对我们的项目和它确实帮助我们解决执行不佳的查询做得非常好(虽然不离开它的全时,依靠一般的Windows性能计数器性能健康跟踪)。



Answer 5:

有一个新的工具, 性能工作室在SQL Server 2008,其建立在由服务器,让服务器的性能概述自动维护的动态管理视图顶部。 这值得一试。



Answer 6:

(DELL)任务SQL优化器为SQL Server 9.0引入了查找SQL模块,允许用户在您的SQL Server中资源最密集的SQL。 https://support.quest.com/softwaredownloads.aspx?pr=268445262



文章来源: How Can I Log and Find the Most Expensive Queries?