gpt4 book ai didi

sql-server - 如何记录并查找最昂贵的查询?

转载 作者:行者123 更新时间:2023-12-01 17:32:52 26 4
gpt4 key购买 nike

sql2k8 中的事件监视器使我们能够看到最昂贵的查询。好的,这很酷,但是有没有办法可以记录此信息或通过查询分析器获取此信息?我真的不想打开 Sql 管理控制台并查看事件监视器仪表板。

我想找出哪些查询写得不好/架构设计得不好等等。

非常感谢您的帮助!

最佳答案

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

     RPC:Completed
    SP:Completed
    SP:StmtCompleted
    SQL:BatchCompleted
    SQL:StmtCompleted
  2. 您可以从标准跟踪模板开始并对其进行修剪。您没有指定这是针对特定数据库还是整个服务器,如果是针对特定数据库,请包含 DatabaseID 列并为您的数据库设置过滤器 (SELECT DB_ID('dbname') )。确保每个事件都包含逻辑读取数据列。设置跟踪以记录到文件中。如果您要让此跟踪在后台无人值守地运行,则最好设置最大跟踪文件大小,例如 500MB 或 1GB(如果您有足够的空间)(这完全取决于服务器上的事件量,因此你必须吸吮它才能看到)。

  3. 短暂启动跟踪,然后暂停。转到文件->导出->脚本跟踪定义并选择您的数据库版本,然后保存到文件。您现在拥有一个创建跟踪的 SQL 脚本,该脚本的开销比通过探查器 GUI 运行要少得多。当您运行此脚本时,它将输出跟踪 ID(通常是 @ID=2);记下这一点。

  4. 一旦您有了跟踪文件 (.trc)(由于达​​到最大文件大小而完成了跟踪,或者您使用以下命令停止了正在运行的跟踪

    执行 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

一旦确定了代价高昂的查询,您就可以生成并检查实际的执行计划。

关于sql-server - 如何记录并查找最昂贵的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/257906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com