BaikalDB 2.0.0 版本发布
Release BaikalDB v2.0.0 · baidu/BaikalDB (github.com) Notice: 滚动升级顺序:BaikalMeta=>BaikalStore=>BaikalDB 如没特殊说明,后续升级步骤都应该按上述顺序进行 New Features: 支持cmake编译 增加bvar监控 修复部分统计信息问题 支持b'11'、 0b11、 x'AA'、 0xAA 字面 支持子查询 支持table t1 join table t2 支持binlog 增加全局索引的online ddl操作,alter table xxx add index global idx(filed); 代价相关会结合一些规则判断,增加索引选择正确率 暂时使用直方图+内部的distinct count做等值判断,cmskectch在大表情况下准确性较低 支持information_schema流程 ,需要添加新的information_schema的表可以参考src/common/information_schema.cpp 统计信息和规则选择索引部分做了修改,选择更准确些 增加虚拟索引,alter table id_name_c add VIRTUAL index idx_name (name); 查看受影响的sql:show virtual index;用来新建索引前评估影响 using docker-compose to build a minimal three node cluster 增加roaringbitmap,可以用于精确统计一些uv,用法与hll类似 增加TDIGEST用来做分位值的估算 增加db探测store的功能,在单个store假死的情况下可以快速恢复系统,集群更稳定 addpeer前会检查rocksdb是否stalling,提前拒绝addpeer,减少禁写风险 增加dataindex,在install snapshot时会判断follower的数据是否已经是新的 默认从snappy改成增加lz4压缩 最底层增加zstd压缩,通过-enable_bottommost_compression开启 add funcs: date_add, date_sub, utc_timestamp, last_insert_id rocksdb事务锁改成bthread锁;不阻塞pthread store增加令牌桶流控(qos),对每类sql做并发限制,降低突发流量对正常sql的影响,默认不开启 对每个请求做内存限制,通过db_sql_memory_bytes_limit(8G)和store_sql_memory_bytes_limit(16G)控制 定期调用tcmalloc接口回收内存src/common/memory_profile.cpp 支持loaddata语句,load的文件目前只能放在server端(相对于baikaldb的路径) 一个表多机房时可以设置一个主机房(main_logical_room),leader总是在主机房内 增加索引屏蔽概念,已屏蔽的索引不会被选择,在线索引操作调整: - drop index设置屏蔽状态,2天(table_tombstone_gc_time_s)后自动发起删除流程;目的是删错索引可以快速restore恢复,减少误操作影响 - add index流程走完后,索引为屏蔽状态,需要二次确认restore;防止流程走完后,索引影响老业务,并且无人关注到 - 屏蔽状态的索引转为正常索引:alter table xxx restore index idx Bug Fixes: 修复meta双buf问题 修复多次删除创建同名后restore恢复表不一致问题 单语句事务可能会导致raft卡住的bug修复 修复之前GetApproximateSizes不准的bug 修复一些可能的内存泄露问题 修复只读事务bug,优化部分流程 prepare insert current time default value fix count(*) return NULL expected 0 when filter expr is always false ignore non-json format comment for sql string update last_insert_id when client set the value Performance Improvements: 主表、索引覆盖、全局索引seek优化,去除table_record到mem_row的转化 通过plan复用优化select prepare stmt性能 提升cstore扫描性能 降低qos,memlimit的开销 增加了推荐的conf配置