一,动态性能视图介绍

动态性能视图属于数据字典,系统管理员用户 SYS 可以访问它们。在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关。虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改。这些视图提供内部磁盘结构和内存结构方面的数据。用户可以对这些视图进行查询,以便对系统进行管理与优化。当数据库管理员启动某个例程时,数据库会自动建立动态性能视图;当停止某个例程时,数据库又会自动删除这些动态性能视图。

我们能再动态视图中掌握:

数据库运行相关的性能数据,如内存的使用量、磁盘排序发生的机率等等。

取得与磁盘和内存结构相关的其他信息。

二,状态转换时的动态性能视图

 (1)数据库处于“NOMOUNT”状态。数据库启动例程时,Oracle数据库会打开参数文件,分配SGA内存并启动后台进程。此时,其实数据库还没有挂栽。此时,动态性呢视图收集的信息来源只有是SGA,而不会从控制文件中收集相关的信息。所以,动态性能视图的数量要少得多。

(2)当数据库处于MOUNT状态时,数据库会根据初始化参数打开所有的控制文件。所以,当例程处于Mount状态时,动态性能视图其收集到的信息就要第一个状态多的多。因为此时,动态性能视图还会去收集控制文件的相关信息。不过,此时动态性能视图所收集到的资料还不是最全的。

(3)当用户打开数据库时,Oracle系统会根据控制文件所记载的信息去打开所有的数据库文件以及重做日志。此时,数据库管理员除了可以从 SGA和控制文件中获取信息的动态性能视图外,还可能访问与Oracle数据库性能相关的动态性能视图,如会话等待时间等视图。另外需要注意一点,就是只有在这个状态时,我们才能够访问数据库的数据字典视图。

三,V$, V_$, GV$,  X$ 视图说明

1,说明

GV$:全局视图,针对多个实例环境

V$:针对某个实例的视图。

X$:是GV$视图的数据来源,Oracle内部表。

-v$ 是v_$的同义词,v_$是基于真正的视图v$,而真正的v$视图是在gv$的基础上限制inst_id得到;

--gv$是gv_$的同义词,gv_$基于真正的视图gv$,而真正的gv$视图基于系统表X$。

2,X$表

X$表包含了特定实例的各方面的信息,是Oracle数据库的运行基础,如当前的配置信息,连接到实例的会话,以及丰富而有价值的性能信息。 X$表并不是驻留在数据库文件的永久表或临时表。X$表仅仅驻留在内存中,当实例启动时,由Oracle应用程序动态创建,在内存中进行实时的维护。 它们中的大多数至少需要装载或已经打开的数据库。X$表为SYS用户所拥有,并且是只读的。 不能进行DML(更新,插入,删除)。X$表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许。

查询:

select * from v$fixed_table where rownum<5;

oracle 基础知识(七)----动态性能视图_oracle

查询X表的个数
SQL> select count(*) from v$fixed_table where name like 'X$%';

COUNT(*)
----------
985

SQL> select * from bootstrap$; ---从bootstarop中查看X$表,里面记录了数据库启动的基本及驱动信息。

LINE# OBJ#
---------- ----------
SQL_TEXT
--------------------------------------------------------------------------------
-1 -1
8.0.0.0.0

0 0
CREATE ROLLBACK SEGMENT SYSTEM STORAGE ( INITIAL 112K NEXT 56K MINEXTENTS 1 MAX
EXTENTS 32765 OBJNO 0 EXTENTS (FILE 1 BLOCK 128))

20 20
CREATE TABLE ICOL$("OBJ#" NUMBER NOT NULL,"BO#" NUMBER NOT NULL,"COL#" NUMBER NO

LINE# OBJ#
---------- ----------
SQL_TEXT
--------------------------------------------------------------------------------
T NULL,"POS#" NUMBER NOT NULL,..........


3, V$ 视图

动态性能视图由前缀V_$标识。这些视图的公用同义词具有前缀V$。数据库管理员或用户应该只访问V$对象,而不是访问V_$对象。动态性能视图由企业管理器和Oracle Trace 使用,Oracle Trace 是访问系统性能信息的主要​​界面​​。一旦实例启动,从内存读取数据的 V$视图就可以访问

查询视图:

select * from DBA_SYNONYMS where rownum<5;oracle 基础知识(七)----动态性能视图_数据库_02

SQL> select count(*) from v$fixed_table where name like 'V$%';

COUNT(*)
----------
552


4, GV$ 视图

从Oracle8开始,GV$视图开始被引入, GV$(Global V$,全局V$)。除了一些特例以外(如:V$CACHE_LOCK、V$LOCK_ACTIVITY、V$LOCKS_WITH_COLLISIONS和V$ROLLNAME),每个V$视图都有一个对应的GV$视图存在。在并行服务器环境下,可查询GV$视图从所有限定实例中检索V$视图的信息。V$视图和GV$视图是相同的,V$比GV$只是少了INST_ID字段。INST_ID 列显示从其获得相关的V$视图信息的实例号。INST_ID 列可用作一个从可得到的实例集检索V$信息的过滤器。

查询GV视图:

通过v$fixed_table 查询GV$视图信息:

SQL> select count(*) from v$fixed_table where name like 'GV$%';

COUNT(*)
----------
523


5, G_$是全局视图,多由x$表得来

查看

select * from v$fixed_view_definition where instr(view_name,'$')=3 and rownum<3;

oracle 基础知识(七)----动态性能视图_sql_03

select * from DBA_SYNONYMS where synonym_name like 'GV%' and rownum<5;

oracle 基础知识(七)----动态性能视图_oracle_04

四,常用的动态性能视图

(1)v$sysstat  

​--整个系统的统计信息展示系统状态。​

oracle 基础知识(七)----动态性能视图_sql_05

(2)v$sesstat  

 ​​–-每个会话的统计信息​

(3)v$sql & v$sql_plan  

(4)v$sqltext & v$sqlarea  

(5)v$session  

(6)v$session_wait & v$session_event  

​当前活动的会话正在等待的事件情况或者每个会话对每个事件的等待情况​

(7)v$process  

作用: v$process视图包含当前系统oracle运行的所有进程信息。常被用于将oracle或服务进程的操作系统进程ID与数据库session之间建立联系。

oracle 基础知识(七)----动态性能视图_oracle_06


(8)v$lock & v$locked_object  

(9)v$filestat  

(10)v$session_longops  

(12)v$db_object_cache  

(13)v$open_cursor  

(13)v$open_cursor  

(14)v$parameter & v$system_parameter

(15)v$rollstat  

 ​​V$ROLLNAME​​​显示处于ONLINE状态的UNDO段,​​V$ROLLSTAT​​显示UNDO段的统计信息。通过二者执行连接查询,以显示UNDO的详细统计信息

 select a.name,b.xacts from V$rollname a,V$rollstat b where a.usn=b.usn; oracle 基础知识(七)----动态性能视图_数据库_07

(16)v$rowcache  

shared pool / Library cache

(17)v$segstat & v$segment_statistics  

(18)v$system_event

(19)v$undostat  

(20)v$waitstat 

(21)V$TABLESPACE

 显示表空间信息

oracle 基础知识(七)----动态性能视图_oracle_08

(22)V$THREAD

取得重做线程的详细信息,当使用RAC结构时,每个例程都对应一个重做线程,并且每个重做线程包含独立的重做日志组。

select thread#,status,groups,instance,sequence# from v$thread ;

oracle 基础知识(七)----动态性能视图_oracle_09

(23)​​V$LOCK​

显示锁信息,通过与​​V$SESSION​​进行连接查询,可以显示占有锁的会话,以及等待锁的会话。

(24)​​V$LOCKED_OBJECT​

显示被加锁的数据库对象。通过与DBA_OBJECTS进行连接查询,以显示具体的对象名及执行加锁操作的ORACLE用户名。

例:

oracle 基础知识(七)----动态性能视图_sql_10oracle 基础知识(七)----动态性能视图_数据库_11

1 select a.oracle_username,b.owner||'.'||b.object_name object
2 from V$locked_object a,dba_objects b
3 where a.object_id=b.object_id;

View Code

(25)​​V$FIXED_TABLE​

该动态性能视图用于列出所有可用的动态性能视图和动态性能表。

​select * from v$fixed_table ; ​

oracle 基础知识(七)----动态性能视图_数据库_12

(26)​​V$INSTANCE​

获取当前例程的详细信息。


select instance_name,host_name,status from V$instance;


oracle 基础知识(七)----动态性能视图_基础应用_13

(27)V$SGA---​​V$SGAINFO​

显示SGA主要组成部分和更详细的信息

oracle 基础知识(七)----动态性能视图_基础应用_14

oracle 基础知识(七)----动态性能视图_oracle_15

(28)​​V$VERSION​

    获取版本    获取版本

(29)​​V$OPTION​

    显示已经安装的ORACLE选项


select * from v$option;

oracle 基础知识(七)----动态性能视图_基础应用_16

  (30)​​V$BGPROCESS​

    显示后台进程详细信息

  ​​select name,description from V$bgprocess​​​ oracle 基础知识(七)----动态性能视图_oracle_17

  (31)$DATABASE

    取得当前数据库的详细信息

oracle 基础知识(七)----动态性能视图_oracle_18

  (32)​​V$DATAFILE​

       select file#,name,bytes from v$datafile ; 

oracle 基础知识(七)----动态性能视图_sql_19

   (33)​​V$DBFILE​

  取得数据文件编号及名称


select * from v$dbfile ;


oracle 基础知识(七)----动态性能视图_数据库_20

  (34)​​V$LOGFILE​

  显示重做日志成员的信息


select group#,member from V$logfile;


  (35)​​V$LOG​


select group#,thread#,sequence#,bytes,members,status   from V$log;


oracle 基础知识(七)----动态性能视图_基础应用_21

...等等