请求限制策略

工作负荷组的请求限制策略允许限制请求在其执行过程中使用的资源。

策略对象

每个限制包括:

  • 键入的 Value - 限制的值。
  • IsRelaxable - 一个布尔值,作为请求的请求属性的一部分,它定义了调用方是否可以放宽限制。

以下限制是可配置的:

properties 类型​​ 说明 支持的值 匹配客户端请求属性
DataScope string 查询的数据范围。 此值可确定查询是应用于所有数据还是仅应用于热缓存。 AllHotCachenull query_datascope
MaxMemoryPerQueryPerNode long 查询可分配的最大内存量(以字节为单位)。 [1,单节点总 RAM 的 50%] max_memory_consumption_per_query_per_node
MaxMemoryPerIterator long 查询运算符可分配的最大内存量(以字节为单位)。 [1,单节点总 RAM 的 50%] maxmemoryconsumptionperiterator
MaxFanoutThreadsPercentage int 每个节点上要扇出查询执行的线程的百分比。 如果设置为 100%,则群集会分配每个节点上的所有 CPU。 例如,Azure D14_v2 节点上部署的某个群集上的 16 个 CPU。 [1, 100] query_fanout_threads_percent
MaxFanoutNodesPercentage int 群集上要扇出查询执行的节点的百分比。 函数的使用方式类似于 MaxFanoutThreadsPercentage [1, 100] query_fanout_nodes_percent
MaxResultRecords long 允许请求返回到调用方的最大记录数,超过该数目的结果将被截断。 截断限制会影响传递回客户端的最终查询结果。 但是,截断限制不适用于子查询的中间结果,例如由跨群集引用产生的结果。 [1, 9223372036854775807] truncationmaxrecords
MaxResultBytes long 允许请求返回到调用方的最大数据大小(以字节为单位),超过该数目的结果将被截断。 截断限制会影响传递回客户端的最终查询结果。 但是,截断限制不适用于子查询的中间结果,例如由跨群集引用产生的结果。 [1, 9223372036854775807] truncationmaxsize
MaxExecutionTime timespan 请求的最大持续时间。
注意:
1) 这可用于在默认执行时间限制之上设置更多限制,但不延长这些限制。
2) 超时处理并不是要解决数秒的问题,而是设计用于阻止查询运行数分钟 。
3) 在客户端上读回有效负载所花费的时间不计入超时。 这取决于调用方从流中拉取数据的速度。
4) 如果中止执行需要更长的时间才能完成,则总执行时间可能会超过配置的值。
[00:00:00, 01:00:00] servertimeout

注意

未定义或定义为 null 的限制,取自 default 工作负荷组的请求限制策略。

CPU 资源使用情况

查询可以使用群集中的所有 CPU 资源。 默认情况下,当多个查询同时运行时,系统会采用公平的轮循方法来分配资源。 此策略最适合使用临时查询实现高性能。

但是,在某些情况下,你可能想要限制分配给特定查询的 CPU 资源。 例如,如果运行的后台作业可以容纳更高的延迟。 请求限制策略可以灵活地指定执行分布式子查询操作时要使用的线程或节点的较低百分比值。 默认设置为 100%。

default 工作负荷组

默认情况下,default 工作负荷组定义了以下策略。 此策略可修改。

{
  "DataScope": {
    "IsRelaxable": true,
    "Value": "All"
  },
  "MaxMemoryPerQueryPerNode": {
    "IsRelaxable": true,
    "Value": < 50% of a single node's total RAM >
  },
  "MaxMemoryPerIterator": {
    "IsRelaxable": true,
    "Value": 5368709120
  },
  "MaxFanoutThreadsPercentage": {
    "IsRelaxable": true,
    "Value": 100
  },
  "MaxFanoutNodesPercentage": {
    "IsRelaxable": true,
    "Value": 100
  },
  "MaxResultRecords": {
    "IsRelaxable": true,
    "Value": 500000
  },
  "MaxResultBytes": {
    "IsRelaxable": true,
    "Value": 67108864
  },
  "MaxExecutiontime": {
    "IsRelaxable": true,
    "Value": "00:04:00"
  }
}

注意

  • 必须定义 default 工作负荷组中的限制,并且具有非 null 值。
  • default 工作负荷组中的所有限制的 IsRelaxable 设置为 true
  • default 工作负荷组中的特定命令类型(如 .export 命令以及 .set-or-append.set-or-replace从查询引入命令),请求限制将被关闭。 当这些命令被分配给非默认工作负荷组时,策略中指定的请求限制将适用。

示例

以下 JSON 表示自定义请求限制策略对象:

{
  "DataScope": {
    "IsRelaxable": true,
    "Value": "HotCache"
  },
  "MaxMemoryPerQueryPerNode": {
    "IsRelaxable": true,
    "Value": 2684354560
  },
  "MaxMemoryPerIterator": {
    "IsRelaxable": true,
    "Value": 2684354560
  },
  "MaxFanoutThreadsPercentage": {
    "IsRelaxable": true,
    "Value": 50
  },
  "MaxFanoutNodesPercentage": {
    "IsRelaxable": true,
    "Value": 50
  },
  "MaxResultRecords": {
    "IsRelaxable": true,
    "Value": 1000
  },
  "MaxResultBytes": {
    "IsRelaxable": true,
    "Value": 33554432
  },
  "MaxExecutiontime": {
    "IsRelaxable": true,
    "Value": "00:01:00"
  }
}