From eb3fa7dab0ae0b7fca4a9a3475952d195af6e3d2 Mon Sep 17 00:00:00 2001 From: xixirangrang <35301108+hfxsd@users.noreply.github.com> Date: Tue, 17 Oct 2023 16:01:01 +0800 Subject: [PATCH 1/4] Update sql-statement-explain-analyze.md --- .../sql-statement-explain-analyze.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/sql-statements/sql-statement-explain-analyze.md b/sql-statements/sql-statement-explain-analyze.md index 37574321f56d..3cdfb5e551a7 100644 --- a/sql-statements/sql-statement-explain-analyze.md +++ b/sql-statements/sql-statement-explain-analyze.md @@ -294,6 +294,51 @@ RU:273.842670 > > 该值仅表示本次执行的实际 RU 消耗。由于受缓存的影响(比如[下推计算结果缓存](/coprocessor-cache.md)),同一个 SQL 在每次执行时消耗的 RU 可能会不同。 +RU 计数可以通过 `EXPLAIN ANALYZE` 中的其他值计算得出,特别是 `executeInfo` 区块。例如: + +``` + 'executeInfo': + time:2.55ms, + loops:2, + RU:0.329460, + Get:{ + num_rpc:1, + total_time:2.13ms + }, + total_process_time: 231.5µs, + total_wait_time: 732.9µs, + tikv_wall_time: 995.8µs, + scan_detail: { + total_process_keys: 1, + total_process_keys_size: 150, + total_keys: 1, + get_snapshot_time: 691.7µs, + rocksdb: { + block: { + cache_hit_count: 2, + read_count: 1, + read_byte: 8.19 KB, + read_time: 10.3µs + } + } + }, +``` + +关于基础成本信息,请参考 [pd source](https://github.com/tikv/pd/blob/aeb259335644d65a97285d7e62b38e7e43c6ddca/client/resource_group/controller/config.go#L58C19-L67)。相关计算是通过 [model.go](https://github.com/tikv/pd/blob/54219d649fb4c8834cd94362a63988f3c074d33e/client/resource_group/controller/model.go#L107) 完成的。 + +如果您使用的是 7.1+ 版本,计算方法是 `pd/pd-client/model.go` 中的 `BeforeKVRequest() + AfterKVRequest()`,即总和: + +``` +before key/value request is processed: + consumption.RRU += float64(kc.ReadBaseCost) -> kv.ReadBaseCost * rpc_nums + +after key/value request is processed: + consumption.RRU += float64(kc.ReadBytesCost) * readBytes -> kc.ReadBytesCost * total_process_keys_size + consumption.RRU += float64(kc.CPUMsCost) * kvCPUMs -> kc.CPUMsCost * total_process_time +``` + +对于 writes 和 batch gets,计算方法相似,只是基础值不同。 + ### 其它常见执行信息 Coprocessor 算子通常包含 `cop_task` 和 `tikv_task` 两部分执行时间信息。前者是 TiDB 端记录的时间,从发出请求到接收回复;后者是 TiKV Coprocessor 算子自己记录的时间。两者相差较大可能说明在等待、gRPC 或网络上耗时较长。 From 3def40c410c8a1d7864d0724c178c17fdd259a99 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 17 Oct 2023 16:08:22 +0800 Subject: [PATCH 2/4] Update sql-statements/sql-statement-explain-analyze.md Co-authored-by: ShuNing --- sql-statements/sql-statement-explain-analyze.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-explain-analyze.md b/sql-statements/sql-statement-explain-analyze.md index 3cdfb5e551a7..53ba2e9046db 100644 --- a/sql-statements/sql-statement-explain-analyze.md +++ b/sql-statements/sql-statement-explain-analyze.md @@ -326,7 +326,7 @@ RU 计数可以通过 `EXPLAIN ANALYZE` 中的其他值计算得出,特别是 关于基础成本信息,请参考 [pd source](https://github.com/tikv/pd/blob/aeb259335644d65a97285d7e62b38e7e43c6ddca/client/resource_group/controller/config.go#L58C19-L67)。相关计算是通过 [model.go](https://github.com/tikv/pd/blob/54219d649fb4c8834cd94362a63988f3c074d33e/client/resource_group/controller/model.go#L107) 完成的。 -如果您使用的是 7.1+ 版本,计算方法是 `pd/pd-client/model.go` 中的 `BeforeKVRequest() + AfterKVRequest()`,即总和: +如果您使用的是 7.1 版本,计算方法是 `pd/pd-client/model.go` 中的 `BeforeKVRequest() + AfterKVRequest()`,即总和: ``` before key/value request is processed: From 89927c6a1d18d3d0107f20a3d8b8359c26fe56d9 Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 17 Oct 2023 16:10:01 +0800 Subject: [PATCH 3/4] Update sql-statements/sql-statement-explain-analyze.md --- sql-statements/sql-statement-explain-analyze.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql-statements/sql-statement-explain-analyze.md b/sql-statements/sql-statement-explain-analyze.md index 53ba2e9046db..93d3885f13a1 100644 --- a/sql-statements/sql-statement-explain-analyze.md +++ b/sql-statements/sql-statement-explain-analyze.md @@ -326,7 +326,7 @@ RU 计数可以通过 `EXPLAIN ANALYZE` 中的其他值计算得出,特别是 关于基础成本信息,请参考 [pd source](https://github.com/tikv/pd/blob/aeb259335644d65a97285d7e62b38e7e43c6ddca/client/resource_group/controller/config.go#L58C19-L67)。相关计算是通过 [model.go](https://github.com/tikv/pd/blob/54219d649fb4c8834cd94362a63988f3c074d33e/client/resource_group/controller/model.go#L107) 完成的。 -如果您使用的是 7.1 版本,计算方法是 `pd/pd-client/model.go` 中的 `BeforeKVRequest() + AfterKVRequest()`,即总和: +如果您使用的是 TiDB v7.1 版本,计算方法是 `pd/pd-client/model.go` 中的 `BeforeKVRequest() + AfterKVRequest()`,即总和: ``` before key/value request is processed: From de2ab7279d230e3c497a4873a5cea145e78e004d Mon Sep 17 00:00:00 2001 From: xixirangrang Date: Tue, 17 Oct 2023 20:59:35 +0800 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: Aolin --- sql-statements/sql-statement-explain-analyze.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sql-statements/sql-statement-explain-analyze.md b/sql-statements/sql-statement-explain-analyze.md index 93d3885f13a1..ffa05eab54f2 100644 --- a/sql-statements/sql-statement-explain-analyze.md +++ b/sql-statements/sql-statement-explain-analyze.md @@ -294,7 +294,7 @@ RU:273.842670 > > 该值仅表示本次执行的实际 RU 消耗。由于受缓存的影响(比如[下推计算结果缓存](/coprocessor-cache.md)),同一个 SQL 在每次执行时消耗的 RU 可能会不同。 -RU 计数可以通过 `EXPLAIN ANALYZE` 中的其他值计算得出,特别是 `executeInfo` 区块。例如: +RU 计数可以通过 `EXPLAIN ANALYZE` 中的其他值计算得出,特别是 `execution info` 列。例如: ``` 'executeInfo': @@ -324,9 +324,9 @@ RU 计数可以通过 `EXPLAIN ANALYZE` 中的其他值计算得出,特别是 }, ``` -关于基础成本信息,请参考 [pd source](https://github.com/tikv/pd/blob/aeb259335644d65a97285d7e62b38e7e43c6ddca/client/resource_group/controller/config.go#L58C19-L67)。相关计算是通过 [model.go](https://github.com/tikv/pd/blob/54219d649fb4c8834cd94362a63988f3c074d33e/client/resource_group/controller/model.go#L107) 完成的。 +关于基础成本信息,请参考 [`tikv/pd` 源码](https://github.com/tikv/pd/blob/aeb259335644d65a97285d7e62b38e7e43c6ddca/client/resource_group/controller/config.go#L58C19-L67)。相关计算是通过 [`model.go`](https://github.com/tikv/pd/blob/54219d649fb4c8834cd94362a63988f3c074d33e/client/resource_group/controller/model.go#L107) 完成的。 -如果您使用的是 TiDB v7.1 版本,计算方法是 `pd/pd-client/model.go` 中的 `BeforeKVRequest() + AfterKVRequest()`,即总和: +如果你使用的是 TiDB v7.1,计算方法是 `pd/pd-client/model.go` 中的 `BeforeKVRequest() + AfterKVRequest()`,即总和: ``` before key/value request is processed: @@ -337,7 +337,7 @@ after key/value request is processed: consumption.RRU += float64(kc.CPUMsCost) * kvCPUMs -> kc.CPUMsCost * total_process_time ``` -对于 writes 和 batch gets,计算方法相似,只是基础值不同。 +对于 writes 和 batch gets,计算方法相似,只是基础成本不同。 ### 其它常见执行信息