diff --git a/experimental-features.md b/experimental-features.md index 1db44e3191fb..ee8566ec420a 100644 --- a/experimental-features.md +++ b/experimental-features.md @@ -61,3 +61,4 @@ aliases: ['/docs-cn/dev/experimental-features-4.0/','/zh/tidb/dev/experimental-f + [SQL 诊断](/information-schema/information-schema-sql-diagnostics.md)。(v4.0 实验特性) + [集群诊断](/dashboard/dashboard-diagnostics-access.md)。(v4.0 实验特性) ++ [TiKV-FastTune 监控面板](/grafana-tikv-dashboard.md#tikv-fasttune-面板)。(v4.0 实验特性) diff --git a/grafana-tikv-dashboard.md b/grafana-tikv-dashboard.md index fe22479d30b3..4107dac94e9a 100644 --- a/grafana-tikv-dashboard.md +++ b/grafana-tikv-dashboard.md @@ -9,11 +9,13 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon 目前 Grafana Dashboard 整体分为 PD、TiDB、TiKV、Node\_exporter、Overview、Performance\_overview 等。 -对于日常运维,我们通过观察 **TiKV-Details** 面板上的指标,可以了解 TiKV 当前的状态。根据[性能地图](https://asktug.com/_/tidb-performance-map/#/)可以检查集群的状态是否符合预期。 +## TiKV-Details 面板 + +对于日常运维,通过观察 **TiKV-Details** 面板上的指标,可以了解 TiKV 当前的状态。根据[性能地图](https://asktug.com/_/tidb-performance-map/#/)可以检查集群的状态是否符合预期。 以下为 **TiKV-Details** 默认的监控信息: -## Cluster +### Cluster - Store size:每个 TiKV 实例的使用的存储空间的大小 - Available size:每个 TiKV 实例的可用的存储空间的大小 @@ -30,7 +32,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Cluster metrics](/media/tikv-dashboard-cluster.png) -## Errors +### Errors - Critical error:严重错误的数量 - Server is busy:各种会导致 TiKV 实例暂时不可用的事件个数,如 write stall,channel full 等,正常情况下应当为 0 @@ -45,7 +47,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Errors metrics](/media/tikv-dashboard-errors-v610.png) -## Server +### Server - CF size:每个列族的大小 - Store size:每个 TiKV 实例的使用的存储空间的大小 @@ -58,7 +60,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Server metrics](/media/tikv-dashboard-server.png) -## gRPC +### gRPC - gRPC message count:每种 gRPC 请求的速度 - gRPC message failed:失败的 gRPC 请求的速度 @@ -67,7 +69,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - gRPC batch size:TiDB 与 TiKV 之间 grpc 请求的 batch 大小 - raft message batch size:TiKV 与 TiKV 之间 raft 消息的 batch 大小 -## Thread CPU +### Thread CPU - Raft store CPU:raftstore 线程的 CPU 使用率,通常应低于 80% * `raftstore.store-pool-size` - Async apply CPU:async apply 线程的 CPU 使用率,通常应低于 90% * `raftstore.apply-pool-size` @@ -80,14 +82,14 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - GC worker CPU:GC worker 线程的 CPU 使用率 - BackGround worker CPU:background worker 线程的 CPU 使用率 -## PD +### PD - PD requests:TiKV 发送给 PD 的请求速度 - PD request duration (average):TiKV 发送给 PD 的请求处理的平均时间 - PD heartbeats:发送给 PD 的心跳的速度 - PD validate peers:TiKV 发送给 PD 用于验证 TiKV 的 peer 有效的消息的速度 -## Raft IO +### Raft IO - Apply log duration:Raft apply 日志所花费的时间 - Apply log duration per server:每个 TiKV 实例上 Raft apply 日志所花费的时间 @@ -98,7 +100,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Raft IO metrics](/media/tikv-dashboard-raftio.png) -## Raft process +### Raft process - Ready handled:Raft 中不同 ready 类型的 ops - count: 批量处理 ready 的 ops @@ -114,7 +116,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Raft process metrics](/media/tikv-dashboard-raft-process.png) -## Raft message +### Raft message - Sent messages per server:每个 TiKV 实例发送 Raft 消息的 ops - Flush messages per server:每个 TiKV 实例中 raft client 往外 flush Raft 消息的 ops @@ -125,7 +127,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Raft message metrics](/media/tikv-dashboard-raft-message.png) -## Raft propose +### Raft propose - Raft apply proposals per ready:在一个 batch 内,apply proposal 时每个 ready 中包含 proposal 的个数的直方图 - Raft read/write proposals:不同类型的 proposal 的 ops @@ -139,7 +141,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Raft propose metrics](/media/tikv-dashboard-raft-propose.png) -## Raft admin +### Raft admin - Admin proposals:admin proposal 的 ops - Admin apply:apply 命令的 ops @@ -148,19 +150,19 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Raft admin metrics](/media/tikv-dashboard-raft-admin.png) -## Local reader +### Local reader - Local reader requests:所有请求的总数以及 local read 线程拒绝的请求数量 ![TiKV Dashboard - Local reader metrics](/media/tikv-dashboard-local-reader.png) -## Unified Read Pool +### Unified Read Pool - Time used by level:在 unified read pool 中每个级别使用的时间,级别 0 指小查询 - Level 0 chance:在 unified read pool 中调度的 level 0 任务的比例 - Running tasks:在 unified read pool 中并发运行的任务数量 -## Storage +### Storage - Storage command total:收到不同命令的 ops - Storage async request error:异步请求出错的 ops @@ -169,7 +171,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Storage metrics](/media/tikv-dashboard-storage.png) -## Scheduler +### Scheduler - Scheduler stage total:每种命令不同阶段的 ops,正常情况下,不会在短时间内出现大量的错误 - Scheduler writing bytes:每个 TiKV 实例正在处理的命令的写入字节数量 @@ -178,7 +180,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Scheduler metrics](/media/tikv-dashboard-scheduler.png) -## Scheduler - commit +### Scheduler - commit - Scheduler stage total:commit 中每个命令所处不同阶段的 ops,正常情况下,不会在短时间内出现大量的错误 - Scheduler command duration:执行 commit 命令所需花费的时间,正常情况下,应该小于 1s @@ -192,7 +194,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon ![TiKV Dashboard - Scheduler commit metrics](/media/tikv-dashboard-scheduler-commit.png) -## Scheduler - pessimistic_rollback +### Scheduler - pessimistic_rollback - Scheduler stage total:pessimistic_rollback 中每个命令所处不同阶段的 ops,正常情况下,不会在短时间内出现大量的错误 - Scheduler command duration:执行 pessimistic_rollback 命令所需花费的时间,正常情况下,应该小于 1s @@ -204,7 +206,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Scheduler scan details [write]:执行 pessimistic_rollback 命令时,扫描每个 write CF 中 key 的详细情况 - Scheduler scan details [default]:执行 pessimistic_rollback 命令时,扫描每个 default CF 中 key 的详细情况 -## Scheduler - prewrite +### Scheduler - prewrite - Scheduler stage total:prewrite 中每个命令所处不同阶段的 ops,正常情况下,不会在短时间内出现大量的错误 - Scheduler command duration:执行 prewrite 命令所需花费的时间,正常情况下,应该小于 1s @@ -216,7 +218,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Scheduler scan details [write]:执行 prewrite 命令时,扫描每个 write CF 中 key 的详细情况 - Scheduler scan details [default]:执行 prewrite 命令时,扫描每个 default CF 中 key 的详细情况 -## Scheduler - rollback +### Scheduler - rollback - Scheduler stage total:rollback 中每个命令所处不同阶段的 ops,正常情况下,不会在短时间内出现大量的错误 - Scheduler command duration:执行 rollback 命令所需花费的时间,正常情况下,应该小于 1s @@ -228,7 +230,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Scheduler scan details [write]:执行 rollback 命令时,扫描每个 write CF 中 key 的详细情况 - Scheduler scan details [default]:执行 rollback 命令时,扫描每个 default CF 中 key 的详细情况 -## GC +### GC - GC tasks:由 gc_worker 处理的 GC 任务的个数 - GC tasks Duration:执行 GC 任务时所花费的时间 @@ -243,7 +245,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - GC interval:TiDB 设置的 GC 间隔 - GC in Compaction Filter:write CF 的 Compaction Filter 中已过滤版本的数量 -## Snapshot +### Snapshot - Rate snapshot message:发送 Raft snapshot 消息的速率 - 99% Handle snapshot duration:99% 的情况下,处理 snapshot 所需花费的时间 @@ -251,14 +253,14 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - 99.99% Snapshot size:99.99% 的 snapshot 的大小 - 99.99% Snapshot KV count:99.99% 的 snapshot 包含的 key 的个数 -## Task +### Task - Worker handled tasks:worker 每秒钟处理的任务的数量 - Worker pending tasks:当前 worker 中,每秒钟 pending 和 running 的任务的数量,正常情况下,应该小于 1000 - FuturePool handled tasks:future pool 每秒钟处理的任务的数量 - FuturePool pending tasks:当前 future pool 中,每秒钟 pending 和 running 的任务的数量 -## Coprocessor Overview +### Coprocessor Overview - Request duration:从收到 coprocessor 请求到处理结束所消耗的总时间 - Total Requests:每种类型的总请求的 ops @@ -269,7 +271,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Total RocksDB Perf Statistics:RocksDB 性能统计数据 - Total Response Size:coprocessor 回应的数据大小 -## Coprocessor Detail +### Coprocessor Detail - Handle duration:每秒钟实际处理 coprocessor 请求所消耗的时间的直方图 - 95% Handle duration by store:每秒钟中 95% 的情况下,每个 TiKV 实例处理 coprocessor 请求所花费的时间 @@ -282,14 +284,14 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Total Ops Details by CF (Table Scan):coprocessor 中对于每个 CF 请求为 select 的 scan 过程中每秒钟各种事件发生的次数 - Total Ops Details by CF (Index Scan):coprocessor 中对于每个 CF 请求为 index 的 scan 过程中每秒钟各种事件发生的次数 -## Threads +### Threads - Threads state:TiKV 线程的状态 - Threads IO:TiKV 各个线程的 I/O 流量 - Thread Voluntary Context Switches:TiKV 线程自主切换的次数 - Thread Nonvoluntary Context Switches:TiKV 线程被动切换的次数 -## RocksDB - kv/raft +### RocksDB - kv/raft - Get operations:get 操作的 ops - Get duration:get 操作的耗时 @@ -326,7 +328,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Ingest SST duration seconds:ingest SST 所花费的时间 - Stall conditions changed of each CF:每个 CF stall 的原因 -## Titan - All +### Titan - All - Blob file count:Titan blob 文件的数量 - Blob file size:Titan blob 文件总大小 @@ -356,7 +358,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Blob GC output file size:Titan GC 输出文件的大小 - Blob GC file count:Titan GC 涉及的 blob 文件数量 -## Pessimistic Locking +### Pessimistic Locking - Lock Manager Thread CPU:lock manager 的线程 CPU 使用率 - Lock Manager Handled tasks:lock manager 处理的任务数量 @@ -368,11 +370,11 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Total pessimistic locks memory size:内存悲观锁占用内存的总大小 - In-memory pessimistic locking result:将悲观锁仅保存到内存的结果,其中 full 表示因为超过内存限制而无法将悲观锁保存至内存的次数 -## Memory +### Memory - Allocator Stats:内存分配器的统计信息 -## Backup +### Backup - Backup CPU:backup 的线程 CPU 使用率 - Range Size:backup range 的大小直方图 @@ -382,7 +384,7 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Backup Range Duration:backup range 的耗时 - Backup Errors:backup 中发生的错误数量 -## Encryption +### Encryption - Encryption data keys:正在使用的加密 data key 的总数量 - Encrypted files:被加密的文件数量 @@ -391,9 +393,9 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - Encrypt/decrypt data nanos:每次加密/解密数据的耗时的直方图 - Read/write encryption meta duration:每秒钟读写加密文件所耗费的时间 -## 面板常见参数的解释 +### 面板常见参数的解释 -### gRPC 消息类型 +#### gRPC 消息类型 1. 使用事务型接口的命令: @@ -424,3 +426,15 @@ aliases: ['/docs-cn/dev/grafana-tikv-dashboard/','/docs-cn/dev/reference/key-mon - raw_delete:删除一个 key/value 对 - raw_batch_delete:删除一批 key/value 对 - raw_delete_range:删除连续的一段区间 + +## TiKV-FastTune 面板 + +当 TiKV 出现 QPS 抖动、延迟抖动、延迟增加趋势等性能问题时,你可以查看 **TiKV-FastTune** 面板。**TiKV-FastTune** 包括多组子面板,可帮助你诊断性能问题,尤其适用于集群中写入负载较大的场景。 + +当出现写入相关的性能问题时,可以先在 Grafana 中查看 TiDB 相关的面板。如果问题出在存储端,打开 **TiKV-FastTune** 面板,浏览并检查上面的每个指标。 + +在 **TiKV-FastTune** 的面板中,指标标题描述了性能问题的可能成因。要验证成因是否正确,你需要检查具体的图表曲线。 + +左边 Y 轴表示存储端的 write-RPC QPS,右边 Y 轴上的一组图是倒置绘制的。如果左边 Y 轴的曲线形状与右边的形状匹配,则指标标题描述的问题成因是正确的。 + +有关该面板的具体监控项以及解释,参考 [TiKV-FastTune 用户手册(英文)](https://docs.google.com/presentation/d/1aeBF2VCKf7eo4-3TMyP7oPzFWIih6UBA53UI8YQASCQ/edit#slide=id.gab6b984c2a_1_352)。