作为一个Oracle数据库管理员,在当下国产数据库可以说是百花齐放的时代环境中,非常需要去了解当今国内数据库的发展与现状情况。
偶然的时刻了解到8小时玩转openGauss训练营(第二期)的培训交流的机会,刚好也是周末的时间,也刚好有空闲的时间,就参加学习了openGauss数据库方面的情况。
OG 体系架构
openGauss提供面向多核的极致性能、全链路的业务和数据安全、基于AI的调优和高效运维的能力,全面友好开放,携手伙伴共同打造全球领先的企业级开源关系型数据库。
它是基于PostgreSQL 9.2.4内核魔改多线程结构。
特性
- JIT模型
- 支持增量|全量检查点
- 列存,行存和MOT
- 全密态安全
- AI4DB和DB4AI
部署高可用架构
架构图
主备HA
两地三中心
高可用报障
- Switchover:主机运行正常,因为维护等需求进行switchover操作,switchover之后主
机降备,备机升主并开始接管业务,这些操作需要主机和备机之间交互才能完成。 - Failover:主机故障后,备机需要进行failover操作,failover后备机升主,开始接管业务;
failover的过程是备机独立完成的,不需要和主机进行交互。
switchover切换流程
failover切换流程
最佳实践
参数分类
动态参数
可以在线修改的参数
gs_ctl reload -D $DATADIR
# select pg_reload_conf();
需重启生效参数
gs_ctl restart -D $DATADIR
gs_om -t restart
参数配置修改方式
SQL命令行修改
ALTER SYSTEM SET paraname TO value;
ALTER DATABASE dbname SET paraname TO value;
ALTER USER username SET paraname TO value;
SET paraname TO value;
gs_guc
gs_guc set -D datadir -c "paraname=value”
gs_guc set -N all -I all -c "paraname=value"
运维工具
监控
Prometheus+Grafana 开源监控体系
MOT
概述
- 乐观并发控制(Optimistic Concurrency Control,简称OCC)
MOT (Memory-Optimized Table):使用OCC实现事务的并发控制的行存储引擎。
特性
- 内存优化数据结构
- 无锁事务管理
- 无锁索引
- NUMA感知,事务本地内存
- 高效、可靠的持久化
- 查询本机编译(JIT)
结构图
事务管理
事务本地内存与全局内存
- 全局内存(shared memory)是所有CPU核心共享的长期内存,主要用于存储所有表数据和索引
- 本地内存是短期的私有内存,主要用于在会话中处理事务,并将数据更改存储在本地内存中,直到提交阶段。
无锁事务管理
- 所有相关数据都会从全局内存复制到本地内存
- 基于OCC算法,最小化全局内存上的争用时间
- 事务完成后,此数据将从本地内存推回全局内存
乐观并发控制(OCC)事务机制
在事务期间(使用任何隔离级别),直到提交阶段,不会对记录加锁。优点:性能更高。缺点:可能被中止。如果另一个会话尝试更新相同的记录,则更新可能会失败,MOT在提交时通过版本检查机制检测冲突。
注意:当使用串行化或可重复读取隔离级别时,在使用悲观并发控制的引擎上也会发生类似的中止。
监控MOT
MOT全局内存
select mot_global_memory_detail();
MOT本地内存
select mot_local_memory_detail();
当前会话内存
select *
from mot_session_memory_detail()
where sessid = pg_current_sessionid();
WDR 报告
类似于Oracle Database产品中的AWR报告,常用于分析数据库基于等待事件方法论的性能问题。
数据保留时间
默认数据保留8天,每1小时自动创建一个快照。
管理
查看当前WDR snapshot列表
select * from snapshot.snapshot order by start_ts;
查看某次WDR snapshot中相关summary/global快照的时间花费
select * from snapshot.tables_snap_timestamp where snapshot_id = 1 order by start_ts;
手工创建WDR snapshot
select create_wdr_snapshot();
生产WDR报告
select generate_wdr_report(begin_snap_id Oid, end_snap_id Oid, int report_type, int report_scope, int node_name );
说明
- node_name – 结点级别report时候,指定node name; cluster级别省略或者指定为NULL
- 要在postgres库内执行
性能优化思路
整体性能问题分析
单SQL性能
AI自治数据库特性
AI能力
AI in DBMS: 参数调优与诊断能力
- 调优参数列表:根据不同的场景预设,用户也可以根据经验配置;
- 调优方法概括:结合深度强化学习与全局优化算法,针对不同类别的参数进行细粒度调优。
- 调优效果评估:观察benchmark的跑分结果,预置的benchmark丰富,极简可扩展。
AI in SQL:DB4AI
总结
经过此次的学习,认识到国产数据库在技术和推广层面上越来越成熟和智能。