有没有办法使用 Profiler 来确定表是否正在被查询访问?
我看到一个名为 Object:Opened
的事件(指示何时访问对象,例如 SELECT、INSERT 或 DELETE 语句)和 Object:Closed
,但这些似乎不起作用。
特别是,我使用 Object:Opened 和 Object:Closed 创建了一个简单的跟踪,没有过滤器(标准的“应用程序名称不像 'SQL Profiler'”过滤器除外)并运行 SELECT TOP 1 * FROM TableName
,但没有报告任何事件。
那么,有没有办法使用 Profiler 来确定是否正在从中选择表?
最佳答案
这可能有助于调查 SQL 正在获取的锁。 Select 语句通常会获取共享锁 (LCKMS),因此您可以对此进行过滤。
在探查器中查找 Locks:Acquired 事件。 ObjectID 将解析为您可以使用 OBJECT_NAME(objectid) 轻松查找的表。 Mode 会告诉您正在获取的锁类型,共享锁是 3。有关详细信息,请查看 here .
关于sql-server - 使用 SQL Server Profiler 访问日志表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/296906/