我经常看到这样的问题,人们想知道某件事是否发生、何时发生或是谁执行的。在很多情况下,SQL Server 不会自行跟踪此信息。例如:
dbo.MyProcedure?salary了dbo.Employees表中的列?dbo.Orders从 Management Studio查询了表?但是,SQL Server默认会临时跟踪其他几个事件,并且可以在本机回答有关问题,例如:
dbo.EmployeeAuditData表,何时删除?我如何获得这些信息,以及它可以保持多久?
我可以使用以下方法执行查询:
SELECT deqs.last_execution_time AS [Time]
,dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)
但我也在寻找username执行这些查询的列。
我面临的问题是 sql server 2008 因某些高负载而失败。我需要找到那个负载情况并需要优化代码以便它可以处理负载。我在 Internet 上发现 SQL 分析器可用于跟踪数据库交互,稍后可以对其进行分析以找到问题发生的确切点。我还发现了如何启动 sql 分析器。但现在我的问题是,通过启动 sql profiler 我会影响服务器性能吗?