一、openGauss的性能指标主要有以下3个方面:
1、系统级:集群级别或节点级指标
- 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、系统级-OS
OS_RUNTIME,OS_THREADS:获取实时的CPU时间,LOAD,内存消耗信息(类似top),用
于判断当前操作系统的负载状态;
查询示例:select id,name,value from dbe_perf.os_runtime;
2、系统级-Instance Time
INSTANCE_TIME:系统级的时间消耗细分。判断是否整个系统是否存在负载,网络,IO,CPU上的瓶颈;
查询示例:select id,name,value from dbe_perf.instance_time;
3、系统级-Memory
MEMORY_NODE_DETAIL:实例级内存(全局,动态内存,共享内存,通信等)分配,使用率
SHARED_MEMORY_DETAIL:共享内存上下文分配/使用率,定位定界可细化至特性级别,结合session级别内存上下文分配视图接口,可帮助定位会话级内存使用问题;
查询示例:
select * from dbe_perf.memory_node_detail;
select * from dbe_perf.shared_memory_detail where level=2 order by usedsize desc limit 10;
4、系统级-Session
SESSION_STAT:会话级负载强度,逻辑/物理读写强度,排序活动等,用于甄别出负载强度高,使用资源多的会话;
SESSION_TIME:会话级时间细分,用于甄别出不同时间维度上session的消耗;
SESSION_MEMORY_DETAIL:会话级总内存和内存上下文分配/使用,可以定位单个session在特性级上的内存问题;
SESSION_STAT_ACTIVITY:获取实时系统活跃会话列表,包括会话基本信息,会话事务,语句,等待事件,会话状态(active,idle等),用于分析当前系统活跃用户的活动信息,比如从语句的开始时间判断当前会话是否一致阻塞在某一个语句,从等待事件可以判断某一个或者多数会话阻塞在哪个事件或者节点(分布式场景);
5、系统级-Thread
THREAD_WAIT_STATUS:获取实例工作线程/辅助线程列表列表,判断线程的运行状态,当前正阻塞在哪个事件上,正在等待哪个锁,或被哪个会话阻塞(提供可以判断系统中的会话等待链的接口);
6、系统级-Events
WAIT_EVENTS:各功能模块中IO, LOCK,LWLOCK,STATUS四类事件的等待次数,等待失败次数,等待时间等维度的统计信息,可以帮助定位特性级细粒度时延性能问题;
查看top10等待事件:
select * from dbe_perf.wait_events order by avg_wait_time desc limit 10;
7、系统级-Utility
COMM_DELAY,COMM_RECV_STREAM,COMM_SEND_STREAM,COMM_STATUS
REPLICATION_STAT
GLOBAL_GET_BGWRITER_STATUS,GLOBAL_PAGEWRITER_STATUS
POOLER_STATUS
01、获取通信组件时延信息,接收和发送流状态,用于诊断通信链路容量和时延故障;
02、获取分布式部署形态下主备同步状态信息,用于诊断主备时延,复制性能故障;
03、获取后台全量/增量检查点信息,buffer中待落盘脏页信息,后台刷脏工作线程的状态将影响buffer pool的效率,磁盘IO繁忙程度,这些信息可以帮助优化缓存和IO性能;
04、分布式部署形态下,CN和DN之间的连接池将影响事务的执行效率和成功率,pooler状态可以帮助诊断连接池瓶颈;
8、对象级-Database
STAT_DATABASE,STAT_DATABASE_CONFLICTS
提供数据库级别的活跃连接数,负载强度,块读写性能,行活动,死锁,临时下盘文件等信息。根据这些信息可以帮助建立数据库访存模型(读写比等负载特点),识别热点数据库,诊断数据库级别大颗粒性能瓶颈;
9、对象级-Table
这几个倒是和Oracle的user_tables,dba_tables,all_tables有点类似;
STAT_USER_TABLES,STAT_SYS_TABLES,STAT_ALL_TABLES,
STATIO_USER_TABLES,STATIO_SYS_TABLES,STATIO_ALL_TABLES
GLOBAL_STAT_HOTKEYS_INFO
01、表上行扫描活动,索引扫描活动,行变更活动,活跃行占比,表维护操作活动(vaccum,analyze),页面读取缓冲命中率等,这些信息可以帮助建立表级别的访存模型(读写比,缓存效率等),识别热点表,预警表维护操作,诊断表级别细粒度性能瓶颈;
02、识别表级别热key,定界热点访问造成的网络,IO瓶颈;
10、对象级-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返回的表行数等,索引页的缓存效率等,用以评估索引收益和效率;
11、对象级-File
FILE_IOSTAT,FILE_REDO_IOSTAT,STAT_BAD_BLOCK
01、数据(数据,索引)文件的IO性能统计指标(读写数目,时延,耗时),可以帮助建立数据文件物理访存的模型,识别文件级别的物理IO强度和瓶颈;
02、获取操作Redo文件的性能,帮助诊断redo日志操作的性能瓶颈;
12、对象级-Lock
LOCKS:对象锁涉及到的对象,事务,会话,锁信息,实时显示当前系统锁等待关系,识别热点锁;
13、对象级-Sequence
STATIO_USER_SEQUENCES,STATIO_SYS_SEQUENCES,STATIO_ALL_SEQUENCES
sequence的缓存效率
14、应用级-Transaction
TRANSACTIONS_RUNNING_XACTS,TRANSACTIONS_PREPARED_XACTS
获取当前正在运行的单节点/两阶段事务列表,结合session和thread视图,诊断运行时间超过预期的事务;
15、应用级-Statement
STATEMENT_COUNT,STATEMENT
01、DDL,DML(select,insert,update,delete),DCL语句的分布比率,帮助建立负载特征模型,预警负载异常变动;
02、语句级别(归一化SQL,模板SQL)的响应时间,执行次数,行活动,软硬解析比,时间模型,网络开销,排序性能(时间,内存,溢出),执行器HASH性能(时间,内存,溢出)。据此可以识别热点语句,定位语句性能瓶颈,建立语句性能基线,以低成本预警语句性能变化。
16、应用级-Active session Profile
LOCAL_ACTIVE_SESSION,GS_ASP(public schema)
ASP(Active Session Profile) 活跃会话概要信息,通过采样实例活跃会话的状态信息,低成本复现过去一段时间的系统活动,主要包含会话基本信息,会话事务,语句,等待事件,会话状态(active,idle等),当前正阻塞在哪个事件上,正在等待哪个锁,或被哪个会话阻塞。可以从中获取如下主要概要信息:
01、最近用户session最耗资源的的事件
02、最近比较占资源的session/SQL把资源都消耗在哪些event上
03、最近执行时间/执行次数最多的是哪些SQL(进而可以找出表,数据库)
04、最近钟最耗资源的用户的信息
05、最近阻塞其他session最多的session
LOCAL_ACTIVE_SESSION的默认采样频率是1s,内存视图,ASP的默认采样频率是10s,持久化在存储;
17、应用级-Full SQL trace ,Slow Query
STATEMENT_HISTORY
记录全量SQL信息,分为L0, L1,L2三个等级,可以获取实例信息,客户端信息,语句概要信息,执行信息,行活动信息,Cache/IO,时间模型,网络统计信息,锁概要信息,锁详细信息等。通过全量SQL,可以得到整个系统所有语句的执行流水以及他们的详细性能数据(持久化的)。
除Statement视图提供的能力外,还额外提供了详细加放锁信息,可以诊断到单语句级别的性能波动。
达到慢查询阈值设置的语句性能信息,性能要素和全量SQL一致
Level 0:性能影响<1%,默认常开;
Level 1:性能影响<3%,建议常开,规划存储;
Level 2:性能影响<30%,建议短暂开启;