我们正在部署一个安全产品,该产品使用内置的MS Sharepoint存储过程来收集数据并生成有关我们Sharepoint环境的报告。这将在与其他应用程序相同的应用程序池中的sharepoint前端服务器上运行。
我们担心生产受到影响,并希望找到一种方法来限制其资源。
我设置了SQL资源调控器,并为应用程序名称,时间和运行它的前端服务器创建了分类器功能。有人告诉我它太广泛了,因为应用程序池中的生产应用程序也会被放慢速度。
我回过头来确定了它运行的存储过程,但是我无法将它们添加到分类器函数中。
有没有办法让Resource Governor分类器功能限制所选存储过程的资源?
答案 0 :(得分:0)
在运行任何命令之前对会话进行分类。您必须确定连接字符串中的某些差异才能触发分类。通常,您可以在连接字符串中设置ApplicationName,然后使用APP_NAME() TSQL函数进行检索。
答案 1 :(得分:0)
花了我一些时间,但我终于想通了。该代码混合了在线书籍和我自己的书籍中的示例代码。我的问题是为一个流程创建一个过滤器,该流程在设定时间内在几个小时内运行数百万个存储过程调用。这将根据时间,数据库和对象名称进行过滤。
您可以像示例中一样创建表,并使用返回值和您的时间填充该表。在时间部分中,如果您的时间段在同一天内,请将或更改为或。
USE [master]
GO
/****** Object: UserDefinedFunction [dbo].[RG_Classifier] Script Date:
5/12/2020
11:17:45 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
create FUNCTION [dbo].[RG_Classifier]() RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @app_name sysname
DECLARE @strGroup sysname
DECLARE @loginTime time
SET @loginTime = CONVERT(time,GETDATE())
SELECT top 1 @strGroup = strGroupName FROM dbo.tblClassificationTimeTable WHERE
tStartTime <= @loginTime or tEndTime >= @loginTime
--(@loginTime between '23:00' and '23:59') or (@loginTime between '00:01' and
'02:00')
IF
(program_name() in ('Application 1','Application 2'))
and (HOST_NAME() = 'server 1')
and (user_name() = 'login 1')
and (db_name(29) = 'db1')
or (db_name(10) = 'db2')
and @strGroup is not null
and ((OBJECT_NAME(591341171,29)) = 'proc_1')
or ((OBJECT_NAME(1309247719,29)) = 'proc_2')
or ((OBJECT_NAME(230291880,29)) = 'proc_3')
or ((OBJECT_NAME(775882031,29)) = 'proc_4')
or ((OBJECT_NAME(1474820316,10)) = 'proc_1')
or ((OBJECT_NAME(157243615,10)) = 'proc_2')
or ((OBJECT_NAME(1113771025,10)) = 'proc_3')
or ((OBJECT_NAME(1155743420,10)) = 'proc_4')
begin
RETURN @strGroup
end
SET @app_name = @strGroup
RETURN @app_name
END;
GO