Man*_*oon 0 sql-server resource-governor
我有一个远程 MS SQL Server,我有几种类型的查询。
我运行了一些属于低延迟生产应用程序一部分的查询,并且需要确保它们及时停止。
但我也有“研究”查询,这些查询往往占用大量 CPU。
如何设置分类器,以便不同的查询(来自同一用户)使用不同的资源池运行,以便我的研究查询不会占用所有 CPU?
我被困在如何做到这一点上,因为我无法按用户区分。
限制您想要的会话的唯一方法是唯一地标识它们。如果您不能这样做,则您不能使用资源调控器有选择地限制资源。
有很多方法可以将连接分层到不同的资源池中。您可能需要管理应用程序的人员的合作来隔离传入连接,但出于资源池分配的目的对传入连接进行分类的选项在功能上是无限的。我建议坚持您在应用程序连接字符串上设置的连接属性。我最喜欢的是...
...但是您可以使用任何唯一(希望)适用于您想要限制的传入会话的任意逻辑。如果您感到危险,可以使用查找表并动态更改分类器函数的输出(尽管文档建议不要这样做)。
对于复制意大利面饥饿...
use [master]
go
create resource pool demo_pool;
create workload group demo_group using demo_pool;
create login my_bad_user with password='Plz_Halp_Me_StackExchange';
go
create or alter function dbo.GetResourceGroup()
returns sysname
with schemabinding
as
begin;
declare @rg sysname = 'default';
if original_login() = 'my_bad_user' set @rg = 'demo_group';
if host_name() = 'MYDOMAIN\APP_HOST_1' set @rg = 'demo_group';
if program_name() = 'My Custom Data Science App' set @rg = 'demo_group';
return @rg;
end;
go
alter resource pool demo_pool with (
max_cpu_percent = 25
,cap_cpu_percent = 25
);
go
alter resource governor with (classifier_function = dbo.GetResourceGroup);
alter resource governor reconfigure;
go
Run Code Online (Sandbox Code Playgroud)
use [master]
go
alter resource governor with (classifier_function = null)
alter resource governor disable;
drop workload group demo_group;
drop resource pool demo_pool;
drop login my_bad_user;
drop function if exists dbo.GetResourceGroup;
go
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |