开源是数据库发展的大势所趋,数据库国产化替代也正是火热的时期,openGauss是一款开源关系型数据库管理系统,学习是必然是大势所趋,周末两天给自己充充电,参加了openGauss的训练营。
这次内容比较丰富涵盖openGauss体系架构,场景演练(主备HA集群部署),WDR报告和性能调优,openGauss的AI特性,内存优化表,内存表使用最佳实践,实践总结之安装部署避坑指南,最佳参数实践,主备高可用使用问题与解决,openGauss社区介绍。
对openGauss有了新的认识,很多功能很不错,讲师也讲的很不错,很详细,由浅入深,容易理解很实用。
其中比较关注WDR报告和性能调优,讲师从整体性能指标开始一点点深入,如何取WDR性能报告,再到性能案例分析,对openGauss有了整体的认识后,系统的哪些问题应从哪些视图中获取信息讲的很详细,层层深入,很受益。
openGauss集群性能指标体系
1.系统级: 集群级别或节点级别指标
• OS
• Instance Time
• Memory
• Session, Thread
• Events, Utility
2.对象级:数据库对象指标
• Database、Table、Index
• File
• Lock
3.应用级:表征应用负载性能
• Transaction、Statement
• Active session Profile
• Slow query
• Full SQL trace
1.1系统级-OS
• OS_RUNTIME,OS_THREADS
• 获取实时的CPU时间,LOAD,内存消耗信息(类似top),用于判断当前操作系统的负载状态(可以通过视图查询cpu,user_time,systime等信息)
1.2系统级-Instance Time
• INSTANCE_TIME
• 系统级的时间消耗细分。判断是否整个系统是否存在负载,网络,IO,CPU上的瓶颈
db_time 时钟的时间
cpu_time 花费cpu的时间
execution_time执行器花的时间
parse_time/plan语法解析,生成计划的时间
net_send_time 内核发给应用的时间
1.3系统级-Memory
• MEMORY_NODE_DETAIL, SHARED_MEMORY_DETAIL
• 1. 实例级内存(全局,动态内存,共享内存,通信等)分配,使用率
2. 共享内存上下文分配/使用率,定位定界可细化至特性级别,结合session级别内存上下文分配视图接口,可帮助定位会话级内存使用问题
1.4系统级-Session
• SESSION_STAT, SESSION_TIME, SESSION_MEMORY, SESSION_MEMORY_DETAIL, SESSION_STAT_ACTIVITY
1. 会话级负载强度,逻辑/物理读写强度,排序活动等,用于甄别出负载强度高,使用资源多的会话
2. 会话级时间细分,用于甄别出不同时间维度上session的消耗
3. 会话级总内存和内存上下文分配/使用,可以定位单个session在特性级上的内存问题
4. 获取实时系统活跃会话列表,包括会话基本信息,会话事务,语句,等待事件,会话状态(active,idle等),用于分析当前系统活跃用户的活动信息,比如从语句的开始时间判断当前会话是否一致阻塞在某一个语句,从等待事件可以判断某一个或者多数会话阻塞在哪个事件或者节点(分布式场景)
1.5系统级-Thread
• THREAD_WAIT_STATUS
• 获取实例工作线程/辅助线程列表列表,判断线程的运行状态,当前正阻塞在哪个事件上,正在等待哪个锁,或被哪个会话阻塞(提供可以判断系统中的会话等待链的接口)
线程实时视图,每个sql的运行id等信息会显示,可以看到线程的等待状态,及等待事件(wait_status,wait_event)。
1.6系统级-Events
• WAIT_EVENTS
• 各功能模块中IO, LOCK,LWLOCK,STATUS四类事件的等待次数,等待失败次数,等待时间等维度的统计信息,可以帮助定位特性级细粒度时延性能问题
openguasss 有300多个event,每个不同的event代表不同的动作
LWLOCK内部结构需要的一些同步操作
IO_event一些写的动作
LOCK 锁相关的
1.7系统级-Utility
• COMM_DELAY,COMM_RECV_STREAM,COMM_SEND_STREAM,COMM_STATUS
• REPLICATION_STAT (主备复制相关)
• GLOBAL_GET_BGWRITER_STATUS,GLOBAL_PAGEWRITER_STATUS (后台辅助线程)
• POOLER_STATUS
• 1. 获取通信组件时延信息,接收和发送流状态,用于诊断通信链路容量和时延故障
2. 获取分布式部署形态下主备同步状态信息,用于诊断主备时延,复制性能故障
3. 获取后台全量/增量检查点信息,buffer中待落盘脏页信息,后台刷脏工作线程的状态将影响buffer pool的效率,磁盘IO繁忙程度,这些信息可以帮助优化缓存和IO性能
4. 分布式部署形态下,CN和DN之间的连接池将影响事务的执行效率和成功率,pooler状态可以帮助诊断连接池瓶颈
2.1对象级-Database
• STAT_DATABASE,STAT_DATABASE_CONFLICTS
• 提供数据库级别的活跃连接数,负载强度,块读写性能,行活动,死锁,临时下盘文件等信息。根据这些信息可以帮助建立数据库访存模型(读写比等负载特点),识别热点数据库,诊断数据库级别大颗粒性能瓶颈
2.2对象级-Table
• STAT_USER_TABLES, STAT_SYS_TABLES, STAT_ALL_TABLES
STATIO_USER_TABLES, STATIO_SYS_TABLES, STATIO_ALL_TABLES (IO指标,逻辑读,物理读的指标)
GLOBAL_STAT_HOTKEYS_INFO
• 1. 表上行扫描活动,索引扫描活动,行变更活动,活跃行占比,表维护操作活动(vaccum,analyze),页面读取缓冲命中率等,这些信息可以帮助建立表级别的访存模型(读写比,缓存效率等),识别热点表,预警表维护操作,诊断表级别细粒度性能瓶颈
2. 识别表级别热key,定界热点访问造成的网络,IO瓶颈
2.3对象级-Index
• STAT_USER_INDEXES, STAT_SYS_INDEXES, STAT_ALL_INDEXES
STATIO_USER_INDEXES, STATIO_SYS_INDEXES, STATIO_ALL_INDEXES
• 索引使用统计:index scan次数,index scan返回的索引项,通过index scan返回的表行数等,索引页的缓存效率等,用以评估索引收益和效率
2.4对象级-File
• FILE_IOSTAT,FILE_REDO_IOSTAT,STAT_BAD_BLOCK
• 1. 数据(数据,索引)文件的IO性能统计指标(读写数目,耗时,时延),可以帮助建立数据文件物理访存的模型,识别文件级别的物理IO强度和瓶颈
2. 获取操作Redo 文件的性能,帮助诊断redo日志操作的性能瓶颈
2.5对象级-Lock
• LOCKS
• 对象锁涉及到的对象,事务,会话,锁信息,实时显示当前系统锁等待关系,识别热点锁
2.6对象级-Sequence
• STATIO_USER_SEQUENCES, STATIO_SYS_SEQUENCES, STATIO_ALL_SEQUENCES
• sequence的缓存效率
3.1应用级-Transaction
• TRANSACTIONS_RUNNING_XACTS, TRANSACTIONS_PREPARED_XACTS
• 获取当前正在运行的单节点/两阶段事务列表,结合session和thread视图,诊断运行时间超过预期的事务
3.2应用级-Statement
• STATEMENT_COUNT,STATEMENT
• 1. DDL,DML(select,insert,update,delete),DCL语句的分布比率,帮助建立负载特征模型,预警负载异常变动
2. 语句级别(归一化SQL,模板SQL)的响应时间,执行次数,行活动,软硬解析比,时间模型,网络开销,排序性能(时间,内存,溢出),执行器HASH性能(时间,内存,溢出)。据此可以识别热点语句,定位语句性能瓶颈,建立语句性能基线,以低成本预警语句性能变化。
3.3应用级-Active session Profile
• 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,持久化在存储
3.4应用级-Full SQL trace&SlowQuery
• STATEMENT_HISTORY
• 记录全量SQL信息,分为L0, L1,L2三个等级,可以获取实例信息,客户端信息,语句概 要信息,执行信息,行活动信息,Cache/IO,时间模型,网络统计信息,锁概要信息, 锁详细信息等。通过全量SQL,可以得到整个系统所有语句的执行流水以及他们的详细 性能数据(持久化的)。除Statement视图提供的能力外,还额外提供了详细加放锁信息,可以诊断到单语句级别的性能波动。
• 达到慢查询阈值设置的语句性能信息,性能要素和全量SQL一致
下面则是介绍WDR性能报告
WDR-WDR Snapshot
• 定期对DBE_PERF内global/summary视图采集快照
dbe_perf.summary_statement -> snapshot.snap_summary_statement
dbe_perf. summary_workload_sql_count -> snapshot. snap_summary_workload_sql_count
• 查看当前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();
CCN + monadmin
• 默认:
1小时自动运行一次
数据保留8天
WDR-生成WDR Report
• select generate_wdr_report(begin_snap_id Oid, end_snap_id Oid, int report_type, int report_scope, int node_name );
• report_type - summary/ detail/ all
• report_scope - cluster/ node
• node_name – 结点级别report时候,指定node name; cluster级别省略或者指定为 NULL
• 要在postgres库内执行
• 以下情况WDR Report不可生成:
两次Snapshot之间结点(CN/DN)重启
两次Snapshot之间Drop DB
WDR-集群级报表
• 集群级Report
• Summary
• Database Stat
• Load Profile
• Instance Efficiency Percentages
• IO Profile
• SQL Statistics
• Cache IO Stats
• Object Stats
• SQL Detail
WDR-节点级报表
• Summary
• Instance Efficiency Percentages
• Top 10 Events by Total Wait Time
• Wait Classes by Total Wait Time
• IO Profile
• Memory Statistics
• Time Model
• SQL Statistics
• Wait Events
• Cache IO Stats
• Utility Status
• Object stats
• Configuration Settings
性能调优案例分析-整体性能问题
性能调优案例分析-单语句性能问题
从以上知识可以看出openGauss查找相关性能问题的功能还是很强大的,系统相关的指标在数据库的相关视图里也能方便查看,WDR报告与Oracle中的AWR报告也挺相似,学习起来也容易理解,老师也通过思维导图引导出现性能问题的时候从哪些方面入手,整体性能应该怎么分析,单语句性能时应该怎么分析,有了个大方向。
此次短短的几个小时学习了这么多知识还是有些没能记住,后续需要继续学习,空闲时间得多看看相关文章,动手实践才能更好的掌握相关的知识。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。