我正在实施一些基本的 SQL Server 监控来监视过度阻塞。
我有一个如下所示的存储过程:
CREATE PROCEDURE [dbo].[bsp_GetBlockedProcessCount]
AS
BEGIN
SET NOCOUNT ON;
DECLARE @count INT
SELECT @count = COUNT(*)
FROM master.dbo.sysprocesses WITH (NOLOCK)
WHERE blocked > 0
RETURN @count
END
当我在管理员上下文中执行此操作时,我得到了正确的答案。当我在具有有限权限的用户(即网络服务器)的上下文中执行此操作时,无论真实答案如何,我都会得到零。
我可以想到一些解决方案,但我对其中任何一个都不满意:
我可以向用户授予 VIEW SERVER STATE 权限,但这比该用户应该拥有的权限多得多:
GRANT VIEW SERVER STATE TO [Webserver]
从 SQL 作业运行 proc 并将结果放在某处以供网络服务器获取,但这很混乱且复杂。
- 不要尝试从网络服务器调用它!
我确信有更好的解决方案。有什么建议么?