過度のブロッキングを監視するために、いくつかの基本的な 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
これを管理者コンテキストで実行すると、正しい答えが得られます。権限が制限されたユーザー (つまり、Web サーバー) のコンテキストでこれを実行すると、真の答えに関係なくゼロになります。
私はいくつかの解決策を考えることができますが、私はそれらのどれにも満足していません:
ユーザーに VIEW SERVER STATE 権限を付与できますが、それはこのユーザーが持つべきよりも多くの権限です。
GRANT VIEW SERVER STATE TO [Webserver]
SQL ジョブから proc を実行し、Web サーバーが取得できるように結果をどこかに配置しますが、これは面倒で複雑です。
- これを Web サーバーから呼び出そうとしないでください。
より良い解決策があると確信しています。助言がありますか?