Oracle 19C 数据字典 DBA_HIST_SEG_STAT 详细说明
1. 视图概述
DBA_HIST_SEG_STAT 是 Oracle 19C 中 AWR(Automatic Workload Repository,自动工作负载库)系列数据字典视图的重要组成部分,主要用于存储数据库段(Segment)级别的历史性能统计数据。这些数据来源于 AWR 快照,通过对该视图的分析,数据库管理员(DBA)可以追溯段的资源使用情况、性能变化趋势,定位因段设计不合理或使用不当导致的性能瓶颈,为段优化(如分区调整、索引重建、空间回收等)提供数据支撑。
与实时统计视图 V$SEGSTAT 相比,DBA_HIST_SEG_STAT 聚焦于历史数据,能够反映段在不同时间周期内的性能表现,适用于长期性能分析和问题回溯;而 V$SEGSTAT 则提供当前数据库实例中段的实时统计信息,更适合即时性能监控。
2. 基本信息
2.1 数据来源
该视图的数据来源于 AWR 快照。Oracle 数据库会按照预设的周期(默认每小时)生成 AWR 快照,将 V$SEGSTAT 等动态性能视图中的统计数据采样并存储到 AWR 基表中,DBA_HIST_SEG_STAT 视图则是对这些基表数据的封装和展示,其数据保留周期与 AWR 快照的保留期一致(默认 8 天,可通过 DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS 过程调整)。
2.2 适用场景
段级性能问题诊断:定位长期存在高 I/O、高竞争的段(如表、索引、LOB 段等)。
容量规划与空间优化:分析段的空间增长趋势、读写频率,为存储分配和空间回收提供依据。
优化效果验证:对比优化操作(如索引创建、段收缩)前后段的性能统计数据,评估优化效果。
历史问题回溯:当数据库出现间歇性性能问题时,通过该视图查询对应时间窗口的段统计数据,定位根因。
2.3 权限要求
查询 DBA_HIST_SEG_STAT 视图需要具备以下权限之一:
SELECT ANY DICTIONARY 系统权限;
DBA 角色;
被授予该视图的 SELECT 权限。
3. 核心字段说明
DBA_HIST_SEG_STAT 视图包含大量字段,涵盖段标识、快照信息、I/O 统计、空间统计、事务统计等维度,以下按功能分类介绍核心字段:
3.1 段标识字段(用于定位唯一段)
字段名 | 数据类型 | 说明 |
|---|---|---|
TS# | NUMBER | 表空间编号,与 DBA_TABLESPACES 视图的 TS# 字段关联,用于定位段所在的表空间。 |
OBJ# | NUMBER | 数据对象编号,与 DBA_OBJECTS 视图的 OBJECT_ID 字段关联,用于唯一标识数据库中的对象(如表、索引)。 |
DATAOBJ# | NUMBER | 数据对象版本编号,当对象发生 truncate、闪回等操作时,DATAOBJ# 会变化,用于区分对象的不同版本。 |
OWNER | VARCHAR2(128) | 段的所有者(用户),与 DBA_USERS 视图的 USERNAME 关联。 |
OBJECT_NAME | VARCHAR2(128) | 段对应的对象名(如表名、索引名)。 |
OBJECT_TYPE | VARCHAR2(23) | 对象类型,常见值包括 TABLE、INDEX、LOBSEGMENT、LOBINDEX 等。 |
TABLESPACE_NAME | VARCHAR2(30) | 段所在的表空间名,与 DBA_TABLESPACES 视图的 TABLESPACE_NAME 关联,比 TS# 更直观。 |
3.2 快照关联字段(用于定位时间范围)
字段名 | 数据类型 | 说明 |
|---|---|---|
SNAP_ID | NUMBER | AWR 快照编号,唯一标识一次快照,与 DBA_HIST_SNAPSHOT 视图的 SNAP_ID 关联,用于确定统计数据的采集时间点。 |
DBID | NUMBER | 数据库标识符,用于在 RAC 环境或多数据库环境中区分不同数据库,与 DBA_HIST_SNAPSHOT 的 DBID 一致。 |
INSTANCE_NUMBER | NUMBER | 实例编号,在 RAC 环境中用于标识数据来自哪个数据库实例,与 DBA_HIST_SNAPSHOT 的 INSTANCE_NUMBER 关联。 |
BEGIN_INTERVAL_TIME | TIMESTAMP(3) WITH TIME ZONE | 快照周期的开始时间,用于明确统计数据对应的时间范围起点。 |
END_INTERVAL_TIME | TIMESTAMP(3) WITH TIME ZONE | 快照周期的结束时间,用于明确统计数据对应的时间范围终点,字段值与 DBA_HIST_SNAPSHOT 的 END_INTERVAL_TIME 一致。 |
3.3 I/O 相关统计字段(核心性能指标)
字段名 | 数据类型 | 说明 |
|---|---|---|
PHYSICAL_READS_TOTAL | NUMBER | 快照周期内该段的物理读总数(单位:数据块),包括单块读和多块读,反映段的磁盘 I/O 负载,值过高可能意味着缓存命中率低或段访问频繁。 |
PHYSICAL_READS_DIRECT_TOTAL | NUMBER | 快照周期内该段的直接物理读总数(单位:数据块),直接读通常用于大表扫描、并行操作等场景,过多直接读可能影响系统 I/O 性能。 |
PHYSICAL_WRITES_TOTAL | NUMBER | 快照周期内该段的物理写总数(单位:数据块),反映段的数据修改频率,值过高可能与频繁的 INSERT/UPDATE/DELETE 操作相关。 |
PHYSICAL_WRITES_DIRECT_TOTAL | NUMBER | 快照周期内该段的直接物理写总数(单位:数据块),常见于直接路径插入(如 INSERT /*+ APPEND */)等操作。 |
LOGICAL_READS_TOTAL | NUMBER | 快照周期内该段的逻辑读总数(单位:数据块),包括从缓冲区缓存中读取的数据块,反映段的访问热度,逻辑读过高通常意味着段被频繁访问。 |
LOGICAL_WRITES_TOTAL | NUMBER | 快照周期内该段的逻辑写总数(单位:数据块),即对缓冲区缓存中数据块的修改次数,与事务操作密切相关。 |
3.4 空间相关统计字段
字段名 | 数据类型 | 说明 |
|---|---|---|
SPACE_USED_TOTAL | NUMBER | 快照周期内段使用的总空间(单位:字节),反映段的实际空间占用情况,需结合段的类型(如普通表、LOB 段)分析。 |
SPACE_ALLOCATED_TOTAL | NUMBER | 快照周期内为段分配的总空间(单位:字节),包括已使用和未使用的空间,与表空间的存储参数(如 INITIAL、NEXT)相关。 |
EXTENTS_TOTAL | NUMBER | 快照周期内段的总扩展段数,过多的扩展段可能导致段碎片,影响 I/O 性能,尤其是对于大表和索引。 |
3.5 事务与竞争相关字段
字段名 | 数据类型 | 说明 |
|---|---|---|
ROWS_INSERTED_TOTAL | NUMBER | 快照周期内该段的插入行数,反映段的数据新增频率。 |
ROWS_UPDATED_TOTAL | NUMBER | 快照周期内该段的更新行数,值过高可能意味着段存在频繁的修改操作,需关注索引有效性。 |
ROWS_DELETED_TOTAL | NUMBER | 快照周期内该段的删除行数,大量删除可能导致段产生碎片,需考虑段收缩或重组。 |
BUFFER_BUSY_WAITS_TOTAL | NUMBER | 快照周期内该段的缓冲区忙等待总数,是常见的性能竞争指标,通常由多个会话同时访问同一数据块导致。 |
ITL_WAITS_TOTAL | NUMBER | 快照周期内该段的 ITL( Interested Transaction List,事务兴趣列表)等待总数,通常因数据块的 ITL 槽不足导致,需调整表的 INITRANS 或 MAXTRANS 参数。 |
4. 典型查询场景
4.1 场景 1:查询指定时间范围内表A的所有统计信息
以下通过实际 SQL 示例,展示 DBA_HIST_SEG_STAT 视图的常见使用场景,所有示例均结合 DBA_HIST_SNAPSHOT 视图获取时间信息,确保结果的时间维度准确性。
SELECT a.dbid, -- 数据库标识符a.obj#, -- 数据字典对象编号a.object_name, -- 对象名称a.owner, -- 对象所有者-- 逻辑I/O相关统计SUM(b.LOGICAL_READS_DELTA) AS LOGICAL_READS_DELTA, -- 快照期间逻辑读次数(块数),高值可能表示全表扫描或低效索引SUM(b.BUFFER_BUSY_WAITS_DELTA) AS BUFFER_BUSY_WAITS_DELTA, -- 快照期间缓冲区忙等待次数,高值表示热点块竞争SUM(b.DB_BLOCK_CHANGES_DELTA) AS DB_BLOCK_CHANGES_DELTA, -- 快照期间块修改次数(DML操作),反映DML活动强度-- 物理I/O相关统计SUM(b.PHYSICAL_READS_DELTA) AS PHYSICAL_READS_DELTA, -- 快照期间物理读次数(块数),I/O负载主要指标SUM(b.PHYSICAL_WRITES_DELTA) AS PHYSICAL_WRITES_DELTA, -- 快照期间物理写次数(块数),写操作强度SUM(b.PHYSICAL_READS_DIRECT_DELTA) AS PHYSICAL_READS_DIRECT_DELTA, -- 快照期间直接路径读次数(块数),并行查询/全表扫描绕过Buffer CacheSUM(b.PHYSICAL_WRITES_DIRECT_DELTA) AS PHYSICAL_WRITES_DIRECT_DELTA, -- 快照期间直接路径写次数(块数),直接负载插入操作-- 空间使用相关统计SUM(b.SPACE_USED_DELTA) AS SPACE_USED_DELTA, -- 快照期间使用空间块数变化量,正数=增长,负数=收缩SUM(b.SPACE_ALLOCATED_DELTA) AS SPACE_ALLOCATED_DELTA, -- 快照期间分配空间块数变化量,空间分配变化SUM(b.TABLE_SCANS_DELTA) AS TABLE_SCANS_DELTA, -- 快照期间全表扫描次数,表访问模式分析-- 并发访问相关统计SUM(b.ROW_LOCK_WAITS_DELTA) AS ROW_LOCK_WAITS_DELTA, -- 快照期间行锁等待次数,高值表示热点行更新竞争SUM(b.ITL_WAITS_DELTA) AS ITL_WAITS_DELTA, -- 快照期间ITL(事务槽)等待次数,INITRANS可能不足的指示-- RAC全局缓存相关统计SUM(b.GC_CR_BLOCKS_SERVED_DELTA) AS GC_CR_BLOCKS_SERVED_DELTA, -- 快照期间服务给其他实例的一致性读块数,本实例作为提供者SUM(b.GC_CU_BLOCKS_SERVED_DELTA) AS GC_CU_BLOCKS_SERVED_DELTA, -- 快照期间服务给其他实例的当前块数,当前块提供服务SUM(b.GC_CR_BLOCKS_RECEIVED_DELTA) AS GC_CR_BLOCKS_RECEIVED_DELTA, -- 快照期间从其他实例接收的一致性读块数,本实例作为消费者SUM(b.GC_CU_BLOCKS_RECEIVED_DELTA) AS GC_CU_BLOCKS_RECEIVED_DELTA, -- 快照期间从其他实例接收的当前块数,当前块消费SUM(b.gc_buffer_busy_delta) AS gc_buffer_busy_delta -- 快照期间全局缓存忙块等待次数,全局缓存竞争指标FROM dba_hist_seg_stat_obj a
JOIN dba_hist_seg_stat b ON a.dbid = b.dbid AND a.obj# = b.obj# AND a.dataobj# = b.dataobj#
JOIN dba_hist_snapshot c ON b.snap_id = c.snap_id AND b.dbid = c.dbid AND b.instance_number = c.instance_number
WHERE a.object_name = 'A'AND c.begin_interval_time >= TO_DATE('20251103000000','yyyy-mm-dd hh24:mi:ss') AND c.end_interval_time <= TO_DATE('20251104000000','yyyy-mm-dd hh24:mi:ss')
GROUP BY a.dbid, a.obj#, a.owner, a.object_name
ORDER BY LOGICAL_READS_DELTA DESC;5. 注意事项
数据时效性限制:该视图的数据来源于 AWR 快照,若快照未开启(默认开启)或快照保留期过短,会导致历史数据缺失。需确保 AWR 快照配置合理(通过 DBA_HIST_WR_CONTROL 视图查看配置)。
统计数据累积性:视图中的 _TOTAL 后缀字段为快照周期内的累积值,而非瞬时值。在进行跨快照对比时,需计算不同快照间的差值(如通过 LAG 函数),避免直接使用累积值导致分析误差。
RAC 环境适配:在 RAC 环境中,需通过 INSTANCE_NUMBER 字段区分不同实例的统计数据,若需获取整个集群的汇总数据,需按段标识字段聚合所有实例的数据。
字段单位差异:部分字段单位为数据块(如 PHYSICAL_READS_TOTAL),部分为字节(如 SPACE_USED_TOTAL),分析时需统一单位(如通过 DB_BLOCK_SIZE 转换数据块为字节),避免单位混淆。
对象名变更影响:若段的名称发生修改(如 ALTER TABLE RENAME),DBA_HIST_SEG_STAT 视图中存储的是快照采集时的对象名,查询历史数据时需结合 DBA_OBJECTS 的历史信息(如通过闪回查询)确认对象关联关系。
6. 关联视图扩展
为更全面地分析段的性能,DBA_HIST_SEG_STAT 通常需与以下视图配合使用:
DBA_HIST_SNAPSHOT:获取快照的时间信息,用于定位统计数据的时间范围。
DBA_OBJECTS:通过 OBJ# 关联,获取段的详细对象信息(如创建时间、状态)。
DBA_TABLESPACES:通过 TS# 或 TABLESPACE_NAME 关联,获取表空间的存储属性(如块大小、管理方式)。
DBA_HIST_SEG_STAT_OBJ:存储 DBA_HIST_SEG_STAT 视图中对象的补充信息,如分区表的分区编号等,适用于分区对象分析。
V$SEGSTAT:对比实时统计数据,验证历史数据的准确性或分析当前性能状态。
