This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 570c8e552f add workload analysis (#1019)
570c8e552f is described below

commit 570c8e552f76c0034c6e2cb335ef4c171012ccea
Author: wangbo <wan...@apache.org>
AuthorDate: Sat Aug 17 17:01:54 2024 +0800

    add workload analysis (#1019)
---
 ...rkload-system-table.md => workload-analysis.md} | 176 +++++++--------------
 1 file changed, 54 insertions(+), 122 deletions(-)

diff --git 
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/resource-admin/workload-system-table.md
 
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/resource-admin/workload-analysis.md
similarity index 50%
rename from 
i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/resource-admin/workload-system-table.md
rename to 
i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/resource-admin/workload-analysis.md
index 2e03ef09d4..fd90fea7b0 100644
--- 
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/resource-admin/workload-system-table.md
+++ 
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/admin-manual/resource-admin/workload-analysis.md
@@ -1,6 +1,6 @@
 ---
 {
-   "title": "Workload系统表",
+   "title": "工作负载分析",
    "language": "zh-CN"
 }
 ---
@@ -25,13 +25,9 @@ under the License.
 -->
 
 ## 背景
-Doris支持通过Workload系统表对运行中的工作负载的资源使用情况进行分析,常用于以下场景:
-
-1. 查看集群中Workload Group的资源用量,包括CPU和内存。
-2. 查看目前集群中目前资源用量最大的N个sql。
-3. 查看集群中Workload Group的排队情况
-
-用户可以通过提交sql的方式查询这些信息,找出目前系统中资源占用比较高的Workload Group或者sql,并进行相应的处理。
+Doris支持通过Workload系统表对集群中的工作负载进行分析,可以解决以下问题:
+1. 帮助用户了解每个Workload Group的资源利用率,合理的设置资源上限,避免资源的浪费。
+2. 当集群由于资源不足导致可用性下降时,可以使用系统表快速定位出目前资源使用的分布情况,从做出相应的资源管控决策,恢复集群的可用性。
 
 ## Workload系统表介绍
 目前系统表主要在```information_schema```库里。
@@ -63,75 +59,40 @@ Doris支持通过Workload系统表对运行中的工作负载的资源使用情
 * shuffle_send_bytes,查询在当前节点作为shuffle客户端发送的字节数
 * shuffle_send_rows,查询在当前节点作为shuffle客户端发送的行数
 
-## 基本用法
-1. 查看资源用量topN的sql
-    ```
-    select 
-            t2.query_id,
-            t2.workload_group_id,
-            t2.`database`,
-            t1.cpu_time,
-            t1.mem_used,
-            t2.`sql`
-    from
-    (select query_id, sum(task_cpu_time_ms) as 
cpu_time,sum(current_used_memory_bytes) as mem_used from backend_active_tasks 
group by query_id) 
-            t1 left join active_queries t2
-    on t1.query_id = t2.query_id 
-    order by cpu_time desc, mem_used desc limit 10;
-    ```
-
-2. 查看目前单BE上资源用量topN的sql
-    ```
-    select 
-            t2.query_id,
-            t2.workload_group_id,
-            t2.`database`,
-            t1.cpu_time,
-            t1.mem_used,
-            t2.`sql`
-    from
-    (select query_id, sum(task_cpu_time_ms) as 
cpu_time,sum(current_used_memory_bytes) as mem_used 
-        from backend_active_tasks where be_id=12345 group by query_id) 
-            t1 left join active_queries t2
-    on t1.query_id = t2.query_id 
-    order by cpu_time desc, mem_used desc limit 10;
-    ```
-
-
-3. 查看各个workload group运行中/排队的查询数量
-    ```
-    select 
-        workload_group_id, 
-        sum(case when query_status='QUEUED' then 1 else 0 end) as queue_num, 
-        sum(case when query_status='RUNNING' then 1 else 0 end) as 
running_query_num
-    from 
-        active_queries
-    group by workload_group_id
-    ```
-
-4. 查看各个workload group排队的都是哪些查询,以及排队的时间
-    ```
-    select 
-             workload_group_id,
-             query_id,
-             query_status,
-             now() - queue_start_time as queued_time
-    from 
-         active_queries
-    where query_status='queued'
-    order by workload_group_id
-    ```
-
-## 应用场景
-当集群的查询延迟上升时,可用性下降时,可以通过集群的整体监控确瓶颈点:
-1. 当BE的CPU资源用满,内存使用不高,说明主要瓶颈应该在CPU上。
-2. 当BE的CPU资源和内存资源使用都很高,说明主要瓶颈在内存上。
-3. 当BE的CPU资源和内存资源使用都不高,但是IO使用很高,说明主要瓶颈在IO上。
-4. CPU/内存/IO都不高,但是排队的查询较多,说明排队参数配置不合理,可以尝试调大排队并发。
-确认了集群的瓶颈点之后,可以通过workload group系统表进一步分析出目前使用资源较多的sql,然后进行查询的降级处理。
-
-### 找出CPU使用最高的sql
-1. CPU使用topN的sql
+### workload_group_resource_usage
+```workload_group_resource_usage```实时展示了Workload Group当前的资源用量。
+字段说明如下:
+* be_id,be的id
+* workload_group_id,workload group的id
+* memory_usage_bytes,workload group的内存用量
+* cpu_usage_percent,workload group CPU用量的百分比,计算方式为1s内Workload 
Group总的CPU活跃时间/1s内总可用的CPU时间,该值取的是最近10s的平均值。
+* local_scan_bytes_per_second,workload group读本地文件的每秒字节数。
+需要注意的是,由于Doris的Page 
Cache和操作系统缓存的存在,该值通常要大于使用pidstat等系统工具监控到的值。如果配置了多个文件夹,那么该值为所有文件夹读IO的累加值。
+如果需要每个文件夹粒度的读IO吞吐,可以在BE的bvar监控上看到明细数据。
+* remote_scan_bytes_per_second,workload group读远程数据的每秒字节数。
+
+## 工作负载分析与处理方法
+当通过监控发现集群的可用性下降时,可以按照以下流程进行处理:
+1. 先通过监控大致判断目前集群的瓶颈点,比如是内存用量过高,CPU用量过高,还是IO过高,如果都很高,那么可以考虑优先解决内存的问题。
+2. 
确定了集群瓶颈点之后,可以通过```workload_group_resource_usage```表来查看目前资源用量最高的Group,比如是内存瓶颈,那么可以先找出内存用量最高的N个Group。
+3. 确定了资源用量最高的Group之后,首先可以尝试调低这个Group的查询并发,因为此时集群资源已经很紧张了,要避免持续有新的查询进来耗尽集群的资源。
+4. 对当前Group的查询进行降级,根据瓶颈点的不同,可以有不同的处理方法:
+* 如果是CPU瓶颈,那么可以尝试把这个Group的CPU修改为硬限,并将```cpu_hard_limit```设置为一个较低的值,主动让出CPU资源。
+* 如果是IO瓶颈,可以通过```read_bytes_per_second```参数限制该Group的最大IO。
+* 
如果是内存瓶颈,可以通过设置该Group的内存为硬限,并调低```memory_limit```的值,来释放部分内存,需要注意的是这可能会导致当前Group大量查询失败。
+5. 完成以上步骤后,通常集群的可用性会有所恢复。此时可以做更进一步的分析,也就是引起该Group资源用量升高的主要原因,
+是这个Group的整体查询并发升高导致的还是某些大查询导致的,如果是某些大查询导致的,那么可以通过快速杀死这些大查询的方式进行故障恢复。
+6. 
可以使用```backend_active_tasks```结合```active_queries```找出目前集群中资源用量比较异常的SQL,然后通过kill语句杀死这些SQL释放资源。
+
+## 常用SQL
+1. 查看目前所有的Workload Group并依次按照内存/CPU/IO降序显示。
+```
+select 
be_id,workload_group_id,memory_usage_bytes,cpu_usage_percent,local_scan_bytes_per_second
 
+   from workload_group_resource_usage
+order by  memory_usage_bytes,cpu_usage_percent,local_scan_bytes_per_second desc
+```
+
+2. CPU使用topN的sql
     ```
     select 
             t2.query_id,
@@ -146,24 +107,7 @@ Doris支持通过Workload系统表对运行中的工作负载的资源使用情
     order by cpu_time desc limit 10;
     ```
 
-2. 统计workload group的cpu时间
-    ```
-    select 
-            t2.workload_group_id,
-            sum(t1.cpu_time) cpu_time
-    from
-    (select query_id, sum(task_cpu_time_ms) as cpu_time from 
backend_active_tasks group by query_id) 
-            t1 left join active_queries t2
-    on t1.query_id = t2.query_id 
-    group by workload_group_id order by cpu_time desc
-    ```
-
-如果是单sql的CPU使用率过高,那么可以通过取消查询的方式来缓解。
-    
-如果是cpu时间较长的sql都来自于同一个workload group,那么可以通过调低这个workload 
group的cpu优先级或者调低scan线程的数量来降低cpu的使用。
-
-### 找出内存使用最高的sql
-1. 内存使用topN的sql
+3. 内存使用topN的sql
     ```
     select 
             t2.query_id,
@@ -176,28 +120,7 @@ Doris支持通过Workload系统表对运行中的工作负载的资源使用情
     order by mem_used desc limit 10;
     ```
 
-2. 各个workload group的内存用量
-    ```
-    select 
-            t2.workload_group_id,
-            sum(t1.mem_used) wg_mem_used
-    from
-    (select query_id, sum(current_used_memory_bytes) as mem_used from 
backend_active_tasks group by query_id) 
-            t1 left join active_queries t2
-    on t1.query_id = t2.query_id 
-    group by t2.workload_group_id order by wg_mem_used desc
-    ```
-
-如果是单个查询占掉了大部分内存,那么可以通过取消这个查询来快速释放内存。
-
-如果有优先级较低的workload group使用了较多的内存,那么可以通过对这个workload group进行降级来释放内存:
-1. 如果内存配置的是软限,那么可以修改为硬限,并减小workload group的内存限制
-2. 通过workload group的排队功能降低这个workload的查询并发
-
-### 找出扫描数据量过高的查询
-目前Doris没有直接收集查询的磁盘IO的指标,不过可以通过扫描数据的行数和字节数进行间接的判断
-
-1. 扫描数据量topN的sql
+4. 扫描数据量topN的sql
     ```
     select 
             t2.query_id,
@@ -211,7 +134,7 @@ Doris支持通过Workload系统表对运行中的工作负载的资源使用情
     order by scan_rows desc,scan_bytes desc limit 10;
     ```
 
-2. 各个workload group的scan数据量
+5. 各个workload group的scan数据量
     ```
     select 
             t2.workload_group_id,
@@ -224,7 +147,16 @@ Doris支持通过Workload系统表对运行中的工作负载的资源使用情
     group by t2.workload_group_id
     order by wg_scan_rows desc,wg_scan_bytes desc
     ```
-    
-如果是单个sql的scan数据量较大,那么可以通过杀死查询的方式查看是否会有缓解
-    
-如果是某个workload group的扫描数据量较大,那么可以通过调低workload group的扫描线程数来降低IO
\ No newline at end of file
+
+6. 查看各个workload group排队的都是哪些查询,以及排队的时间
+    ```
+    select 
+             workload_group_id,
+             query_id,
+             query_status,
+             now() - queue_start_time as queued_time
+    from 
+         active_queries
+    where query_status='queued'
+    order by workload_group_id
+    ```
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to