📅  最后修改于: 2023-12-03 14:47:35.735000             🧑  作者: Mango
在 SQL Server 中,用户可以通过查看系统视图和动态管理视图来获取最近一次 SQL 查询的详细信息。以下是一些在 SQL Server 中获取上次执行查询的常用方法。
可以使用 sys.dm_exec_query_stats
系统视图来获取最近一次被执行的查询的详细信息。
SELECT TOP 1
SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2) + 1) AS [Executed Query],
qs.execution_count AS [Execution Count],
qs.total_worker_time AS [Total Worker Time],
qs.total_physical_reads AS [Total Physical Reads],
qs.total_logical_reads AS [Total Logical Reads],
qs.total_logical_writes AS [Total Logical Writes],
qs.creation_time AS [Creation Time],
qs.last_execution_time AS [Last Execution Time]
FROM
sys.dm_exec_query_stats AS qs
CROSS APPLY
sys.dm_exec_sql_text(qs.sql_handle) AS st
ORDER BY
qs.execution_count DESC;
该查询将返回最近一次被执行的查询的细节,如查询文本、执行次数、总工作时间、总物理读取、总逻辑读取、总逻辑写入以及查询创建时间和最近一次执行时间。
可以使用 sys.dm_exec_requests
系统视图来获取当前正在执行的查询的详细信息。
SELECT
r.session_id AS [Session ID],
r.start_time AS [Start Time],
DB_NAME(r.database_id) AS [Database Name],
r.command AS [Command Type],
r.status AS [Status],
r.wait_type AS [Wait Type],
r.cpu_time AS [CPU Time],
r.total_elapsed_time AS [Total Elapsed Time],
SUBSTRING(qt.text, r.statement_start_offset/2 + 1,
(CASE WHEN r.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX),
qt.text)) * 2 ELSE r.statement_end_offset
END - r.statement_start_offset)/2) AS [Executed Query]
FROM
sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS qt;
该查询将返回当前正在执行的查询的细节,如会话 ID、开始时间、数据库名称、命令类型、状态、等待类型、CPU 时间、总经过时间和执行的查询文本。
在 SQL Server 中,可以使用 sys.dm_exec_query_stats
和 sys.dm_exec_requests
系统视图来获取最近一次执行的查询或当前正在执行的查询的详细信息。这些视图可以帮助程序员了解查询的执行方式和性能。