CockroachDB性能远逊于MongoDB与Aurora,求优化配置建议
CockroachDB性能优化建议(针对负载测试落后问题)
测试背景与结果
针对CockroachDB、MongoDB和Aurora开展基础负载测试,通过配置读写goroutine数量模拟读写均衡、写密集、读密集三种场景,测试结果显示CockroachDB性能远低于另外两者,具体数据如下:
读写均衡场景(500写:500读)
每秒平均操作数:
- Mongo_read: 44.6k/s
- Aurora_read: 33.6k/s
- Aurora_insert: 14.3k/s
- Mongo_insert: 2.6k/s
- Crdb_insert: 2.6k/s
- Crdb_read: 2.3k/s
写密集场景(1000写:100读)
每秒平均操作数:
- Aurora_read: 40.5k/s
- Aurora_insert: 10.5k/s
- Mongo_insert: 10.4k/s
- Mongo_read: 10.2k/s
- Crdb_insert: 3.8k/s
- Crdb_read: 0.6k/s
读密集场景(100写:1000读)
每秒平均操作数:
- Aurora_read: 69.8k/s
- Mongo_read: 46.7k/s
- Crdb_read: 8k/s
- Aurora_insert: 7k/s
- Mongo_insert: 0.8k/s
- Crdb_insert: 0.7k/s
针对性优化建议
1. 集群基础配置调整
- 调整节点内存分配:启动CockroachDB时通过
--max-sql-memory参数提高SQL层可用内存(默认是总内存的25%),比如设置为总内存的50%,减少磁盘交换对性能的影响。 - 优化副本数:单机房测试场景可临时将默认3副本降为1副本验证性能上限(生产环境不建议);多机房场景确保副本分布合理,避免跨机房同步开销。
- 开启节点本地缓存:启用
kv.cache.size配置,提高热点数据的本地读取命中率,降低分布式读取延迟。
2. 写入性能优化
- 批量写入替代单条插入:将多个insert请求合并为
INSERT INTO table VALUES (...), (...), (...)的批量语句,减少事务提交和网络往返次数。 - 调整事务隔离级别:若业务允许,将默认的
SERIALIZABLE降级为SNAPSHOT隔离级别,减少事务冲突和锁等待。 - 关闭自动提交:客户端开启显式事务,在批量操作完成后统一提交,降低事务开销。
3. 读取性能优化
- 添加覆盖索引:检查查询语句的WHERE、JOIN条件,创建
CREATE INDEX ... INCLUDE (...)格式的覆盖索引,避免全表扫描和回表查询。 - 启用查询缓存:对于重复执行的只读查询,开启
sql.defaults.cache-enabled配置,利用查询缓存直接返回结果。 - 分片大表:针对大表使用
SHARD BY语法分片,让查询请求分散到不同节点,提升并行处理能力。
4. 客户端连接配置
- 匹配连接池大小:确保客户端goroutine数量与CockroachDB的
max_open_conns参数匹配,避免连接耗尽或过多空闲连接。 - 保持长连接:客户端复用连接,避免频繁创建和销毁连接带来的开销。
5. 存储层优化
- 切换SSD存储:确保CockroachDB节点使用SSD,HDD会严重限制随机读写性能。
- 调整RocksDB参数:通过
rocksdb.max-open-files提高文件描述符限制,调整rocksdb.write-buffer-size优化写缓存。
6. 测试环境验证
- 检查集群负载:执行
cockroach node status查看节点CPU、内存使用率,确认是否存在资源瓶颈。 - 分析慢查询:设置
sql.log.slow_query.latency_threshold开启慢查询日志,定位耗时语句针对性优化。
内容的提问来源于stack exchange,提问作者xiaoyaoworm
相关产品推荐
相关产品推荐

