于5月14日、5月15日下午参加了《8小时玩转openGauss训练营(第三期)》,学习过程也感受了国产数据库也在不断的进行前进,不断追赶,无论是功能还是性能,虽然没有Oracle强大,但是也在不断的完善中。目前一直在从事Oracle、Mysql 、Linux 相关的工作,学习openGauss 可以扩展更宽的知识面,为后期转型国产数据库做铺垫。从我个人角色来说,让我感觉openGauss 比较强大的几个方面。
集群管理组件
一款数据库,如果想要承载核心的业务应用,让应用使用人员更友好、更舒畅,集群功能是必备的功能。像是Oracle RAC 、MySQL Cluster/Proxy 等,openGauss 集群是DN主备,主备环境支持一主多备模式,也就是为了保证故障的可恢复,需要将数据写多份,设置主备多个副本,通过日志进行数据同步,在一主多备模式下,所有的备机都需要重做日志,都可以升主。一主多备类似于容灾能力。下面看课堂讲解的集群架构知识。
从下面的图片,可以看出,是有DN主、DN备组成的集群
下面可以清楚的看明白集群与数据库之间的交互与通讯,其中最重要的就是仲裁模块,其中有:DN无主仲裁、DN双主仲裁、磁盘满仲裁、僵死仲裁、多AZ仲裁
其中最重要的还是故障仲裁是如何运作的,DN仲裁选择谁是主是如何运行的呢,
从下图可以看出选择主的过程:
(1)首先是DN主实例出现的故障;
(2)CMS检测到无主了,然后开始给正常节点发送 命令要锁住备机。
(3)在6s内原来的主进项拉起,无法拉起的话将原主failover,CMS开启发起选择新DN主;
(4)从锁住的多数派副本中,选择最大的term/Lsn副本,并将其升主;
(5)CMS发起lock2命令给备机,告知新主;
(6)CMS发起unlock解锁。
以上是一个DN主备的正常切换流程步骤。
WDR报告和性能调优
WDR报告和性能调优类似Oracle 的AWR 报告,这个做的是真的符合实际运维需求的,无论是故障排查还是调整优化,都可以起到非常大的帮助。如果未来可以做到和Oracle AWR 一样,非常细粒度,指标非常准确清晰,那是非常不错的。
在WDR报告中,集群性能指标体系包括了以下部分:
系统级: 集群级别或节点级别指标
OS
Instance Time
Memory
Session, Thread
Events, Utility
对象级:数据库对象指标
Database、 Table、 Index
File
Lock
应用级:表征应用负载性能
Transaction、 Statement
Active session Profile
Slow query
Full SQL trace
目前指标能有这些确实不错了,以下是个人认为常用的指标。
系统级
OS_RUNTIME,OS_THREADS
获取实时的CPU时间, LOAD,内存消耗信息(类似top),用于判断当前操作系统的负载状态
INSTANCE_TIME
系统级的时间消耗细分。判断是否整个系统是否存在负载,网络, IO, CPU上的瓶颈
MEMORY_NODE_DETAIL, SHARED_MEMORY_DETAIL
实例级内存(全局,动态内存,共享内存,通信等)分配,使用率
共享内存上下文分配/使用率,定位定界可细化至特性级别,结合session级别内存上下文分配视图接口,可帮助定位会话级内存使用问题
SESSION_STAT, SESSION_TIME, SESSION_MEMORY,SESSION_MEMORY_DETAIL, SESSION_STAT_ACTIVITY
会话级负载强度,逻辑/物理读写强度,排序活动等,用于甄别出负载强度高,使用资源多的会话
会话级时间细分,用于甄别出不同时间维度上session的消耗
会话级总内存和内存上下文分配/使用,可以定位单个session在特性级上的内存问题
获取实时系统活跃会话列表,包括会话基本信息,会话事务,语句,等待事件,会话状态(active,idle等),用于分析当前系统活跃用户的活动信息
THREAD_WAIT_STATUS
获取实例工作线程/辅助线程列表列表,判断线程的运行状态,当前正阻塞在哪个事件上,正在等待哪个锁,或被哪个会话阻塞
WAIT_EVENTS
各功能模块中IO, LOCK,LWLOCK,STATUS四类事件的等待次数,等待失败次数,等待时间等维度的统计信息,可以帮助定位特性级细粒度时延性能问题
对象级
STAT_DATABASE,STAT_DATABASE_CONFLICTS
提供数据库级别的活跃连接数,负载强度,块读写性能,行活动,死锁,临时下盘文件等信息。根据这些信息可以帮助建立数据库访存模型(读写比等负载特点),识别热点数据库,诊断数据库级别大颗粒性能瓶颈
STAT_USER_TABLES, STAT_SYS_TABLES, STAT_ALL_TABLES,STATIO_USER_TABLES, STATIO_SYS_TABLES, STATIO_ALL_TABLES,GLOBAL_STAT_HOTKEYS_INFO
表上行扫描活动,索引扫描活动,行变更活动,活跃行占比,表维护操作活动(vaccum, analyze),页面读取缓冲命中率等,这些信息可以帮助建立表级别的访存模型(读写比,缓存效率等),识别热点表,预警表维护操作,诊断表级别细粒度性能瓶颈
识别表级别热key,定界热点访问造成的网络, IO瓶颈
STAT_USER_INDEXES, STAT_SYS_INDEXES, STAT_ALL_INDEXES,STATIO_USER_INDEXES, STATIO_SYS_INDEXES, STATIO_ALL_INDEXES
索引使用统计: index scan次数, index scan返回的索引项,通过index scan返回的表行数等,索引页的缓存效率等,用以评估索引收益和效率
FILE_IOSTAT,FILE_REDO_IOSTAT,STAT_BAD_BLOCK
数据(数据,索引)文件的IO性能统计指标(读写数目,耗时,时延),可以帮助建立数据文件物理访存的模型,识别文件级别的物理IO强度和瓶颈
获取操作Redo 文件的性能,帮助诊断redo日志操作的性能瓶颈
LOCKS
对象锁涉及到的对象,事务,会话,锁信息,实时显示当前系统锁等待关系,识别热点锁
TRANSACTIONS_RUNNING_XACTS, TRANSACTIONS_PREPARED_XACTS
获取当前正在运行的单节点/两阶段事务列表,结合session和thread视图,诊断运行时间超过预期的事务
应用级
STATEMENT_COUNT,STATEMENT
DDL, DML(select,insert,update,delete), DCL语句的分布比率,帮助建立负载特征模型,预警负载异常变动
语句级别(归一化SQL,模板SQL)的响应时间,执行次数,行活动,软硬解析比,时间模型,网络开销,排序性能(时间,内存,溢出),执行器HASH性能(时间,内存,溢出)。据此可以识别热点语句,定位语句性能瓶颈,建立语句性能基线,以低成
本预警语句性能变化。
LOCAL_ACTIVE_SESSION, GS_ASP(public schema)
ASP(Active Session Profile) 活跃会话概要信息,通过采样实例活跃会话的状态信息,低成本复现过去一段时间的系统活动,主要包含会话基本信息,会话事务,语句,等待事件,会话状态(active,idle等),当前正阻塞在哪个事件上,正在等待哪个锁,或被哪个会话阻塞。可以从中获取如下主要概要信息:
1. 最近用户session最耗资源的的事件
2. 最近比较占资源的session/SQL把资源都消耗在哪些event上
3. 最近执行时间/执行次数最多的是哪些SQL(进而可以找出表,数据库)
4. 最近钟最耗资源的用户的信息
5. 最近阻塞其他session最多的session
LOCAL_ACTIVE_SESSION的默认采样频率是1s,内存视图, ASP的默认采样频率是10s,持久化在存储
STATEMENT_HISTORY
记录全量SQL信息,分为L0, L1,L2三个等级,可以获取实例信息,客户端信息,语句概要信息,执行信息,行活动信息, Cache/IO,时间模型,网络统计信息,锁概要信息,锁详细信息等。通过全量SQL,可以得到整个系统所有语句的执行流水以及他们的详细
性能数据(持久化的)。除Statement视图提供的能力外,还额外提供了详细加放锁信息,可以诊断到单语句级别的性能波动。
达到慢查询阈值设置的语句性能信息,性能要素和全量SQL一致
核心指标矩阵图如下:
以下两个脑图让人印象深刻
性能调优案例分析-整体性能问题脑图 性能调优案例分析-单语句性能问题脑图
openGauss 安全技术-全密态防篡改
一款数据库除了易于使用、高性能等方面,最重要的还是安全,数据库中存储的都是核心数据,数据是无价的,安全是重中之重。
数据库安全能力架构图:
openGauss 整体安全架构
下下图看,openGauss 考虑已经比较全面了,安全性也非常高。
全密态数据库
防篡改数据库
防篡改账本机制
关于安全方面,openguass 确实做了非常多的工作,像是防篡改账本机制确实是非常好的功能。
openGauss目前发展的比较完善,两天的课程体系内容知识量庞大,无法完全消化掉知识点,还需要一点一点学习,另外就是在实践环境中多多操作,只要动手做的,还是自己的。
希望 openGauss 发展越来越好, 系统以后能在很多场景见到 openGauss 的使用。