AntDB 最佳实践
规划部署
- 根据当前数据库大小和负载以及未来规划可预见的业务增长量对主机资源进行合理、充分的预估
- 规划的纯数据库容量大小需要乘以1.2的系数,用来存放数据库日志(pg_log)和数据库的 redo log(pg_wal)
- 性能敏感的系统,磁盘建议使用 SSD
- 磁盘建议做 RAID10,至少也要做 RAID5,禁止不做 RAID 就上线
- 生产环境建议使用万兆网络
- 生产环境主备节点建议部署在不同的主机上,避免节点交叉混合部署
- 当前不建议 docker 化部署
实施要点
- 源端为Oracle的话,建议提前使用 Oracle 兼容评估工具采集 Oracle 侧的信息并分析,预估出从 Oracle 到 AntDB 的改造工作量
- 如果停机时间很短,数据迁移建议使用DSG工具
- 小表如配置表可选择为复制表,大表选择分片表
- 根据频繁执行SQL的查询字段,正确选择分片键
- 数据要尽量均衡打散在各个数据节点上,防止某个节点数据量过大影响了集群的整体性能
- 数据迁移前,删除表上非唯一索引,提高迁移速度,迁移完成后,统一创建
- 迁移完成后,要做两边数据库的对象和数据校验,并对AntDB中的数据做统计信息收集
- 迁移完成后,要进行全业务、全流程测试
- 正式进行数据割接前,要对迁移过程进行多次测试,充分了解源库的对象和数据
- 根据对数据实时性的要求,可以考虑启用备节点的读能力,降低主节点压力的同时,充分利用了主机资源
- 针对非分片键的查询,可以通过异构索引,空间换时间,避免进行全节点扫描,提高sql性能
- Update操作比较多的表,设置填充因子:ALTER TABLE t1 SET (fillfactor = 70);
- 建议在session级别使用Oracle语法
- 从应用与数据库解耦的角度,不建议使用存储过程、触发器、自定义函数等依赖数据库的业务逻辑
- AntDB与Oracle的执行引擎不一样,在Oracle中耗时较短的SQL,如果在AntDB侧耗时较长,需要针对性优化
- 应用访问的负载均衡方式,在coordinator小于五个的时候可以考虑在JDBC串中配置,如果多于五个,建议使用软负载(LVS等)或者硬负载(F5等)
- AntDB的DDL操作可以放在事务内,并可以回滚。
- 对于varchar类型,AntDB的长度单位是字符
- AntDB的表名、字段名、其他对象名在系统中均以小写存储
- 批量数据入库的场景建议使用COPY来代替insert
安全设置
- 应用访问的端口不建议使用默认的5432端口,可修改为其他端口
- 对于数据库主机之外的客户端访问,禁止使用 trust 认证
- 单独建立与OS用户不同名的superuser,OS同名的用户建议去掉superuser权限。
- 业务用户不建议使用超级用户,使用普通用户即可,控制好数据库、schema、table等对象的访问权限
运维要点
- 监控数据库中长时间未提交的事务
- 监控数据库中耗时较长的SQL,并进行相应的优化
- 频繁update、delete的表需要监控表膨胀率,并定期进行回收
- 根据wal文件产生的速度和主机存储空间,选择合适的wal文件保留周期或个数
- pg_log不主动删除会一直存在,根据主机磁盘空间大小,通过脚本定时清理
- 根据高可用的指标要求,选择合适的副本数量和主备之间同步或者异步的流复制方式
- 根据数据库大小、磁盘读写性能以及其他要求,选择合适的备份策略