SQL Server 查询执行过的 SQL 语句

在SQL Server数据库中,我们经常需要查询执行过的SQL语句,这对于排查问题、优化性能等非常重要。本文将介绍如何查询执行过的SQL语句,以及如何通过系统视图和动态管理对象来获取这些信息。

如何查询执行过的SQL语句

SQL Server提供了一些系统视图和动态管理对象,可以帮助我们查询执行过的SQL语句。其中,最常用的是sys.dm_exec_query_statssys.dm_exec_sql_text

sys.dm_exec_query_stats

sys.dm_exec_query_stats系统视图可以返回关于缓存中执行的查询的性能统计信息。该视图中包含了查询的执行次数、总的执行时间、平均执行时间等信息。

sys.dm_exec_sql_text

sys.dm_exec_sql_text系统函数可以根据sql_handle参数返回SQL语句的文本。sql_handle可以从sys.dm_exec_query_stats中获取。

查询执行过的SQL语句示例

以下是一个示例,演示如何查询执行过的SQL语句:

SELECT
    SUBSTRING(t.text, (s.statement_start_offset/2)+1,
    ((CASE s.statement_end_offset
    WHEN -1 THEN DATALENGTH(t.text)
    ELSE s.statement_end_offset
    END - s.statement_start_offset)/2) + 1) AS statement_text,
    s.execution_count,
    s.last_execution_time
FROM
    sys.dm_exec_query_stats AS s
CROSS APPLY
    sys.dm_exec_sql_text(s.sql_handle) AS t
WHERE
    t.dbid = DB_ID()
ORDER BY
    s.last_execution_time DESC;

上面的查询将返回最近执行的SQL语句,以及执行次数和最后执行时间。

查询执行过的SQL语句流程图

下面是流程图,展示了如何查询执行过的SQL语句的过程:

flowchart TD
    Start --> GetQueryStats
    GetQueryStats --> GetSQLText
    GetSQLText --> End
    End --> Finish

查询执行过的SQL语句序列图

以下是一个序列图,展示了如何查询执行过的SQL语句的交互过程:

sequenceDiagram
    participant Client
    participant SQLServer
    Client->>SQLServer: 发起查询请求
    SQLServer->>SQLServer: 查询执行过的SQL语句
    SQLServer-->>Client: 返回查询结果

结论

通过本文的介绍,你了解了如何查询执行过的SQL语句,并且学会了使用系统视图和动态管理对象来获取这些信息。这对于数据库管理和性能优化非常重要。希望本文能帮助你更好地理解SQL Server中的查询执行过的SQL语句的方法。