Use when diagnosing KWDB incidents from logs, metrics, or system evidence, especially crashes, OOM, slow SQL, restarts, and cluster-wide availability symptoms.
Design & media
KWDB Performance Review
Try itOptimize SQL query performance for KaiwuDB time-series and relational engines. Covers: EXPLAIN analysis, time-series optimization, pagination, cross-model queries. Trigger keywords: optimize query, slow query, explain, execution plan, performance, 性能, 查询优化. NOT for: DDL, schema design, deployment, DML writes.
What it does
Optimize SQL query performance for KaiwuDB time-series and relational engines. Covers: EXPLAIN analysis, time-series optimization, pagination, cross-model queries. Trigger keywords: optimize query, slow query, explain, execution plan, performance, 性能, 查询优化. NOT for: DDL, schema design, deployment, DML writes.
The skill document
Read the required reference files first.
Tiered Reference Architecture
Tier 1 (Always Read)
references/key-rules.md- Core engine differences and anti-patternsreferences/query-analysis.md- EXPLAIN output interpretation
Tier 2 (High-Frequency Optimization)
references/timeseries-optimization.md- Time-series query patternsreferences/pagination-optimization.md- Cursor-based pagination
Tier 3 (Medium-Frequency)
references/relational-optimization.md- B-tree indexes, join optimizationreferences/cross-model-optimization.md- Hybrid query optimization
Tier 4 (Low-Frequency)
references/schema-tuning.md- Partition interval, TTL, encodingreferences/index-analysis.md- Index review for relational tablesreferences/config-optimization.md- Storage configuration parameter optimization
When to Activate
Should trigger:
- "optimize this query" / "优化查询"
- "slow query" / "查询很慢" / "慢查询"
- "explain this query" / "执行计划"
- "query performance" / "查询性能"
- "KWDB query slow"
- "全表扫描" / "查询超时"
- "时序数据查询慢" / "传感器数据"
- "TIME_BUCKET" / "时间聚合"
- "索引优化" (relational tables only)
- "config optimization" / "配置优化"
- "parameter tuning" / "参数调优"
- "存储配置" / "参数调整"
Should NOT trigger:
- Schema design ("create table", "add index") → kwdb-schema-design
- Deployment/configuration questions
- DML write optimization ("fast INSERT")
- Non-KWDB databases
Engine Detection
Before optimizing, determine which engine the query targets:
TIME SERIES TABLE:
- Has ts_column, primary_tags in CREATE TABLE
- Cannot have secondary indexes
- Query must include time range filter
- Primary tag filter uses hash index
RELATIONAL TABLE:
- Standard SQL table
- Can have B-tree, inverted indexes
- Standard SQL optimization applies
Ask user if unclear.
Workflow
Step 1: Parse EXPLAIN Output
Key indicators to look for:
| Pattern | Time-Series | Relational | Action |
|---|---|---|---|
| Partition Filter: ts | Good | N/A | Time pruning working |
| Tag Filter: tag_col | Good | N/A | Hash index hit |
| Seq Scan in partition | Normal | Check size | Normal for small |
| Index Scan | N/A | Good | Index being used |
| Distribute: Shuffle | Warning | Varies | Cross-node traffic |
Step 2: Identify Anti-Patterns
Time-Series Critical Issues:
- Missing time range filter -> full partition scan
- Fuzzy match on primary tag (LIKE, SUBSTRING) -> hash index miss
- SELECT * -> unnecessary column IO
- Large OFFSET pagination -> memory pressure
- Manual GROUP BY instead of TIME_BUCKET
Relational Issues:
- Seq Scan on large table -> missing index
- Nested loop on large sets -> bad join order
- Missing index on join column
Step 3: Provide Optimized Query
Always provide:
- The anti-pattern being fixed
- The rewritten query
- Expected improvement in EXPLAIN
Step 4: Validate
Include EXPLAIN (ANALYZE) to verify the optimization works.
Step 5: Configuration Optimization (Conditional)
Only activate when:
- User explicitly mentions "config optimization" / "parameter tuning" / "配置优化" / "参数调优", OR
- SQL optimization steps (1-4) are exhausted and performance issues persist
Per-Parameter Trigger (review on demand, not full scan):
| Parameter | Config Group | Trigger Condition |
|---|---|---|
| ts.compress.stage | Compression Group | User wants compression optimization or smaller disk space usage |
| ts.compress.algorithm | Compression Group | User wants compression optimization or smaller disk space usage |
| ts.compress.level | Compression Group | User wants compression optimization or smaller disk space usage |
| ts.rows_per_block.min_limit | Rows Per Block Group | User reports excessive small blocks from flushing, long write visibility delay, or high per-device data volume with low compression ratio |
| ts.rows_per_block.max_limit | Rows Per Block Group | User reports excessive small blocks from flushing, long write visibility delay, or high per-device data volume with low compression ratio |
| ts.compress.last_segment.enabled | Independent | User wants compression optimization or smaller disk space usage, or needs to optimize write performance |
| ts.block.lru_cache.max_limit | Independent | User wants to optimize overall query performance, or memory usage is too high |
| ts.last_cache_size.max_limit | Independent | User wants to optimize last-related SQL query performance, or memory usage is too high |
| ts.mem_segment_size.max_limit | Independent | Write performance optimization (after ts.compress.last_segment.enabled reviewed), or memory usage is too high (after ts.block.lru_cache.max_limit and ts.last_cache_size.max_limit reviewed) |
| ts.reserved_last_segment.max_limit | Independent | Frequent compaction triggers or disk space is tight |
| ts.compact.max_limit | Independent | User reports compaction backlog with significant CPU idle, or CPU usage is too high |
| ts.auto_vacuum.enabled | Independent | User wants to clean up data |
| ts.block_filter.sampling_ratio | Independent | User reports poor query performance with range conditions or null checks, suspects inefficient filter pushdown |
Decision Tree:
- Compression optimization / disk space reduction → Compression Group
- Performance priority, disk sufficient → snappy/lz4, level=any, stage=1; extreme: stage=0
- Disk space priority, CPU sufficient → zstd, level=high, stage=3
- CPU usage too high → lz4, level=any, stage=1; if still high → stage=0
- Excessive small blocks / write visibility delay / low compression ratio → Rows Per Block Group
- High-throughput write → increase max (8192-16384)
- Memory constrained → decrease max (2048)
- Point queries → decrease max
- Sequential scan → increase max
- Low-latency small batch → increase min (1024+)
- Write performance → ts.compress.last_segment.enabled (SSD: false, HDD: true)
- Query performance / high memory → ts.block.lru_cache.max_limit
- Last query performance / high memory → ts.last_cache_size.max_limit
- Write performance (after #3) / high memory (after #4,#5) → ts.mem_segment_size.max_limit
- Frequent compaction / disk tight → ts.reserved_last_segment.max_limit
- Compaction backlog / high CPU → ts.compact.max_limit
- Data cleanup → ts.auto_vacuum.enabled
- Poor filter pushdown → ts.block_filter.sampling_ratio
Pre-conditions (confirm relevant resources before suggesting):
- Memory-related params: confirm available free memory with user
- Disk-related params: confirm available disk space with user
- CPU-related params: confirm CPU availability with user
Read references/config-optimization.md for detailed parameter guidance.
See assets/example-configs.md for configuration tuning examples.
Config query approach:
- Use MCP tool if available:
mcp__kwdb__read-query("SHOW CLUSTER SETTING ts.xxx") - Otherwise, ask user to run:
SHOW CLUSTER SETTING ts.xxx; - NEVER use
SHOW CLUSTER SETTINGS
Important:
- NEVER execute
SET CLUSTER SETTINGautomatically - Only provide SQL statements for user to review and execute
NOT for
- DDL operations: Creating/dropping tables, indexes (→ kwdb-schema-design)
- Deployment/Config: Memory settings, installation, replication
- Write optimization: Bulk INSERT, import performance
- Data migration: Moving data between databases
- Hardware sizing: Server specs, disk I/O recommendations
- Application tuning: Connection pooling, caching (beyond SQL)
Guardrails
- Never suggest CREATE INDEX on time-series tables - they don't support secondary indexes
- Time-series queries MUST have time range filters - warn if missing
- Never recommend OFFSET for deep pagination - use time-based cursor
- Always specify SELECT columns for time-series - no SELECT *
- Verify table type before index recommendations
- Explain WHY the optimization works - not just what to change
- Validate with EXPLAIN before finishing
- Confirm memory and disk before config changes - never suggest cache/memory size increases without confirmed free resources
- Never auto-execute SET CLUSTER SETTING - only provide SQL for user to review
- Never use SHOW CLUSTER SETTINGS - always query specific settings individually
- Resource overload reduce warning - when recommending reduced values for memory/CPU-impact parameters, always include the risk warning about potential performance degradation
Output Format
## Intent
[Brief description of the optimization goal]
## Engine Type
[time-series / relational / mixed]
## Anti-Pattern Detected
[What was causing the slowness]
## Original Query
```sql
[query before optimization]
Optimized Query
[rewritten query]
Expected Improvement
[What should change in EXPLAIN]
Validation
EXPLAIN (ANALYZE) [optimized query];
For configuration optimization output format, see `assets/config-output-template.md`.
Related skills
Run KaiwuDB inspection and health-check tasks. Use this skill for database health checks, metrics collection, anomaly detection, and inspection report generation.
KaiwuDB 数据库源码编译和构建技能。用于从源码构建、编译或测试 KaiwuDB (KWDB)。使用 CMake 构建系统处理构建配置、单元测试、代码检查和安装。触发条件:(1) 编译询问:"编译 KaiwuDB"、"构建 kwdbts2"、"cmake 构建"、"清理构建";(2) C++ 单元测试询问:"C++ 单元测试"、"运行C++单元测试"、"run C++ unittest";(3) Go 单元测试询问:"golang 单元测试"、"Go 单元测试"、"run golang test"。重要:执行任何操作前必须向用户确认所有配置选项,不得跳过询问步骤。
Design KWDB schemas and generate DDL for relational, time-series, and mixed workloads. Covers: CREATE/ALTER/DROP TABLE, INDEX, VIEW, constraints, partitioning, retention, tags. Trigger keywords: KWDB, schema, table, index, time-series, sensor, IoT, metrics, TAGS, PRIMARY TAGS, RETENTIONS, primary key, foreign key, DDL. NOT for: DML queries, deployment, backup, performance tuning.
Triggered when the user wants to install or deploy KaiwuDB (kwdb, kaiwudb). Helps users complete script-based deployment of KaiwuDB clusters, including configuration file modification, installation command execution, cluster initialization, and status checks.
Convert natural language queries to KWDB SQL for time series data, relational data and cross-model analysis. Use this skill whenever users ask to query KWDB databases, write SQL for KWDB, or convert natural language to KWDB-specific SQL syntax. Supports: CREATE DATABASE/TABLE, downsampling, interpolation, latest value queries, aggregation analysis, cross-model queries, window/session/event analysis.