Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 15 additions & 2 deletions docs/admin-manual/workload-management/sql-blocking.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ Conditions specify when the policy is triggered. Multiple conditions are separat

| Condition | Description |
|-----------|------|
| `username` | The username carried by the query. Only triggers the `set_session_variable` Action on the FE |
| `username` | The username carried by the query. It can trigger the FE-side `set_session_variable` Action. Starting from Doris 4.1.3, it can also be combined with BE-side runtime metrics such as `query_time`, `be_scan_rows`, `be_scan_bytes`, and `query_be_memory_bytes` to trigger `cancel_query`. This condition only supports the equality operator (`=`), and the username cannot be empty |
| `be_scan_rows` | The number of rows scanned by a SQL within a single BE process. Cumulative value under concurrent execution |
| `be_scan_bytes` | The number of bytes scanned by a SQL within a single BE process. Cumulative value under concurrent execution (unit: bytes) |
| `query_time` | The execution time of a SQL on a single BE process (unit: milliseconds) |
Expand Down Expand Up @@ -331,9 +331,22 @@ MySQL [(none)]> show variables like '%parallel_fragment_exec_instance_num%';
1 row in set (0.01 sec)
```

#### Example 3: Break Runtime Large Queries for a Specific User

Starting from Doris 4.1.3, you can combine `username` with BE-side runtime metrics to cancel only the queries of a specific user. The following policy cancels queries submitted by `test_user` when their running time on a single BE exceeds 3000 ms:

```sql
CREATE WORKLOAD POLICY cancel_user_long_query
CONDITIONS(username='test_user', query_time > 3000)
ACTIONS(cancel_query);
```

Similarly, `username` can be combined with `be_scan_rows`, `be_scan_bytes`, or `query_be_memory_bytes` to limit the scan volume or BE memory usage of a specific user.

### Notes

- **FE/BE side isolation**: The Condition and Action of the same Policy must belong to the same side (FE or BE). For example, `set_session_variable` (FE side) and `cancel_query` (BE side) cannot be configured in the same Policy. The same applies to `username` (FE side) and `be_scan_rows` (BE side).
- **FE/BE side isolation**: The Condition and Action of the same Policy must belong to the same side (FE or BE). `set_session_variable` is an FE-side Action and cannot be combined with BE-side metrics such as `query_time` or `be_scan_rows`. `cancel_query` is a BE-side Action and can be combined with BE-side runtime metrics.
- **`username` condition limit**: `username` is a shared condition. It can be used with FE-side `set_session_variable`; starting from Doris 4.1.3, it can also be used with BE-side runtime metrics to trigger `cancel_query`. The `username` condition only supports equality (`=`); comparison operators such as `>`, `>=`, `<`, and `<=` are not supported. If the BE cannot obtain explicit user information for a query, the `username` condition does not match.
- **Asynchronous execution latency**: Policies are checked by an asynchronous thread every 500 ms, so policy enforcement has some lag. Queries that run for a very short time may complete before the check is triggered and bypass the policy.
- **Priority mechanism**: A query may match multiple Policies, but only the one with the highest priority (largest `priority` value) takes effect.
- **Modification limit**: Currently, directly modifying the Action and Condition of an existing Policy is not supported. Delete the Policy and recreate it.
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ Conditions 表示策略的触发条件,多个条件之间以逗号 `,` 分隔

| Condition | 说明 |
|-----------|------|
| `username` | 查询携带的用户名,只会在 FE 触发 `set_session_variable` Action |
| `username` | 查询携带的用户名。可用于 FE 侧触发 `set_session_variable` Action;自 Doris 4.1.3 版本起,也可与 `query_time`、`be_scan_rows`、`be_scan_bytes`、`query_be_memory_bytes` 等 BE 侧运行时指标组合,用于触发 `cancel_query`。该条件仅支持等值比较(`=`),用户名不能为空 |
| `be_scan_rows` | 一个 SQL 在单个 BE 进程内扫描的行数,多并发执行时为累加值 |
| `be_scan_bytes` | 一个 SQL 在单个 BE 进程内扫描的字节数,多并发执行时为累加值(单位:字节) |
| `query_time` | 一个 SQL 在单个 BE 进程上的运行时间(单位:毫秒) |
Expand Down Expand Up @@ -331,9 +331,22 @@ MySQL [(none)]> show variables like '%parallel_fragment_exec_instance_num%';
1 row in set (0.01 sec)
```

#### 示例三:按用户熔断运行时大查询

自 Doris 4.1.3 版本起,可以将 `username` 与 BE 侧运行时指标组合,仅取消特定用户的查询。以下策略会在 `test_user` 提交的查询在单个 BE 上运行超过 3000 ms 时取消该查询:

```sql
CREATE WORKLOAD POLICY cancel_user_long_query
CONDITIONS(username='test_user', query_time > 3000)
ACTIONS(cancel_query);
```

同理,也可以将 `username` 与 `be_scan_rows`、`be_scan_bytes` 或 `query_be_memory_bytes` 组合,用于限制特定用户的扫描量或 BE 内存使用量。

### 注意事项

- **FE/BE 侧隔离**:同一个 Policy 的 Condition 和 Action 必须属于同一侧(FE 或 BE)。例如,`set_session_variable`(FE 侧)和 `cancel_query`(BE 侧)不能配置在同一 Policy 中;`username`(FE 侧)和 `be_scan_rows`(BE 侧)同理。
- **FE/BE 侧隔离**:同一个 Policy 的 Condition 和 Action 必须属于同一侧(FE 或 BE)。`set_session_variable` 是 FE 侧 Action,不能与 `query_time`、`be_scan_rows` 等 BE 侧指标组合;`cancel_query` 是 BE 侧 Action,可与 BE 侧运行时指标组合。
- **`username` 条件限制**:`username` 是共享条件,可用于 FE 侧 `set_session_variable`;自 Doris 4.1.3 版本起,也可与 BE 侧运行时指标组合触发 `cancel_query`。`username` 条件仅支持等值比较(`=`),不支持 `>`、`>=`、`<`、`<=` 等比较操作符。如果 BE 无法获取查询明确携带的用户信息,则 `username` 条件不会匹配。
- **异步执行延迟**:Policy 由异步线程每 500 ms 执行一次检查,策略生效存在一定滞后。运行时间极短的查询可能会在检查触发前已完成,从而绕过策略。
- **优先级机制**:一个查询可能匹配多个 Policy,但只有优先级最高(`priority` 值最大)的 Policy 会生效。
- **修改限制**:目前不支持直接修改已有 Policy 的 Action 和 Condition,需删除后重新创建。
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ Conditions 表示策略的触发条件,多个条件之间以逗号 `,` 分隔

| Condition | 说明 |
|-----------|------|
| `username` | 查询携带的用户名,只会在 FE 触发 `set_session_variable` Action |
| `username` | 查询携带的用户名。可用于 FE 侧触发 `set_session_variable` Action;自 Doris 4.1.3 版本起,也可与 `query_time`、`be_scan_rows`、`be_scan_bytes`、`query_be_memory_bytes` 等 BE 侧运行时指标组合,用于触发 `cancel_query`。该条件仅支持等值比较(`=`),用户名不能为空 |
| `be_scan_rows` | 一个 SQL 在单个 BE 进程内扫描的行数,多并发执行时为累加值 |
| `be_scan_bytes` | 一个 SQL 在单个 BE 进程内扫描的字节数,多并发执行时为累加值(单位:字节) |
| `query_time` | 一个 SQL 在单个 BE 进程上的运行时间(单位:毫秒) |
Expand Down Expand Up @@ -348,9 +348,22 @@ MySQL [(none)]> show variables like '%parallel_fragment_exec_instance_num%';
1 row in set (0.01 sec)
```

#### 示例三:按用户熔断运行时大查询

自 Doris 4.1.3 版本起,可以将 `username` 与 BE 侧运行时指标组合,仅取消特定用户的查询。以下策略会在 `test_user` 提交的查询在单个 BE 上运行超过 3000 ms 时取消该查询:

```sql
CREATE WORKLOAD POLICY cancel_user_long_query
CONDITIONS(username='test_user', query_time > 3000)
ACTIONS(cancel_query);
```

同理,也可以将 `username` 与 `be_scan_rows`、`be_scan_bytes` 或 `query_be_memory_bytes` 组合,用于限制特定用户的扫描量或 BE 内存使用量。

### 注意事项

- **FE/BE 侧隔离**:同一个 Policy 的 Condition 和 Action 必须属于同一侧(FE 或 BE)。例如,`set_session_variable`(FE 侧)和 `cancel_query`(BE 侧)不能配置在同一 Policy 中;`username`(FE 侧)和 `be_scan_rows`(BE 侧)同理。
- **FE/BE 侧隔离**:同一个 Policy 的 Condition 和 Action 必须属于同一侧(FE 或 BE)。`set_session_variable` 是 FE 侧 Action,不能与 `query_time`、`be_scan_rows` 等 BE 侧指标组合;`cancel_query` 是 BE 侧 Action,可与 BE 侧运行时指标组合。
- **`username` 条件限制**:`username` 是共享条件,可用于 FE 侧 `set_session_variable`;自 Doris 4.1.3 版本起,也可与 BE 侧运行时指标组合触发 `cancel_query`。`username` 条件仅支持等值比较(`=`),不支持 `>`、`>=`、`<`、`<=` 等比较操作符。如果 BE 无法获取查询明确携带的用户信息,则 `username` 条件不会匹配。
- **异步执行延迟**:Policy 由异步线程每 500 ms 执行一次检查,策略生效存在一定滞后。运行时间极短的查询可能会在检查触发前已完成,从而绕过策略。
- **优先级机制**:一个查询可能匹配多个 Policy,但只有优先级最高(`priority` 值最大)的 Policy 会生效。
- **修改限制**:目前不支持直接修改已有 Policy 的 Action 和 Condition,需删除后重新创建。
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ Conditions specify when the policy is triggered. Multiple conditions are separat

| Condition | Description |
|-----------|------|
| `username` | The username carried by the query. Only triggers the `set_session_variable` Action on the FE |
| `username` | The username carried by the query. It can trigger the FE-side `set_session_variable` Action. Starting from Doris 4.1.3, it can also be combined with BE-side runtime metrics such as `query_time`, `be_scan_rows`, `be_scan_bytes`, and `query_be_memory_bytes` to trigger `cancel_query`. This condition only supports the equality operator (`=`), and the username cannot be empty |
| `be_scan_rows` | The number of rows scanned by a SQL within a single BE process. Cumulative value under concurrent execution |
| `be_scan_bytes` | The number of bytes scanned by a SQL within a single BE process. Cumulative value under concurrent execution (unit: bytes) |
| `query_time` | The execution time of a SQL on a single BE process (unit: milliseconds) |
Expand Down Expand Up @@ -348,9 +348,22 @@ MySQL [(none)]> show variables like '%parallel_fragment_exec_instance_num%';
1 row in set (0.01 sec)
```

#### Example 3: Break Runtime Large Queries for a Specific User

Starting from Doris 4.1.3, you can combine `username` with BE-side runtime metrics to cancel only the queries of a specific user. The following policy cancels queries submitted by `test_user` when their running time on a single BE exceeds 3000 ms:

```sql
CREATE WORKLOAD POLICY cancel_user_long_query
CONDITIONS(username='test_user', query_time > 3000)
ACTIONS(cancel_query);
```

Similarly, `username` can be combined with `be_scan_rows`, `be_scan_bytes`, or `query_be_memory_bytes` to limit the scan volume or BE memory usage of a specific user.

### Notes

- **FE/BE side isolation**: The Condition and Action of the same Policy must belong to the same side (FE or BE). For example, `set_session_variable` (FE side) and `cancel_query` (BE side) cannot be configured in the same Policy. The same applies to `username` (FE side) and `be_scan_rows` (BE side).
- **FE/BE side isolation**: The Condition and Action of the same Policy must belong to the same side (FE or BE). `set_session_variable` is an FE-side Action and cannot be combined with BE-side metrics such as `query_time` or `be_scan_rows`. `cancel_query` is a BE-side Action and can be combined with BE-side runtime metrics.
- **`username` condition limit**: `username` is a shared condition. It can be used with FE-side `set_session_variable`; starting from Doris 4.1.3, it can also be used with BE-side runtime metrics to trigger `cancel_query`. The `username` condition only supports equality (`=`); comparison operators such as `>`, `>=`, `<`, and `<=` are not supported. If the BE cannot obtain explicit user information for a query, the `username` condition does not match.
- **Asynchronous execution latency**: Policies are checked by an asynchronous thread every 500 ms, so policy enforcement has some lag. Queries that run for a very short time may complete before the check is triggered and bypass the policy.
- **Priority mechanism**: A query may match multiple Policies, but only the one with the highest priority (largest `priority` value) takes effect.
- **Modification limit**: Currently, directly modifying the Action and Condition of an existing Policy is not supported. Delete the Policy and recreate it.