diff --git a/docs/admin-manual/workload-management/sql-blocking.md b/docs/admin-manual/workload-management/sql-blocking.md index c0f7a729c9926..95cc74a9630a4 100644 --- a/docs/admin-manual/workload-management/sql-blocking.md +++ b/docs/admin-manual/workload-management/sql-blocking.md @@ -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) | @@ -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. diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/workload-management/sql-blocking.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/workload-management/sql-blocking.md index 08ba3258efc22..0587b236b15cd 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/workload-management/sql-blocking.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/workload-management/sql-blocking.md @@ -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 进程上的运行时间(单位:毫秒) | @@ -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,需删除后重新创建。 diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/admin-manual/workload-management/sql-blocking.md b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/admin-manual/workload-management/sql-blocking.md index 626b91a492b63..9f64d42f702f6 100644 --- a/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/admin-manual/workload-management/sql-blocking.md +++ b/i18n/zh-CN/docusaurus-plugin-content-docs/version-4.x/admin-manual/workload-management/sql-blocking.md @@ -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 进程上的运行时间(单位:毫秒) | @@ -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,需删除后重新创建。 diff --git a/versioned_docs/version-4.x/admin-manual/workload-management/sql-blocking.md b/versioned_docs/version-4.x/admin-manual/workload-management/sql-blocking.md index 2c07945ffe5f2..f7813a2fe1289 100644 --- a/versioned_docs/version-4.x/admin-manual/workload-management/sql-blocking.md +++ b/versioned_docs/version-4.x/admin-manual/workload-management/sql-blocking.md @@ -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) | @@ -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.