gpt4 book ai didi

sql-server - 如何跟踪相应存储过程中的哪个查询正在执行

转载 作者:行者123 更新时间:2023-12-05 05:15:47 25 4
gpt4 key购买 nike

我们的团队向我分配了一项新任务,以研究一个巨大的存储过程的性能。当我在开发环境中使用适当的数据进行观察时,我注意到该过程需要花费相当长的时间来执行。在我的场景中,大约需要 45 分钟。存储过程中使用了多个 INSERT/DELETE/UPDATE 查询。但我无法获得导致问题的查询。查询中使用的数据量也相当少。

How can I pinpoint to the exact query in the stored procedure which is getting executed?

我的服务器版本是 SQL Server 2008 R2

最佳答案

有几种方法可以找出作为存储过程的一部分执行的查询。了解有关 DMVSQL Profiler 的更多信息。两者都会让您监督查明存储过程中正在使用的查询。

在 SQL 事件探查器中,使用 SP:StmtCompleted 或 SP:StmtStarting 将语句包含在查询中。但我建议不要使用 Profiler,因为它也会影响系统内存。此外,它还可能为您提供不需要的额外信息。

最好的方法是使用 DMV(动态管理 View )。如果您知道进程 ID (SPID),请使用以下查询来查找查询

第一个查询将为您提供有关存储过程的详细信息,第二个将为您提供当前正在执行的确切查询。替换 SPID 在以下查询中使用您进程的相应 SPID

SELECT  requests.session_id, 
requests.status,
requests.command,
requests.statement_start_offset,
requests.statement_end_offset,
requests.total_elapsed_time,
details.text
FROM sys.dm_exec_requests requests
CROSS APPLY sys.dm_exec_sql_text (requests.sql_handle) details
WHERE requests.session_id = SPID
ORDER BY total_elapsed_time DESC

SELECT SUBSTRING(detail.text,
requests.statement_start_offset / 2,
(requests.statement_end_offset - requests.statement_start_offset) / 2)
FROM sys.dm_exec_requests requests
CROSS APPLY sys.dm_exec_sql_text (requests.sql_handle) detail
WHERE requests.session_id = SPID

一旦您确定了导致缓慢的查询,您就可以使用实际执行计划来确定查询中的问题。试试这个,请评论它是否适合你。

关于sql-server - 如何跟踪相应存储过程中的哪个查询正在执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51301485/

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