Skip to content

Oracle 动态性能视图说明

实例与数据库视图

实例状态视图

视图名称说明主要字段
v$instance显示实例的基本信息和状态instance_name, status, database_status, startup_time, version
v$database显示数据库的基本信息和状态name, dbid, created, log_mode, open_mode, database_role
v$version显示Oracle数据库的版本信息banner, banner_full, banner_legacy
v$thread显示数据库线程的信息thread#, status, enabled, instance
v$parameter显示数据库参数的当前值name, value, description, isdefault, issys_modifiable
v$system_parameter显示系统级参数的信息name, value, description, isdefault, issys_modifiable
v$spparameter显示SPFILE中的参数设置name, value, description, sid, isspecified

数据库服务视图

视图名称说明主要字段
v$services显示数据库服务的信息name, network_name, pdb, service_id, status
v$active_services显示当前活动的数据库服务service_name, network_name, pdb_name, status
v$listener_network显示监听器网络信息network, address, protocol, listener_name

内存管理视图

SGA 视图

视图名称说明主要字段
v$sga显示SGA的总体信息name, value, bytes
v$sga_dynamic_components显示SGA动态组件的信息component, current_size, min_size, max_size, user_specified_size
v$sga_dynamic_free_memory显示SGA中可用的动态内存current_size
v$sga_resize_ops显示SGA组件的调整历史component, oper_type, oper_mode, parameter, initial_size, target_size, final_size, start_time, end_time
v$sga_target_advice显示SGA目标大小的建议sga_size, sga_size_factor, est_db_time, est_db_time_factor

共享池视图

视图名称说明主要字段
v$shared_pool_reserved显示共享池保留区域的使用情况reserved_size, reserved_free_size, used_size, free_size, requests, hits, misses
v$db_object_cache显示共享池中对象的信息owner, name, type, sharable_mem, loads, executions, locks
v$sqlarea显示SQL语句的摘要信息sql_id, sql_text, executions, buffer_gets, disk_reads, cpu_time, elapsed_time
v$sql显示SQL语句的详细信息sql_id, child_number, sql_text, plan_hash_value, executions, buffer_gets, disk_reads, cpu_time, elapsed_time
v$sql_plan显示SQL执行计划sql_id, child_number, operation, options, object_name, cardinality, bytes, cost

PGA 视图

视图名称说明主要字段
v$pgastat显示PGA使用的统计信息name, value, unit
v$pga_target_advice显示PGA目标大小的建议pga_target_for_estimate, pga_target_factor, estd_pga_cache_hit_percentage, estd_overalloc_count
v$process显示Oracle进程的信息pid, spid, username, program, pga_used_mem, pga_alloc_mem, pga_max_mem

会话与进程视图

会话视图

视图名称说明主要字段
v$session显示当前会话的信息sid, serial#, username, machine, program, status, sql_id, sql_child_number, event, wait_class, wait_time, seconds_in_wait
v$session_wait显示会话当前的等待事件sid, event, wait_class, wait_time, seconds_in_wait, state
v$session_event显示会话的等待事件历史sid, event, wait_class, total_waits, total_timeouts, time_waited, average_wait
v$session_longops显示长时间运行的操作sid, serial#, opname, target, sofar, totalwork, units, elapsed_seconds, sql_id
v$open_cursor显示会话打开的游标sid, sql_id, sql_text, cursor_type, open_count

进程视图

视图名称说明主要字段
v$process显示Oracle进程的信息pid, spid, username, program, background, pga_used_mem, pga_alloc_mem
v$bgprocess显示后台进程的信息pid, name, description, status
v$latch显示闩锁的信息name, gets, misses, sleeps, spin_gets, wait_time
v$latchholder显示闩锁持有者的信息sid, pid, latchname, level#

I/O 管理视图

数据文件视图

视图名称说明主要字段
v$datafile显示数据文件的信息file#, name, status, bytes, create_bytes, block_size
v$datafile_header显示数据文件头的信息file#, status, enabled, bytes, block_size, checkpoint_change#
v$filestat显示数据文件的I/O统计file#, phyrds, phywrts, phyblkrd, phyblkwrt, readtime, writetime

表空间视图

视图名称说明主要字段
v$tablespace显示表空间的信息ts#, name, contents, status, bigfile
v$tempfile显示临时文件的信息file#, name, status, bytes, block_size
v$tempstat显示临时文件的I/O统计file#, phyrds, phywrts, phyblkrd, phyblkwrt, readtime, writetime

重做日志视图

视图名称说明主要字段
v$log显示重做日志组的信息group#, thread#, sequence#, bytes, members, status, first_change#, next_change#
v$logfile显示重做日志成员的信息group#, status, type, member
v$log_history显示重做日志历史信息thread#, sequence#, first_change#, first_time, next_change#, next_time
v$logmnr_contents显示LogMiner分析的日志内容timestamp, scn, username, operation, sql_redo, sql_undo

归档日志视图

视图名称说明主要字段
v$archived_log显示归档日志的信息recid, stamp, name, thread#, sequence#, first_change#, next_change#, first_time, next_time, status
v$archive_dest显示归档日志目标的信息dest_id, dest_name, status, type, location, fail_date, fail_time
v$archive_processes显示归档进程的信息pid, status, log_sequence, state

锁与等待事件视图

锁视图

视图名称说明主要字段
v$lock显示当前持有的锁信息sid, type, id1, id2, lmode, request, block
v$locked_object显示被锁定的对象信息session_id, object_id, locked_mode
dba_blockers显示阻塞其他会话的会话信息sid
dba_waiters显示等待其他会话的会话信息sid, waiting_session, holding_session, lock_type, mode_held, mode_requested
v$enqueue_statistics显示队列统计信息statistic_name, value

等待事件视图

视图名称说明主要字段
v$event_name显示所有等待事件的名称和描述event_id, name, parameter1, parameter2, parameter3, wait_class_id, wait_class#, wait_class
v$system_event显示系统级的等待事件统计event, wait_class, total_waits, total_timeouts, time_waited, average_wait, time_waited_micro
v$session_wait_class按等待类显示会话等待统计sid, wait_class_id, wait_class, waits, time_waited
v$system_wait_class按等待类显示系统等待统计wait_class_id, wait_class, waits, time_waited, timeouts

SQL 执行视图

SQL 统计视图

视图名称说明主要字段
v$sql显示SQL语句的详细信息sql_id, child_number, sql_text, plan_hash_value, executions, buffer_gets, disk_reads, cpu_time, elapsed_time, rows_processed
v$sqlarea显示SQL语句的摘要信息sql_id, sql_text, executions, buffer_gets, disk_reads, cpu_time, elapsed_time, rows_processed
v$sql_plan显示SQL执行计划sql_id, child_number, operation, options, object_name, object_type, cardinality, bytes, cost, time
v$sql_plan_monitor显示正在执行的SQL的实时执行计划sql_id, sql_plan_hash_value, operation, options, object_name, cardinality, bytes, elapsed_time, starts, output_rows
v$sql_workarea显示SQL工作区的信息sql_id, child_number, operation_type, last_execution, optimal_executions, onepass_executions, multipass_executions
v$sql_workarea_active显示当前活动的SQL工作区sid, sql_id, operation_type, actual_mem_used, max_mem_used, workarea_size, number_passes

SQL 优化视图

视图名称说明主要字段
v$sql_profile显示SQL配置文件的信息name, sql_text, category, status, created
v$sql_patch显示SQL补丁的信息name, sql_text, status, created
v$sql_plan_baseline显示SQL计划基线的信息sql_handle, plan_name, enabled, accepted, fixed, created, last_modified
dba_sql_plan_baselines显示所有SQL计划基线的详细信息sql_handle, plan_name, sql_text, enabled, accepted, fixed, optimizer_cost, created

性能监控视图

AWR 视图

视图名称说明主要字段
dba_hist_snapshot显示AWR快照的信息snap_id, dbid, instance_number, startup_time, begin_interval_time, end_interval_time
dba_hist_database_instance显示AWR数据库实例信息dbid, instance_number, db_name, instance_name, host_name
dba_hist_sysmetric显示系统级指标的历史数据snap_id, dbid, instance_number, metric_name, metric_id, value, minval, maxval
dba_hist_sysmetric_summary显示系统级指标的摘要信息snap_id, dbid, instance_number, metric_name, metric_id, average, sum, minval, maxval
dba_hist_sessmetric显示会话级指标的历史数据snap_id, dbid, instance_number, session_id, metric_name, metric_id, value

ASH 视图

视图名称说明主要字段
v$active_session_history显示活动会话的历史信息sample_id, sample_time, session_id, session_serial#, sql_id, sql_child_number, sql_opcode, service_hash, module, action, client_id, wait_class, wait_event, session_state, time_waited, blocking_session, blocking_session_serial#
dba_hist_active_sess_history显示ASH数据的历史信息sample_id, sample_time, session_id, session_serial#, sql_id, sql_child_number, wait_class, wait_event, session_state, time_waited, blocking_session

系统性能视图

视图名称说明主要字段
v$sysmetric显示系统级指标的当前值group_id, metric_id, metric_name, metric_value, metric_unit
v$sysmetric_history显示系统级指标的历史值group_id, metric_id, metric_name, metric_value, metric_unit, begin_time, end_time
v$sysstat显示系统级统计信息statistic#, name, class, value
v$mystat显示当前会话的统计信息statistic#, value
v$sesstat显示所有会话的统计信息sid, statistic#, value

常见问题(FAQ)

Q1: 如何查看当前数据库的实例状态?

A: 可以使用以下查询查看当前数据库的实例状态:

sql
SELECT i.instance_name, i.status, i.database_status, d.name, d.log_mode, d.open_mode, d.database_role
FROM v$instance i, v$database d;

Q2: 如何查看当前会话的等待事件?

A: 可以使用以下查询查看当前会话的等待事件:

sql
SELECT s.sid, s.serial#, s.username, s.machine, s.program, s.status, s.event, s.wait_class, s.seconds_in_wait
FROM v$session s
WHERE s.sid = (SELECT sid FROM v$mystat WHERE rownum = 1);

Q3: 如何查看消耗资源最多的SQL语句?

A: 可以使用以下查询查看消耗资源最多的SQL语句:

sql
-- 按CPU时间排序
SELECT sql_id, sql_text, executions, cpu_time/1000000 cpu_time_sec, elapsed_time/1000000 elapsed_time_sec,
       buffer_gets, disk_reads, rows_processed
FROM v$sql
ORDER BY cpu_time DESC
FETCH FIRST 10 ROWS ONLY;

-- 按逻辑读排序
SELECT sql_id, sql_text, executions, buffer_gets, disk_reads, rows_processed
FROM v$sql
ORDER BY buffer_gets DESC
FETCH FIRST 10 ROWS ONLY;

Q4: 如何查看数据库中的锁和阻塞?

A: 可以使用以下查询查看数据库中的锁和阻塞:

sql
-- 查看阻塞其他会话的会话
SELECT s.sid, s.serial#, s.username, s.machine, s.program, s.status, l.type, l.id1, l.id2, l.lmode, l.request, l.block
FROM v$session s, v$lock l
WHERE s.sid = l.sid AND l.block = 1;

-- 查看被阻塞的会话
SELECT s.sid, s.serial#, s.username, s.machine, s.program, s.status, s.event, s.wait_class, s.seconds_in_wait
FROM v$session s
WHERE s.blocking_session IS NOT NULL;

Q5: 如何查看SGA和PGA的使用情况?

A: 可以使用以下查询查看SGA和PGA的使用情况:

sql
-- 查看SGA使用情况
SELECT component, current_size/1024/1024 current_mb, min_size/1024/1024 min_mb, max_size/1024/1024 max_mb
FROM v$sga_dynamic_components
ORDER BY current_size DESC;

-- 查看PGA使用情况
SELECT name, value/1024/1024 value_mb
FROM v$pgastat
WHERE name IN ('aggregate PGA target parameter', 'aggregate PGA auto target', 'total PGA allocated', 'total PGA used for auto workareas', 'total PGA used for manual workareas');

-- 查看进程PGA使用情况
SELECT spid, username, program, pga_used_mem/1024/1024 pga_used_mb, pga_alloc_mem/1024/1024 pga_alloc_mb, pga_max_mem/1024/1024 pga_max_mb
FROM v$process
ORDER BY pga_used_mem DESC
FETCH FIRST 10 ROWS ONLY;

最佳实践

  1. 合理使用动态性能视图:动态性能视图包含大量实时数据,频繁查询可能影响性能,建议在非高峰时段或使用采样方式查询。

  2. 结合AWR和ASH数据:对于长期性能分析,建议使用AWR报告;对于实时性能问题,建议使用ASH数据。

  3. 使用绑定变量查询:在编写查询动态性能视图的SQL时,尽量使用绑定变量,减少硬解析。

  4. 定期收集统计信息:定期收集动态性能视图的统计信息,确保查询这些视图时获得良好的性能。

  5. 使用Oracle提供的工具:Oracle提供了多种工具如OEM、AWR报告、ASH报告等,这些工具基于动态性能视图构建,使用起来更加方便和直观。

  6. 创建性能监控视图:根据业务需求,可以创建自定义的性能监控视图,将多个动态性能视图的数据整合起来,方便日常监控。

  7. 关注关键指标:重点关注CPU使用率、I/O等待、锁等待、SQL执行时间等关键指标,及时发现性能瓶颈。

  8. 定期备份性能数据:对于重要的性能数据,建议定期备份,以便进行历史对比和趋势分析。

  9. 熟悉常用视图:熟悉常用的动态性能视图,如v$session、v$sql、v$lock、v$system_event等,这些视图是性能诊断的基础。

  10. 遵循安全最佳实践:动态性能视图包含敏感信息,应根据最小权限原则授予访问权限,避免安全风险。