性能调优技巧
GreptimeDB 实例的默认配置可能不适合所有场景。因此根据场景调整数据库配置和使用方式相当重要。
GreptimeDB 提供了各种指标来帮助监控和排查性能问题。官方仓库里提供了用于独立模式和集群模式的 Grafana dashboard 模版。
查询
ANALYZE QUERY
GreptimeDB 支持查询分析功能,通过 EXPLAIN ANALYZE [VERBOSE] <SQL>
语句可以看到逐步的查询耗时。
指标
以下指标可用于诊断查询性能问题:
指标 | 类型 | 描述 |
---|---|---|
greptime_mito_read_stage_elapsed_bucket | histogram | 存储引擎中查询不同阶段的耗时。 |
greptime_mito_cache_bytes | gauge | 缓存内容的大小 |
greptime_mito_cache_hit | counter | 缓存命中总数 |
greptime_mito_cache_miss | counter | 缓存未命中总数 |
增大缓存大小
可以监控 greptime_mito_cache_bytes
和 greptime_mito_cache_miss
指标来确定是否需要增加缓存大小。这些指标中的 type
标签表示缓存的类型。
如果 greptime_mito_cache_miss
指标一直很高并不断增加,或者 greptime_mito_cache_bytes
指标达到缓存容量,可能需要调整存储引擎的缓存大小配置。
以下是一个例子:
[[region_engine]]
[region_engine.mito]
# 写入缓存的缓存大小。此缓存的 `type` 标签值为 `file`。
write_cache_size = "10G"
# SST 元数据的缓存大小。此缓存的 `type` 标签值为 `sst_meta`。
sst_meta_cache_size = "128MB"
# 向量和箭头数组的缓存大小。此缓存的 `type` 标签值为 `vector`。
vector_cache_size = "512MB"
# SST 行组页面的缓存大小。此缓存的 `type` 标签值为 `page`。
page_cache_size = "512MB"
# 时间序列查询结果(例如 `last_value()`)的缓存大小。此缓存的 `type` 标签值为 `selector_result`。
selector_result_cache_size = "512MB"
[region_engine.mito.index]
## 索引暂存目录的最大容量。
staging_size = "10GB"
一些建议:
- 至少将写入缓存设置为磁盘空间的 1/10
- 如果数据库内存使用率低于 20%,则可以至少将
page_cache_size
设置为总内存大小的 1/4 - 如果缓存命中率低于 50%,则可以将缓存大小翻倍
- 如果使用全文索引,至少将
staging_size
设置为磁盘空间的 1/10