sql-server - 限制 SQL Server 中用户查询的大小和/或频率

标签 sql-server permissions resources limit database-administration

是否可以对 SQL Server(或者其他引擎)中用户查询的“大小”和频率设置上限?例如:

假设有几个表有数百万行。也许有一些管理员和分析师在处理表,他们足够了解自己的方法,不会运行任何可能运行几分钟/几小时的不必要的繁重查询。

但是,不太熟悉 SQL 的销售/营销人员/管理人员更有可能运行繁重的查询,例如有大量的连接,无论是偶然的还是只是为了好玩。乘以几十个,服务器就会受到严重打击。

理想情况下,我希望有如下限制:

  1. 如果引擎预计行扫描次数将超过一百万次,请取消查询(并告诉用户取消的原因)。
  2. 将单个用户在 10 分钟内运行的查询限制为 20 个查询。
  3. 用户/角色级别“上限”

最佳答案

您要查找的功能名为 Resource Governor .

您可以对传入连接进行分类并将其分配给 Workload Group ,指定资源访问策略

CREATE WORKLOAD GROUP group_name
[ WITH
    ( [ IMPORTANCE = { LOW | MEDIUM | HIGH } ]
      [ [ , ] REQUEST_MAX_MEMORY_GRANT_PERCENT = value ]
      [ [ , ] REQUEST_MAX_CPU_TIME_SEC = value ]
      [ [ , ] REQUEST_MEMORY_GRANT_TIMEOUT_SEC = value ]
      [ [ , ] MAX_DOP = value ]
      [ [ , ] GROUP_MAX_REQUESTS = value ] )
 ]
[ USING {
    [ pool_name | "default" ]
    [ [ , ] EXTERNAL external_pool_name | "default" ] ]
    } ]
[ ; ]

并映射到 Resource Pool对服务器资源的访问受到限制。

In the SQL Server Resource Governor, a resource pool represents a subset of the physical resources of an instance of the Database Engine. Resource Governor enables you to specify limits on the amount of CPU, physical IO, and memory that incoming application requests can use within the resource pool. Each resource pool can contain one or more workload groups.

将资源调控器与报告用户基于快照的读取结合起来非常重要,可以使用 SNAPSHOT 隔离,或者将数据库设置为 READ_COMMITTED_SNAPSHOT。否则,对资源的访问权限有限的报告用户可能会获取干扰其他工作负载的锁。

关于sql-server - 限制 SQL Server 中用户查询的大小和/或频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63530157/

相关文章:

sql-server - SQL Server 在安装 witch chocolatey 时无法授权用户(通过 chef)

ios - iOS Facebook在登录和权限之间切换回应用程序

Android - 应用程序未安装

linux - centos自动修改权限

c# - View 中加载的某些资源未本地化,为什么?

c# - ResourceSet 不加载子文件夹的子文件夹中的项目

android - Android中如何访问property资源文件来解析Maven项目信息?

sql-server - 如何从 TIME 值中获取总毫秒数

sql-server - SQL Server : function return column values that can be used in where clause?

sql-server - SQL中表名前面的 "#"是什么意思?