SkyWalking H2数据库(测试用)
概述
H2是一个开源的嵌入式内存数据库,SkyWalking默认将其作为开发和测试环境的后端存储。它无需独立部署,适合快速验证功能,但不推荐用于生产环境。
特点速览
- 零配置:默认集成,启动即用
- 内存模式:数据仅保存在内存中(重启丢失)
- 文件模式:可选持久化到磁盘
- 兼容性:支持标准SQL语法
工作原理
配置方法
默认配置
修改 config/application.yml
中的存储部分:
yaml
storage:
selector: ${SW_STORAGE:h2}
h2:
driver: org.h2.jdbcx.JdbcDataSource
url: jdbc:h2:mem:skywalking-oap-db
user: sa
metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
模式切换
- 内存模式:
jdbc:h2:mem:dbname
- 文件模式:
jdbc:h2:file:/path/to/dbname
实战示例
场景:本地调试指标存储
- 启动OAP Server时自动创建H2数据库
- 通过REST API插入测试数据:
bash
curl -X POST http://localhost:12800/v3/segments -H 'Content-Type: application/json' -d '{
"traceId": "abc123",
"service": "demo-service",
"spans": [{
"operationName": "/test-endpoint",
"duration": 500
}]
}'
- 查询数据验证:
sql
-- 通过H2控制台执行
SELECT * FROM traces WHERE trace_id = 'abc123';
输出结果示例
TRACE_ID | SERVICE | SPAN_COUNT
-----------+--------------+-----------
abc123 | demo-service | 1
生产环境限制
重要限制
- 无集群支持:单节点读写
- 性能瓶颈:约支持1000TPS的写入
- 无数据分片:长期运行会导致文件膨胀
- 无备份机制:需自行实现数据导出
管理技巧
访问H2控制台
- 添加依赖到OAP启动配置:
yaml
h2:
console:
enabled: true
port: 8082
- 访问
http://localhost:8082
使用Web界面
数据导出示例
bash
# 运行时导出SQL
java -cp h2*.jar org.h2.tools.Script -url jdbc:h2:file:/path/to/db -user sa -script backup.zip -options compression zip
总结
H2数据库为SkyWalking提供了开箱即用的测试存储方案,适合:
- 本地开发验证
- CI/CD流水线测试
- 功能演示环境
下一步建议
- 测试完成后应迁移到Elasticsearch/MySQL等生产级存储
- 使用官方Docker镜像进行独立部署测试
- 通过
jdbc:h2:tcp://
模式实现多进程共享
扩展练习
- 尝试配置H2文件模式并观察持久化效果
- 使用H2控制台执行复杂查询(如JOIN操作)
- 模拟高并发写入观察性能变化