Slow Query (Experimental)
GreptimeDB provides a slow query log to help you find and fix slow queries. By default, the slow queries are output to the system table greptime_private.slow_queries
with 30s
threshold and 1.0
sample ratio with 30d
TTL.
The schema of the greptime_private.slow_queries
table is as follows:
+--------------+----------------------+------+------+---------+---------------+
| Column | Type | Key | Null | Default | Semantic Type |
+--------------+----------------------+------+------+---------+---------------+
| cost | UInt64 | | NO | | FIELD |
| threshold | UInt64 | | NO | | FIELD |
| query | String | | NO | | FIELD |
| is_promql | Boolean | | NO | | FIELD |
| timestamp | TimestampNanosecond | PRI | NO | | TIMESTAMP |
| promql_range | UInt64 | | NO | | FIELD |
| promql_step | UInt64 | | NO | | FIELD |
| promql_start | TimestampMillisecond | | NO | | FIELD |
| promql_end | TimestampMillisecond | | NO | | FIELD |
+--------------+----------------------+------+------+---------+---------------+
cost
: The cost of the query in milliseconds.threshold
: The threshold of the query in milliseconds.query
: The query string.is_promql
: Whether the query is a PromQL query.timestamp
: The timestamp of the query.promql_range
: The range of the query. Only used whenis_promql
istrue
.promql_step
: The step of the query. Only used whenis_promql
istrue
.promql_start
: The start time of the query. Only used whenis_promql
istrue
.promql_end
: The end time of the query. Only used whenis_promql
istrue
.
In cluster mode, you can configure the slow query in frontend configs (same as in standalone mode), for example:
[slow_query]
## Whether to enable slow query log.
enable = true
## The record type of slow queries. It can be `system_table` or `log`.
## If `system_table` is selected, the slow queries will be recorded in a system table `greptime_private.slow_queries`.
## If `log` is selected, the slow queries will be logged in a log file `greptimedb-slow-queries.*`.
record_type = "system_table"
## The threshold of slow query. It can be human readable time string, for example: `10s`, `100ms`, `1s`.
threshold = "30s"
## The sampling ratio of slow query log. The value should be in the range of (0, 1]. For example, `0.1` means 10% of the slow queries will be logged and `1.0` means all slow queries will be logged.
sample_ratio = 1.0
## The TTL of the `slow_queries` system table. Default is `30d` when `record_type` is `system_table`.
ttl = "30d"
If you use the Helm chart to deploy GreptimeDB, you can configure the slow query in the values.yaml
file, for example:
slowQuery:
enable: true
recordType: "system_table"
threshold: "30s"
sampleRatio: "1.0"
ttl: "30d"
If you use log
as the record type, the slow queries will be logged in a log file greptimedb-slow-queries.*
. By default, the log file is located in the ${data_home}/logs
directory.