#数据库性能指标
数据库的性能需要通过一定的指标来反映。除应用本身的指标外,YashanDB还提供一系列用于衡量性能的指标,主要包含数据库负载以及各种资源的使用情况,理解这些指标可以帮助诊断性能瓶颈,并可以将其作为调优效果的衡量方法。
YashanDB提供分四种不同层次和维度的统计指标:
- 系统级统计:从数据库实例的角度,提供分析整体性能的指标,包括不同组件和模块的统计信息。
- 会话级统计:由于不同会话的性能瓶颈存在差异,需要从会话的角度,提供分析每个会话性能的指标。
- 语句级统计:从单条SQL语句的角度,提供分析SQL语句性能的指标。
- 等待事件统计:从因等待某些资源而导致阻塞的角度,提供分析性能的指标。
# 系统级统计
系统级性能指标从时间或次数的角度统计了YashanDB运行过程中的一些关键内部活动信息,每个统计项在不同程度反映数据库某方面的性能表现,实际使用中通常需要结合多种指标项来确定性能问题的根因,具体每个统计项的含义请查阅参考手册统计信息章节。
用户可以通过V$SYSSTAT视图查询各统计项的值,同时可以看到统计项根据功能被归属的分类:
类别编号 | 类别名称 | 说明 |
---|---|---|
1 | USER | 用户执行相关的统计信息项,例如事务提交数量、SQL请求数量等。 |
2 | REDO | redo日志相关的统计信息项,反映系统redo资源的使用情况。 |
8 | CACHE | 数据库内部各类CACHE相关的统计信息项。 |
64 | SQL | SQL执行相关的统计信息项,例如不同DML执行次数、排序次数等。 |
128 | DEBUG | 用于内部DEBUG的统计信息项,用户一般不需要关注。 |
# 会话级统计
会话级的统计信息可以通过V$SESSTAT视图获取(该视图只提供统计项的ID,具体名称需要结合V$STATNAME视图获取),如果只关注当前会话的统计信息,可以通过V$MYSTAT视图获取。
会话级的统计项和分类与系统级的统计项类似。
# 语句级统计
语句级统计为与SQL相关的统计信息,可以通过V$SQL视图获取,需关注的字段如下:
字段 | 类型 | 说明 |
---|---|---|
SHARABLE_MEM | INTEGER | 在SQL Pool中占用的共享内存大小(单位:Byte) |
FETCHES | BIGINT | SQL语句的fetch数 |
EXECUTIONS | BIGINT | 被载入缓存库后的执行次数 |
ROWS_PROCESSED | BIGINT | SQL语句返回的总列数 |
PARSE_CALLS | BIGINT | 解析调用次数 |
DISK_READS | BIGINT | 读磁盘次数 |
BUFFER_GETS | BIGINT | 读缓存区次数 |
PHYSICAL_READ_REQUESTS | BIGINT | SQL发出的物理读取I/O请求数 |
PHYSICAL_READ_BYTES | BIGINT | SQL读磁盘的字节数 |
PHYSICAL_WRITE_REQUESTS | BIGINT | SQL发出的物理写入I/O请求数 |
PHYSICAL_WRITE_BYTES | BIGINT | SQL写入磁盘的字节数 |
USER_IO_WAIT_TIME | BIGINT | 用户I/O等待时间(单位:微秒) |
PLSQL_EXEC_TIME | BIGINT | PL执行时间(单位:微秒) |
CPU_TIME | BIGINT | 解析/执行/取得等CPU使用时间(单位:微秒) |
ELAPSED_TIME | BIGINT | 解析/执行/取得等消耗时间(单位:微秒) |
# 等待事件统计
在数据库的运行过程中,其内部可能因为某些关键活动(例如I/O)产生等待,从而产生一次事件,称为等待事件。对等待事件进行统计得到的信息可以反馈数据库的性能瓶颈,例如锁竞争的等待事件较多时,就需要考虑锁是否成为数据库瓶颈。
YashanDB将等待事件分为以下类别,每种等待类别下包含一种或者多种具体的等待事件:
- Application:由应用产生的等待,例如不同应用层事务产生的行锁等待。
- Concurrency:数据库内部资源产生的等待,例如latch的竞争等待。
- Commit:事务提交时,redo日志同步产生的等待。
- User I/O:用户线程产生的I/O,例如读取数据块产生的I/O等待。
- System I/O:数据库后台线程I/O导致的等待,例如Database Writer线程将脏数据块同步到磁盘导致的I/O等待。
- Other:其他类型的等待。
- Idle:数据库等待客户端消息,此类等待事件表示会话此时处于空闲状态。
- Network:因网络传输产生的等待,例如数据在网络传输期间产生的等待。
- Configuration:因数据库实例配置产生的等待,例如配置redo大小、undo大小、DATA BUFFER大小时产生的等待。
- Cluster:集群等待事件,例如跨节点交互等待应答。
- Distributed:分布式等待事件,例如CN等待各节点回应。
每类等待事件代表了一类问题,并对应特定的优化方式。用户可以通过V$SYSTEM_WAIT_CLASS视图获取不同类别的等待事件统计信息,且该统计信息区分了前台线程和后台线程。一般情况下,性能问题主要反映在前台线程的统计信息中。
V$SYSTEM_EVENT视图提供具体的等待事件的统计信息,包括等待的次数、等待的时间等维度。关于YashanDB中所有等待事件的含义和分析方式描述请查阅参考手册等待事件章节。