外观
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;最佳实践
合理使用动态性能视图:动态性能视图包含大量实时数据,频繁查询可能影响性能,建议在非高峰时段或使用采样方式查询。
结合AWR和ASH数据:对于长期性能分析,建议使用AWR报告;对于实时性能问题,建议使用ASH数据。
使用绑定变量查询:在编写查询动态性能视图的SQL时,尽量使用绑定变量,减少硬解析。
定期收集统计信息:定期收集动态性能视图的统计信息,确保查询这些视图时获得良好的性能。
使用Oracle提供的工具:Oracle提供了多种工具如OEM、AWR报告、ASH报告等,这些工具基于动态性能视图构建,使用起来更加方便和直观。
创建性能监控视图:根据业务需求,可以创建自定义的性能监控视图,将多个动态性能视图的数据整合起来,方便日常监控。
关注关键指标:重点关注CPU使用率、I/O等待、锁等待、SQL执行时间等关键指标,及时发现性能瓶颈。
定期备份性能数据:对于重要的性能数据,建议定期备份,以便进行历史对比和趋势分析。
熟悉常用视图:熟悉常用的动态性能视图,如v$session、v$sql、v$lock、v$system_event等,这些视图是性能诊断的基础。
遵循安全最佳实践:动态性能视图包含敏感信息,应根据最小权限原则授予访问权限,避免安全风险。
