McN*_*ets 12
如果您的触发器在缓存中,您可以使用:sys.dm_exec_trigger_stats
返回缓存触发器的聚合性能统计信息。视图中每个触发器包含一行,并且该行的生命周期与触发器保持缓存的时间一样长。当从缓存中删除触发器时,相应的行将从该视图中删除。
选择 d.object_id,
d.database_id,
DB_NAME(database_id) AS 'database_name',
OBJECT_NAME(object_id, database_id) AS 'trigger_name',
d.cached_time,
d.last_execution_time,
d.total_elapsed_time,
d.total_elapsed_time/d.execution_count AS [avg_elapsed_time],
d.last_elapsed_time,
d.execution_count
FROM sys.dm_exec_trigger_stats AS d
ORDER BY [total_worker_time] DESC;
+------------+-------------+---------------+----------------------+-------------------------+-------------------------+--------------------+------------------+-------------------+-----------------+
| object_id | database_id | database_name | trigger_name | cached_time | last_execution_time | total_elapsed_time | avg_elapsed_time | last_elapsed_time | execution_count |
+------------+-------------+---------------+----------------------+-------------------------+-------------------------+--------------------+------------------+-------------------+-----------------+
| 1872725724 | 7 | dwsystem | DWUserSettings_Mod | 2018-02-08 08:58:26.660 | 2018-02-08 17:24:58.600 | 20987 | 677 | 495 | 31 |
+------------+-------------+---------------+----------------------+-------------------------+-------------------------+--------------------+------------------+-------------------+-----------------+
| 1648724926 | 7 | dwsystem | DWWorkFlow_Mod | 2018-02-08 07:22:01.247 | 2018-02-08 23:22:01.320 | 17030 | 946 | 640 | 18 |
+------------+-------------+---------------+----------------------+-------------------------+-------------------------+--------------------+------------------+-------------------+-----------------+
| 1808725496 | 7 | dwsystem | DWWorkflowStatus_Mod | 2018-02-08 07:22:23.337 | 2018-02-08 23:22:23.933 | 9409 | 522 | 710 | 18 |
+------------+-------------+---------------+----------------------+-------------------------+-------------------------+--------------------+------------------+-------------------+-----------------+
Run Code Online (Sandbox Code Playgroud)
权限
在 SQL Server 上,需要VIEW SERVER STATE权限。在 SQL 数据库高级层上,需要VIEW SERVER STATE数据库中的权限。在 SQL 数据库标准层和基本层上,需要 服务器管理员或Azure Active Directory 管理员帐户。
如果您可以修改触发器,那么您可以使用 TriggerLog 表并在每次触发触发器时添加一条记录(或始终更新)。
让我感谢Sean Gallardy - Microsoft为我提供下一个示例:
CREATE DATABASE TrgTest;
GO
USE TrgTest;
GO
CREATE TABLE Test
(
ID INT IDENTITY(1,1)
);
GO
CREATE TABLE Logging
(
SomeLoggingCrap VARCHAR(1000) NOT NULL
)
GO
CREATE TRIGGER KittensHateTriggers
ON dbo.Test
FOR INSERT
AS
BEGIN
INSERT INTO Logging(SomeLoggingCrap)
SELECT CONCAT('Logged #', ID) FROM inserted
END
GO
DBCC FREEPROCCACHE
INSERT INTO Test DEFAULT VALUES
SELECT *
FROM sys.dm_exec_query_stats
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
Run Code Online (Sandbox Code Playgroud)
正如Solomon Rutzky在他的评论中指出的那样,日志表应该存储与执行时间、过程等相关的信息。
CREATE TABLE Test
(
ID INT IDENTITY(1,1)
);
CREATE TABLE Logging
(
Id int IDENTITY PRIMARY KEY,
ProcName sysname NULL,
SysDate datetime2(7) NOT NULL
);
GO
CREATE TRIGGER KittensHateTriggers
ON dbo.Test
FOR INSERT
AS
BEGIN
INSERT INTO Logging(ProcName, SysDate)
SELECT so.[name],
SYSDATETIME()
FROM sys.objects so
WHERE so.[object_id] = @@PROCID;
END
GO
INSERT INTO Test DEFAULT VALUES;
GO
SELECT * FROM Logging;
GO
Run Code Online (Sandbox Code Playgroud)
返回:
+----+---------------------+---------------------+
| Id | ProcName | SysDate |
+----+---------------------+---------------------+
| 1 | KittensHateTriggers | 09/02/2018 22:39:13 |
+----+---------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)
dbfiddle在这里
我强烈建议查看Solomon 的答案,在这种情况下,与执行答案第一部分所需的 VIEW SERVER STATE 权限有关。
我需要为用户提供哪些最低权限才能检查 SQL Server 代理服务的状态?
从 SQL Server 2005 开始,Microsoft 提供了一种通过“代理”推断权限的机制。权限的代理是登录(对于服务器级别权限)或用户(对于数据库级别权限)。在任何一种情况下,主体(服务器或数据库)都是从非对称密钥或证书创建的,被授予适当的权限,然后通过使用ADD SIGNATURE签署一个或多个代码片段来推断权限。通过这样做,您将授予代码您授予该服务器或数据库主体的权限
| 归档时间: |
|
| 查看次数: |
6471 次 |
| 最近记录: |