配置 GreptimeDB
GreptimeDB 提供了层次化的配置能力,按照下列优先顺序来生效配置(每个项目都会覆盖下面的项目):
- Greptime 命令行选项
- 配置文件选项
- 环境变量
- 默认值
你只需要设置所需的配置项。 GreptimeDB 将为未配置的任何设置分配默认值。
如何设置配置项
Greptime 命令行选项
你可以使用命令行参数指定多个配置项。 例如,以配置的 HTTP 地址启动 GreptimeDB 的独立模式:
greptime standalone start --http-addr 127.0.0.1:4000
有关 Greptime 命令行支持的所有选项,请参阅 GreptimeDB 命令行界面。
配置文件选项
你可以在 TOML 文件中指定配置项。
例如,创建一个名为 standalone.example.toml 的配置文件,如下所示:
[storage]
data_home = "./greptimedb_data"
type = "File"
然后使用命令行参数 -c [file_path] 指定配置文件。
greptime [standalone | frontend | datanode | flownode | metasrv] start -c config/standalone.example.toml
例如以 standalone 模式启动 GreptimeDB:
greptime standalone start -c standalone.example.toml
示例文件
以下是每个 GreptimeDB 组件的示例配置文件,包括所有可用配置项。 在 实际场景中,你只需要配置所需的选项,不需要像示例文件中那样配置所有选项。
Helm 配置
当使用 Helm 在 Kubernetes 上部署 GreptimeDB 时,你可以直接在 Helm values.yaml 文件中做相应的设置。
请参阅 Helm 配置项文档了解所有 Helm 支持的配置项。
对于仅在本篇文档中可用的配置项,你可以通过注入 TOML 配置文件来设置配置。
环境变量
配置文件中的每个项目都可以映射到环境变量。
例如,使用环境变量设置数据节点的 data_home 配置项:
# ...
[storage]
data_home = "/data/greptimedb"
# ...
使用以下 shell 命令以以下格式设置环境变量:
export GREPTIMEDB_DATANODE__STORAGE__DATA_HOME=/data/greptimedb
环境变量规则
-
每个环境变量应具有组件前缀,例如:
GREPTIMEDB_FRONTENDGREPTIMEDB_METASRVGREPTIMEDB_DATANODEGREPTIMEDB_FLOWNODEGREPTIMEDB_STANDALONE
-
使用**双下划线
__**作为分隔符。例如,数据结构storage.data_home转换为STORAGE__DATA_HOME。
环境变量还接受以逗号 , 分隔的列表,例如:
GREPTIMEDB_METASRV__META_CLIENT__METASRV_ADDRS=127.0.0.1:3001,127.0.0.1:3002,127.0.0.1:3003
配置项
本节将介绍主要的配置项,请前往 GitHub 查看所有配置项。
运行时选项
GreptimeDB 在多个专用的 Tokio 运行时上执行后台任务。
这些选项适用于所有子命令(standalone、datanode、frontend 和 metasrv)。
[runtime]
# 执行全局读操作的运行时线程数。
# 默认为 CPU 核心数。
global_rt_size = 8
# 执 行 compaction 操作的线程数。
# 默认为 max(num_cpus / 2, 1)。
compact_rt_size = 4
# compaction 操作的最大阻塞线程数。
# compaction picker 的 CPU 工作运行在 compact 运行时的阻塞线程池中,
# 该限制可防止 compaction 规划的突发负载耗尽所有可用 CPU。
# 默认为 max(num_cpus / 2, 1)。显式设置为 0 时会被调整为 1。
compact_rt_max_blocking_threads = 4
| 配置项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
runtime.global_rt_size | 整数 | CPU 核心数 | 执行全局读操作的运行时线程数。 |
runtime.compact_rt_size | 整数 | max(num_cpus / 2, 1) | 执行 compaction 操作的线程数。 |
runtime.compact_rt_max_blocking_threads | 整数 | max(num_cpus / 2, 1) | compaction 操作的最大阻塞线程数。compaction picker 的 CPU 工作运行在该阻塞线程池中。显式设置为 0 时会被调整为 1。 |
写入内存限制选项
内存限制选项控制所有协议(HTTP、gRPC 和 Arrow Flight)并发写入请求使用的总内存。
这些选项适用于 frontend 和 standalone 子命令。
# 所有并发写入请求体和消息的最大总内存
# 设置为 0 表示禁用限制(默认为无限制)
max_in_flight_write_bytes = "1GB"
# 写入字节配额耗尽时的策略
# 可选值:`wait`(默认,10 秒超时)、`wait(<duration>)`(例如 `wait(30s)`)、`fail`
write_bytes_exhausted_policy = "wait"
| 配置项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
max_in_flight_write_bytes | 字符串 | 0 | 所有并发写入请求体和消息(HTTP、gRPC、Flight)的最大总内存。设置为 0 表示禁用限制(无限制)。支持的单位:B、KB、MB、GB 等。示例:1GB 将并发写入总量限制为 1GB。 |
write_bytes_exhausted_policy | 字符串 | wait | 写入字节配额耗尽时的策略。可选值:wait(默认,等待最多 10 秒)、wait(<duration>)(自定义超时时间,例如 wait(30s))、fail(立即拒绝请求)。 |
Datanode 查询并发限制
这些选项用于限制单个 datanode 上可同时运行的 读取查询数量。
查询会一直计入并发限制,直到查询完成或客户端关闭结果流。
如果达到并发限制,新查询最多等待 concurrent_query_limiter_timeout 配置的时间;如果仍然没有可用名额,查询将失败。
这些选项适用于 datanode 子命令。
# Datanode 上允许同时运行的最大读取查询数量。
# 设置为 0 表示禁用限制(默认为无限制)。
max_concurrent_queries = 0
# 当达到 max_concurrent_queries 时,查询等待可用名额的最长时间。
concurrent_query_limiter_timeout = "100ms"
| 配置项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
max_concurrent_queries | 整数 | 0 | Datanode 上允许同时运行的最大读取查询数量。设置为 0 表示禁用限制。 |
concurrent_query_limiter_timeout | 字符串 | 100ms | 当达到 max_concurrent_queries 后,查询等待可用名额的最长时间。如果超时后仍然没有可用名额,查询将失败。 |
协议选项
协议选项适用于 frontend 和 standalone 子命令,它指定了协议服务器地址和其他协议相关的选项。
其中,http.enable_api_server 可用于启动一个专门对外提供服务的公共 HTTP API Server,它只暴 露 /v1 API 和 /dashboard,而主 HTTP Server 继续用于内部和运维端点。
这种分离方式适合希望将 GreptimeDB 暴露给终端用户或应用程序、同时又不暴露 health、metrics、config、debug 等管理路径的场景。
使用时,将 http.enable_api_server = true,并把 http.api_server_addr 配置为你希望对外暴露的地址,同时将 http.addr 保持为仅供运维访问的内部地址。
HTTP 协议配置适用于所有 GreptimeDB 组件:frontend、datanode、flownode 和 metasrv。
下面的示例配置包含了所有协议选项的默认值。
你可以在配置文件中更改这些值或禁用某些协议。
例如禁用 OpenTSDB 协议支持,可以将 enable 参数设置为 false。
请注意,为了保障数据库的正常工作,无法禁用 HTTP 和 gRPC 协议。
[http]
addr = "127.0.0.1:4000"
timeout = "0s"
body_limit = "64MB"
enable_cors = true
# cors_allowed_origins = ["https://example.com"] # Optional: customize allowed origins
prom_validation_mode = "strict"
experimental_enable_prometheus_native_histogram = false
experimental_enable_explain_analyze_stream = true
# 启用专用公共 HTTP API Server(仅提供 /v1 和 /dashboard)
enable_api_server = false
api_server_addr = "127.0.0.1:4006"
[grpc]
bind_addr = "127.0.0.1:4001"
runtime_size = 8
[grpc.tls]
mode = "disable"
cert_path = ""
key_path = ""
watch = false
[mysql]
enable = true
addr = "127.0.0.1:4002"
runtime_size = 2
keep_alive = "0s"
prepared_stmt_cache_size = 10000
[mysql.tls]
mode = "disable"
cert_path = ""
key_path = ""
watch = false
[postgres]
enable = true
addr = "127.0.0.1:4003"
runtime_size = 2
keep_alive = "0s"
[postgres.tls]
mode = "disable"
cert_path = ""
key_path = ""
watch = false
[opentsdb]
enable = true
[influxdb]
enable = true
# InfluxDB 协议自动创建表时使用的默认 merge 模式。
# 可选值:"last_non_null"、"last_row"。
default_merge_mode = "last_non_null"
[jaeger]
enable = true
[otlp]
enable = true
trace_ingest_chunk_size = 512
[prom_store]
enable = true
with_metric_engine = true
pending_rows_flush_interval = "0s"
max_batch_rows = 100000
max_concurrent_flushes = 256
worker_channel_capacity = 65526
max_inflight_requests = 3000
flow_notification_queue_capacity = 1024
下表描述了每个选项的详细信息:
| 选项 | 键 | 类型 | 描述 |
|---|---|---|---|
| http | HTTP 服务器选项 | ||
| addr | 字符串 | 服务器地址,默认为 "127.0.0.1:4000" | |
| timeout | 字符串 | HTTP 请求超时时间。设为 "0s" 可禁用超时(默认值为 "0s")。启用 Prometheus Remote Write 批量写入模式 时,非零且不超过 prom_store.pending_rows_flush_interval 加 1 秒的超时值会被自动调整为该值。 | |
| body_limit | 字符串 | HTTP 最大体积大小,默认为 "64MB" | |
| enable_cors | 布尔值 | 是否启用 HTTP CORS 支持,默认为 true。 | |
| cors_allowed_origins | 数组 | 自定义 HTTP CORS 允许的来源。 | |
| prom_validation_mode | 字符串 | 在 Prometheus Remote Write 协议中是否检查字符串是否为有效的 UTF-8 字符串。可用选项:strict(拒绝任何包含无效 UTF-8 字符串的请求),lossy(用 UTF-8 REPLACEMENT CHARACTER(即 � ) 替换无效字符),unchecked(不验证字符串有效性)。 | |
| experimental_enable_prometheus_native_histogram | 布尔值 | 实验性:启用 Prometheus remote write v2 native histogram 写入,默认为 false。 | |
| experimental_enable_explain_analyze_stream | 布尔值 | 实验性:启用 POST /v1/sql/analyze/stream,用于流式返回 EXPLAIN ANALYZE VERBOSE 指标,默认为 true。 | |
| enable_api_server | 布尔值 | 是否启动专用公共 HTTP API Server。该 Server 仅提供 /v1 API 和 /dashboard,可安全地对外暴露给终端用户。主 HTTP Server(addr)用于内部使用。默认禁用;设为 true 可启用。 | |
| api_server_addr | 字符串 | 专用公共 HTTP API Server 的绑定地址,默认为 "127.0.0.1:4006"。仅在 enable_api_server 为 true 时生效。 | |
| grpc | gRPC 服务器选项 | ||
| bind_addr | 字符串 | gRPC 服务绑定地址,默认为 "127.0.0.1:4001" | |
| runtime_size | 整数 | 服务器工作线程数量,默认为 8 | |
| max_connection_age | 字符串 | gRPC 连接在服务端保持的最长时间。参见 "MAX_CONNECTION_AGE"。默认不设置。示例:"1h" 表示 1 小时,"30m" 表示 30 分钟 | |
| flight_compression | 字符串 | Frontend 的 Arrow IPC 服务的压缩模式。可用选项:none:禁用所有压缩,transport:仅启用 gRPC 传输压缩(zstd),arrow_ipc:仅启用 Arrow IPC 压缩(lz4),all:启用所有压缩。默认值为 none。 | |
| mysql | MySQL 服务器选项 | ||
| enable | 布尔值 | 是否启用 MySQL 协议,默认为 true | |
| addr | 字符串 | 服务器地址,默认为 "127.0.0.1:4002" | |
| runtime_size | 整数 | 服务器工作线程数量,默认为 2 | |
| keep_alive | 字符串 | 服务端保持连接时间。设为 0s 可禁用。 | |
| prepared_stmt_cache_size | 整数 | MySQL prepared statement 缓存的最大条目数,默认为 10000。 | |
| influxdb | InfluxDB 协议选项 | ||
| enable | 布尔值 | 是否在 HTTP API 中启用 InfluxDB 协议,默认为 true | |
| default_merge_mode | 字符串 | InfluxDB 协议自动创建表时使用的默认 merge 模式。可选值:last_non_null、last_row。默认值:last_non_null | |
| opentsdb | OpenTSDB 协议选项 | ||
| enable | 布尔值 | 是否启用 OpenTSDB 协议,默认为 true | |
| jaeger | Jaeger 协议选项 | ||
| enable | 布尔值 | 是否在 HTTP API 中启用 Jaeger 协议,默认为 true | |
| otlp | OpenTelemetry 协议选项 | ||
| enable | 布尔值 | 是否在 HTTP API 中启用 OpenTelemetry 协议,默认为 true | |
| trace_ingest_chunk_size | 整数 | 每个 trace 写入分块的最大 span 数量。设为 0 可禁用分块。 | |
| experimental_enable_resource_info | 布尔值 | 是否从 OTLP metrics 的 resource attributes 合成 greptime_otel_resource_info 表,让只有指标的 service 进入语义图。默认为 false。 | |
| prom_store | Prometheus 远程存储选项 | ||
| enable | 布尔值 | 是否在 HTTP API 中启用 Prometheus 远程读写,默认为 true | |
| with_metric_engine | 布尔值 | 是否在 Prometheus 远程写入中使用 Metric Engine,默认为 true | |
| pending_rows_flush_interval | 字符串 | Prometheus Remote Write 批量刷写的时间间隔。设为非零值(如 500ms)以启用批量写入模式,默认为 0s(禁用) | |
| max_batch_rows | 整数 | 触发刷写的最大批量行数,默认为 100000 | |
| max_concurrent_flushes | 整数 | 同时执行的最大刷写操作数量,默认为 256 | |
| worker_channel_capacity | 整数 | 内部接收行数据的 worker 通道容量,默认为 65526 | |
| max_inflight_requests | 整数 | 等待批量完成的最大请求数,默认为 3000 | |
| flow_notification_queue_capacity | 整数 | 共享队列中等待处理的逻辑表 Flow 通知数量上限,默认为 1024。仅在批量写入模式下生效,取值必须大于 0。队列满时通知会被丢弃,并计入 greptime_prom_store_flow_notification_dropped_total 指标。 | |
| postgres | PostgresSQL 服务器选项 | ||
| enable | 布尔值 | 是否启用 PostgresSQL 协议,默认为 true | |
| addr | 字符串 | 服务器地址,默认为 "127.0.0.1:4003" | |
| runtime_size | 整数 | 服务器工作线程数量,默认为 2 | |
| keep_alive | 字符串 | 服务端保持连接时间。设为 0s 可禁用。 |
对 MySQL,Postgres 和 gRPC 接口,我们支持 TLS 配置
| Option | Key | Type | Description |
|---|---|---|---|
mysql.tls,postgres.tls 或 grpc.tls | MySQL 或 Postgres 的 TLS 配置 | ||
mode | String | TLS 模式,支持 disable, prefer and require | |
cert_path | String | TLS 证书文件路径 | |
key_path | String | TLS 私钥文件路径 | |
watch | Boolean | 监控文件变化,自动重新加载证书或私钥。grpc.tls 不支持自动重新加载,请保持 grpc.tls.watch 为 false。 |
查询选项
查询选项在 standalone、datanode 和 frontend 模式下有效,用于控制查询引擎的行为。
下表详细描述了这些选项:
| 选项 | 键 | 类型 | 描述 |
|---|---|---|---|
| parallelism | 整数 | 0 | 查询引擎的并行度。默认为 0,表示 CPU 核心数。 |
示例配置:
[query]
parallelism = 0
存储选项
存储选项在 datanode 和 standalone 模式下有效,它指定了数据库数据目录和其他存储相关的选项。
GreptimeDB 支持将数据保存在本地文件系统,AWS S3 以及其兼容服务(比如 MinIO、digitalocean space、腾讯 COS、百度对象存储(BOS)等),Azure Blob Storage 和阿里云 OSS。
| 选项 | 键 | 类型 | 描述 |
|---|---|---|---|
| storage | 存储选项 | ||
| type | 字符串 | 存储类型,支持 "File","S3" 和 "Oss" 等。 | |
| File | 本地文件存储选项,当 type="File" 时有效 | ||
| data_home | 字符串 | 数据库存储根目录,默认为 "./greptimedb_data" | |
| copy_root | 字符串 | 单机模式下 SQL 访问本地文件的根目录(默认为 <data_home>/copy)。COPY 语句和外部表中的相对路径将在该目录下解析;仅当绝对路径位于该目录内时才被接受。分布式部署始终禁止 SQL 访问本地文件。升级指引请参阅迁移本地 SQL 文件访问。 | |
| S3 | AWS S3 存储选项,当 type="S3" 时有效 | ||
| name | 字符串 | 存储提供商名字,默认为 S3 | |
| bucket | 字符串 | S3 桶名称 | |
| root | 字符串 | S3 桶中的根路径 | |
| endpoint | 字符串 | S3 的 API 端点 | |
| region | 字符串 | S3 区域 | |
| access_key_id | 字符串 | S3 访问密钥 id | |
| secret_access_key | 字符串 | S3 秘密访问密钥 | |
| enable_virtual_host_style | 布尔值 | 使用 virtual-host-style 域名而不是 path-style 域名调用 API,默认为 false | |
| Oss | 阿里云 OSS 存储选项,当 type="Oss" 时有效 | ||
| name | 字符串 | 存储提供商名字,默认为 Oss | |
| bucket | 字符串 | OSS 桶名称 | |
| root | 字符串 | OSS 桶中的根路径 | |
| endpoint | 字符串 | OSS 的 API 端点 | |
| access_key_id | 字符串 | OSS 访问密钥 id | |
| access_key_secret | 字符串 | OSS 秘密访问密钥 | |
| Azblob | Azure Blob 存储选项,当 type="Azblob" 时有效 | ||
| name | 字符串 | 存储提供商名字,默认为 Azblob | |
| container | 字符串 | 容器名称 | |
| root | 字符串 | 容器中的根路径 | |
| endpoint | 字符串 | Azure Blob 存储的 API 端点 | |
| account_name | 字符串 | Azure Blob 存储的账户名 | |
| account_key | 字符串 | 访问密钥 | |
| sas_token | 字符串 | 共享访问签名 | |
| Gcs | Google Cloud Storage 存储选项,当 type="Gcs" 时有效 | ||
| name | 字符串 | 存储提供商名字,默认为 Gcs | |
| root | 字符串 | GCS 桶中的根路径 | |
| bucket | 字符串 | GCS 桶名称 | |
| scope | 字符串 | GCS 权限 | |
| credential_path | 字符串 | GCS 访问证书 | |
| endpoint | 字符串 | GCS 的 API 端点 |
文件存储配置范例:
[storage]
data_home = "./greptimedb_data"
type = "File"
s3 配置范例:
[storage]
type = "S3"
bucket = "test_greptimedb"
root = "/greptimedb"
access_key_id = "<access key id>"
secret_access_key = "<secret access key>"
存储服务的 http 客户端
[storage.http_client] 设置了向存储服务发送请求的 http 客户端的各种配置。
仅当存储服务类型是“S3”,“Oss”,“Azblob”或“Gcs”时生效。
| Key | 类型 | 默认值 | 含义 |
|---|---|---|---|
pool_max_idle_per_host | 数字 | 1024 | http 连接池中对每个 host 的最大空闲连接数。 |
connect_timeout | 字符串 | 30s | http 客户端在进行连接时的超时 |
timeout | 字符串 | 30s | 总的 http 请求超时,包括了从建立连接到接收完返回值为止的时间。也可视为一个请求从开始到结束的一个完整的截止时间。 |
pool_idle_timeout | 字符串 | 90s | 对空闲连接进行保活( "keep-alive" )的超时。 |
存储引擎提供商
[[storage.providers]] 用来设置存储引擎的提供商列表。基 于这个配置,你可以为每张表指定不同的存储引擎,具体请参考 create table:
# Allows using multiple storages
[[storage.providers]]
name = "S3"
type = "S3"
bucket = "test_greptimedb"
root = "/greptimedb"
access_key_id = "<access key id>"
secret_access_key = "<secret access key>"
[[storage.providers]]
name = "Gcs"
type = "Gcs"
bucket = "test_greptimedb"
root = "/greptimedb"
credential_path = "<gcs credential path>"
所有配置的这些存储引擎提供商的 name 都可以在创建表时用作 storage 选项。
对于同样提供商的存储,比如你希望使用不同 S3 bucket 来作为不同表的存储引擎,你就可以设置不同的 name,并在创建表的时候指定 storage 选项。
对象存储缓存
在使用 AWS S3、阿里云 OSS 或 Azure Blob Storage 等远程存储服务时,查询过程中获取数据通常会很耗时,尤其在公有云环境。为了解决这个问题,GreptimeDB 提供了写入缓存机制来加速重复数据的访问。
你可以通过修改 mito 的配置调整缓存的大小和行为。
[[region_engine]]
[region_engine.mito]
write_cache_size = "10GiB"
# 在写入缓存未命中时从对象存储下载文件填充缓存
enable_refill_cache_on_read = true
默认情况下,当查询时发生缓存未命中,GreptimeDB 会自动从对象存储下载文件填充写入缓存(enable_refill_cache_on_read = true)。这可以提高后续查询性能,使频繁访问的数据保留在写入缓存中。如果你想减少网络流量或存储成本,可以通过设置 enable_refill_cache_on_read = false 来禁用此行为。
更详细的信息请参阅性能调优技巧。
WAL 选项
GreptimeDB 支持三种 WAL 存储方式:本地 WAL、Remote WAL 和 Noop WAL。关于它们的对比,请参见 WAL 概述。具体配置可参考 本地 WAL、Remote WAL 和 Noop WAL 文档。
Logging 选项
frontend、metasrv、datanode 和 standalone 都可以在 [logging] 部分配置 log、tracing 相关参数:
[logging]
dir = "./greptimedb_data/logs"
level = "info"
enable_otlp_tracing = false
enable_per_region_metrics = false
otlp_endpoint = "localhost:4317"
append_stdout = true
max_log_dir_size = "0B"
[logging.tracing_sample_ratio]
default_ratio = 1.0
dir: log 输出目录。level: log 输出的日志等级,日志等级有info,debug,error,warn,默认等级为info。enable_otlp_tracing:是否打开分布式追踪,默认不开启。enable_per_region_metrics:是否暴露 Prometheus 的 Region 维度查询负载指标,包括greptime_mito_region_query_cpu_time和greptime_mito_region_query_scanned_bytes。该选项默认关闭,因为它会为每个 Region 产生一条时间序列。通过 heartbeat 上报并在INFORMATION_SCHEMA.REGION_STATISTICS中暴露的查询统计信息不受该选项控制。otlp_endpoint:使用基于 gRPC 的 OTLP 协议导出 tracing 的目标端点,默认值为localhost:4317。append_stdout:是否将日志打印到 stdout。默认是true。max_log_dir_size:dir中受管理日志文件的最大总大小。必要时会在写入前删除较旧的已关闭日志文件,但活动文件可能会超过此限制。设置为0B可禁用此限制。tracing_sample_ratio:该字段可以配置 tracing 的采样率,如何使用tracing_sample_ratio,请参考 如何配置 tracing 采样率。
如何使用分布式追踪,请参考 Tracing
Pipeline 选项
frontend 和 standalone 会在内存中缓存 Pipeline 定义,缓存配置位于 [pipeline] 部分:
[pipeline]
cache_ttl = "10s"
cache_ttl:本地 Pipeline 缓存的存活时间,默认值为10s。在集群中,在某个 Frontend 上创建或删除 Pipeline 后,最多经过该时间才会在其他 Frontend 上生效。调大该值会减少对greptime_private.pipelines表的读取,同时增加上述延迟。
事件记录配置
记录的事件保存在 greptime_private.events 系统表中。
[event_recorder]
# 事件表的 TTL,默认值为 90 天。
ttl = "90d"
# 省略此项以记录当前及未来的所有事件类型。
# 使用空数组可禁用事件记录。
event_types = ["create_table", "drop_table"]
ttl:事件表的 TTL,默认值为90d。event_types:要记录的事件类型。省略时记录当前及未来的所有事件类型;设为[]可禁用事件记录。
standalone 支持以下事件类型:
create_database, alter_database, drop_database,
create_flow, drop_flow,
create_table, create_logical_tables, alter_table, alter_logical_tables,
drop_table, undrop_table, purge_dropped_table, truncate_table,
create_view, drop_view, admin_function
undrop_table 和 purge_dropped_table 仅 GreptimeDB 企业版支持。
在分布式部署中,Frontend 支持以下事件类型:
admin_function
Metasrv 支持以下事件类型:
region_migration,
create_database, alter_database, drop_database,
create_flow, drop_flow,
create_table, create_logical_tables, alter_table, alter_logical_tables,
drop_table, undrop_table, purge_dropped_table, truncate_table,
create_view, drop_view,
repartition, repartition_group,
batch_gc, wal_prune
undrop_table 和 purge_dropped_table 仅 GreptimeDB 企业版支持。
Region 引擎选项
datanode 和 standalone 在 [region_engine] 部分可以配置不同存储引擎的对应参数。目前可以配置 mito 和 metric 存储引擎的选项。
部分常用的选项如下
[[region_engine]]
[region_engine.mito]
num_workers = 8
manifest_checkpoint_distance = 10
max_background_flushes = 4
max_background_compactions = 2
max_background_purges = 4
auto_flush_interval = "10m"
global_write_buffer_size = "1GB"
global_write_buffer_reject_size = "2GB"
default_region_write_buffer_size = "0"
sst_meta_cache_size = "512MB"
vector_cache_size = "512MB"
page_cache_size = "512MB"
write_cache_size = "5GB"
write_cache_ttl = "8h"
scan_memory_limit = "unlimited"
scan_memory_on_exhausted = "fail"
min_compaction_interval = "0m"
schedule_compaction_after_edit = true
default_flat_format = true
experimental_series_scan_v2 = true
sst_write_buffer_size = "8MB"
max_concurrent_scan_files = 384
[region_engine.mito.index]
aux_path = ""
staging_size = "2GB"
staging_ttl = "7d"
metadata_cache_size = "64MiB"
content_cache_size = "128MiB"
content_cache_page_size = "64KiB"
result_cache_size = "128MiB"
[region_engine.mito.inverted_index]
create_on_flush = "auto"
create_on_compaction = "auto"
apply_on_query = "auto"
mem_threshold_on_create = "64M"
intermediate_path = ""
Mito 根据表选项和 SST format 为每个 Region 选择 memtable 实现。default_flat_format 为 true 时,没有显式设置 sst_format 的 Region 使用 flat SST 和 bulk memtable。memtable.type 是数据库或表选项,不是 [region_engine.mito.memtable] 引擎配置。详见表选项。
以下是可供使用的选项
| 键 | 类型 | 默认值 | 描述 |
|---|---|---|---|
num_workers | 整数 | 8 | 写入线程数量 |
manifest_checkpoint_distance | 整数 | 10 | 每写入 manifest_checkpoint_distance 个 manifest 文件创建一次 checkpoint |
compress_manifest | 布尔值 | false | 是否使用 gzip 压缩 manifest 和 checkpoint 文件。 |
max_background_flushes | 整数 | 自动 | 后台 flush 任务数(默认:1/2 CPU 核心数)。 |
max_background_compactions | 整数 | 自动 | 后台 compaction 任务数(默认:1/4 CPU 核心数)。 |
max_background_purges | 整数 | 自动 | 后台 purge 任务数(默认:CPU 核心数)。 |
auto_flush_interval | 字符串 | 10m | 自动 flush 超过 auto_flush_interval 没 flush 的 region。可以通过表选项 auto_flush_interval 按表覆盖 |
global_write_buffer_size | 字符串 | 1GB | 写入缓冲区大小,默认值为内存总量的 1/8,但不会超过 1GB |
global_write_buffer_reject_size | 字符串 | 2GB | 写入缓冲区内数据的大小超过 global_write_buffer_reject_size 后拒绝写入请求,默认为 global_write_buffer_size 的 2 倍 |
default_region_write_buffer_size | 字符串 | 0 | 默认的单 region 写缓冲区阻塞阈值。设置为正值后,mutable memtable 内存用量达到该值的一半时,GreptimeDB 会调度 flush;达到该值时会阻塞写入,达到该值的 2 倍时会拒绝写入。设置为 0 会禁用默认单 region 限制。表级 write_buffer_size 会覆盖该值,包括显式设置为 0 以禁用该表的限制。 |
sst_meta_cache_size | 字符串 | 自动 | SST 元数据缓存大小。设为 0 可关闭该缓存 默认为内存的 1/8,不超过 512MB |
vector_cache_size | 字符串 | 512MB | 内存向量和 arrow array 的缓存大小。设为 0 可关闭该缓存 默认为内存的 1/16,不超过 512MB |
page_cache_size | 字符串 | 512MB | SST 数据页的缓存。设为 0 可关闭该缓存 默认为内存的 1/8 |
write_cache_size | 字符串 | 5GiB | 写入缓存容量。如果磁盘空间充足,建议设置更大的值。 |
write_cache_ttl | 字符串 | 8h | 写入缓存的 TTL。默认为 8 小时。 |
preload_index_cache | 布尔值 | true | 在 region 打开时预加载索引(puffin)文件到缓存(默认:true)。 启用时,索引文件会在 region 初始化期间加载到写入缓存中, 这可以提高查询性能,但会延长启动时间。 |
index_cache_percent | 整数 | 20 | 为索引(puffin)文件分配的写入缓存容量百分比(默认:20)。 剩余容量用于数据(parquet)文件。 必须在 0 到 100 之间(不包括边界)。例如,对于 5GiB 的写入缓存和 20% 的分配, 1GiB 保留给索引文件,4GiB 用于 数据文件。 |
enable_refill_cache_on_read | 布尔值 | true | 启用读取操作时的缓存回填(默认:true)。 禁用时,不会在读取时回填缓存。 |
manifest_cache_size | 字符串 | 256MB | Manifest 缓存容量(默认:256MB)。 |
selector_result_cache_size | 字符串 | 512MB | last_value() 等时间线检索结果的缓存。设为 0 可关闭该缓存未设置时默认为内存的 1/16,不超过 512MB。 |
range_result_cache_size | 字符串 | 512MB | Flat range scan 结果的缓存大小。设为 0 可关闭该缓存。 未设置时默认为内存的 1/16,不超过 512MB。 |
prefilter_result_cache_size | 字符串 | 128MB | Prefilter 结果的缓存大小。设为 0 可关闭该缓存。 未设置时默认为内存的 1/32,不超过 128MB。 |
sst_write_buffer_size | 字符串 | 8MB | SST 的写缓存大小 |
max_concurrent_scan_files | 整数 | 384 | 最大并发扫描的 SST 文件数量。 |
allow_stale_entries | 布尔值 | false | 是否允许 replay 时读取陈旧的 WAL 条目。 |
scan_memory_limit | 字符串 | unlimited | 所有查询的表扫描内存限制。支持绝对大小(如 "2GB")或系统内存百分比(如 "20%")。设为 0 或 "unlimited" 可禁用限制。 |
scan_memory_on_exhausted | 字符串 | fail | 扫描内存耗尽时的行为。选项:fail(快速失败),wait 或 wait(<duration>)(等待内存)。 |
min_compaction_interval | 字符串 | 0m | 两次 compaction 之间的最小时间间隔。设为 "0m"(默认)允许 compactions 立即运行,无限制。 |
schedule_compaction_after_edit | 布尔值 | true | 是否允许在成功的 region edit 之后调度 compaction。 设为 true 是在 region edit 后调度 compaction 的必要但不充分条件,min_compaction_interval 等其他约束仍可能阻止 compaction 被调度。设为 false 则保证 region edit 后不会调度 compaction。 |
default_flat_format | 布尔值 | true | 没有显式设置 sst_format 的 Region 是否使用 flat SST。Flat SST 使用 bulk memtable。 |
experimental_series_scan_v2 | 布尔值 | true | 是否为 metric 引擎物理 region 的 series scan 启用实验性的 two-phase 模式。设为 false 时使用 legacy 模式,其他 series scan 也使用 legacy 模式。 |
scan_parallelism | 整数 | 0 | (已弃用,请使用 max_concurrent_scan_files)旧版扫描并发度选项。 |
index | -- | -- | Mito 引擎中索引的选项。 |
index.aux_path | 字符串 | "" | 文件系统中索引的辅助目录路径,用于存储创建索引的中间文件和搜索索引的暂存文件,默认为 {data_home}/index_intermediate。为了向后兼容,该目录的默认名称为 index_intermediate。此路径包含两个子目录:- __intm: 用于存储创建索引时使用的中间文件。- staging: 用于存储搜索索引时使用的暂存文件。 |
index.staging_size | 字符串 | 2GB | 暂存目录的最大容量。 |
index.staging_ttl | 字符串 | 7d | 暂存目录的 TTL。默认为 7 天。设为 "0s" 可禁用 TTL。 |
index.metadata_cache_size | 字符串 | 64MiB | 索引元数据的缓存大小。 未设置时默认为内存的 1/32,不超过 64MiB。 |
index.content_cache_size | 字符串 | 128MiB | 索引内容的缓存大小。 未设置时默认为内存的 1/16,不超过 128MiB。 |
index.content_cache_page_size | 字符串 | 64KiB | 倒排索引内容缓存的页大小。 |
index.result_cache_size | 字符串 | 128MiB | 索引查询结果的缓存大小。 未设置时默认为内存的 1/16,不超过 128MiB。 |
inverted_index.create_on_flush | 字符串 | auto | 是否在 flush 时构建索引 - auto: 自动- disable: 从不 |
inverted_index.create_on_compaction | 字符串 | auto | 是否在 compaction 时构建索引 - auto: 自动- disable: 从不 |
inverted_index.apply_on_query | 字符串 | auto | 是否在查询时使用索引 - auto: 自动- disable: 从不 |
inverted_index.mem_threshold_on_create | 字符串 | 64M | 创建索引时如果超过该内存阈值则改为使用外部排序 设置为空会关闭外排,在内存中完成所有排序 |
inverted_index.intermediate_path | 字符串 | "" | 存放外排临时文件的路径 (默认 {data_home}/index_intermediate). |
auto_flush_interval 默认为 10 分钟。在 Mito 引擎配置中显式设置的值会覆盖默认值;表级 auto_flush_interval 设置会覆盖引擎级配置。
metric 引擎针对包含大量小表的 metrics 数据进行了优化。
从 v1.2 起,metric 引擎始终启用稀疏主键编码,无法禁用。该编码仅对非空主键列进行编码,可提升写入和查询性能。配置文件中已有的 sparse_primary_key_encoding 设置会被接受但不产生任何效果。
设定 meta client
meta_client 选项适用于 datanode 和 frontend 模块,用于指定 Metasrv 的相关信息。
[meta_client]
metasrv_addrs = ["127.0.0.1:3002"]
timeout = "3s"
connect_timeout = "1s"
ddl_timeout = "10s"
tcp_nodelay = true
通过 meta_client 配置 metasrv 客户端,包括:
metasrv_addrs,Metasrv 地址列表,对应 Metasrv 启动配置的 server address。timeout,操作超时时长,默认为 3 秒。connect_timeout,连接服务器超时时长,默认为 1 秒。ddl_timeout,DDL 执行的超时时间,默认 10 秒。tcp_nodelay,接受连接时的TCP_NODELAY选项,默认为 true。
心跳配置
在 分布式模式下,心跳间隔由 Metasrv 的 heartbeat_interval 选项统一控制。
heartbeat_interval = "3s"
# 顶层配置项:上报心跳扩展信息时读取的环境变量
heartbeat_env_vars = ["AZ", "REGION"]
| 键 | 类型 | 默认值 | 描述 |
|---|---|---|---|
heartbeat_interval | 字符串 | 3s | Metasrv 的基础心跳间隔。Frontend 的心跳间隔为该值的 6 倍,Datanode/Flownode 的心跳间隔与该值相同。心跳间隔会在握手阶段由 Metasrv 协商下发,节点本地配置不会覆盖该值。 |
heartbeat_env_vars | 数组 | [] | 顶层配置项。启动时读取并通过心跳消息上报给 Metasrv 的环境变量键名列表。所列环境变量的值将作为心跳扩展信息发送,并存储在 Metasrv 的节点信息中。例如,heartbeat_env_vars = ["AZ", "REGION"] 将收集 AZ 和 REGION 环境变量。请勿包含敏感变量(如密钥或凭据),因为其值会被传输并存储在 Metasrv 中。 |
默认时区配置
default_timezone 选项适用于 frontend 模块和 standalone 模式,默认值为 UTC。
它指定了与 GreptimeDB 交互时的客户端默认时区。
如果在客户端中指定了时区,此选项将在该客户端会话中被覆盖。
default_timezone = "UTC"
default_timezone 的值可以是任何时区名称,例如 Europe/Berlin 或 Asia/Shanghai。
有关客户端时区如何影响数据的写入和查询,请参阅时区文档。