Oracle-动态性能视图解读-更新中

概述

动态性能视图属于数据字典,它们的所有者为SYS,并且多数动态性能视图只能由特权用户和DBA用户查询

数据库处于不同状态时,可以访问的动态性能视图有所不同。

启动例程时,ORACLE会自动建立动态性能视图;停止例程时,ORACLE会自动删除动态性能视图。

数据字典信息是从数据文件中获得,而动态性能视图信息是从SGA和控制文件取得。

所以,两者所反映的信息还是有很大差异的。数据库管理员利用这些动态性能视图,可以了解数据库运行的一些基本信息,为我们进行数据库维护以及数据库性能优化提供一些数据上的支持

动态性能视图在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关。

虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改

这些视图提供内部磁盘结构和内存结构方面的数据。用户可以对这些视图进行查询,以便对系统进行管理与优化。

所有动态性能视图都是以V_$开始的,ORACLE为每个动态性能视图提供了相应的同义词(V$开头). V$V_$的同义词。

通过查询V$FIXED_TABLE,可以显示所有动态性能视图.

数据库不同的状态下的动态性能视图

一般情况下,我们可以通过动态性能数据掌握两类重要的数据库运行信息。

  • 了解数据库运行相关的性能数据,如内存的使用量、磁盘排序发 生的机率等等。
  • 取得与磁盘和内存结构相关的其他信息。

在通常情况下, 数据库不同的状态其动态性能视图还是有比较大的差异:

NOMOUNT

启动例程时,ORACLE会打开参数文件,分配SGA并启动后台进程。因此例程处于NOMOUNT状态时,只能访问从SGA中获取信息的动态性能视图。

SGA----V$ParaMETER     V$SGA   V$OPTION V$PROCESS
       V$SESSION        V$VERSION V$INSTANCE

MOUNT

装载数据库时,ORACLE根据初始化参数control_file 打开所有控制文件。当例程处于MOUNT状态时,不仅可以访问从SGA中获取信息的动态性能视图,还可以访问从控制文件获取信息的动态性能视图。

控制文件-------V$THREAD V$CONTROLFILE V$DATABASE
            V$DATAFILE   V$DATAFILE_HEADER   V$LOGFILE

OPEN

数据库打开时,ORACLE按照控制文件所记载的信息打开所有数据文件和重做日志。除了可以访问SGA和控制文件获取信息的动态性能视图外,还可以访问与ORACLE性能相关的动态性能视图(V$FILESTAT V$SESSION_WAIT V$WAITSTAT

注意的是,只有处于OPEN状态时,才能访问数据字典视图。

V$,V_$,GV$,X$

X$ 表

X$表包含了特定实例的各方面的信息, 是 Oracle 数据库的运行基础, 如当前的配置信息,连接到实例的会话,以及丰富而有价值的性能信息。

X$表并不是驻留在数据库文件的永久表或临时表。 X$表仅仅驻留在内存中,当实例启动时, 由 Oracle 应用程序动态创建,在内存中进行实时的维护。

它们中的大多数至少需要装载或已经打开的数据库

X$表为 SYS 用户所拥有,并且是只读的。 不能进行 DML(更新,插入,删除)。 表对数据库来说至关重要,所以 Oracle 不允许 SYSDBA 之外的用户直接访问, 显示授权不被允许。

关于 X$表,其创建信息我们也可以通过 bootstrap$表查看,该表中记录了数据库启动的基本及驱动信息。

bootstrap$ 实际上存储的是数据字典的基表的定义,如 OBJ$,C_OBJ$,TAB$等等。

Oracle 通过读取这些定义创建数据字典的基表,进而创建数据字典。

查询必须是sys用户,dba权限的用户没有权限查询

GV$V$ 同义词

V$ 视图

动态性能视图由前缀 V_$标识。这些视图的公用同义词具有前缀 V$。数据
管理员用户应该只访问 V$对象,而不是访问 V_$对象。

一旦实例启动,从内存读取数据的 V$视图就可以访问了。

注意: 每个 V$视图都包含类似语句:

where inst_id = USERENV('Instance')

用于限制返回当前实例信息。

这一点我们可以通过 V$FIXED_VIEW_DEFinitioN 视图 来验证

select view_deFinition from v_$fixed_view_deFinition where view_name='V$FIXED_TABLE';

必须使用sys用户查询

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

DBA用户即可。

sql> select count(*) from v$fixed_table where name like 'V$%'; COUNT(*)
----------
       552

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字段。

举个栗子 v$parametergv$parameter

INST_ID 列显示从其获得相关的 V$视图信息的实例号。 INST_ID 列可用
一个从可得到的实例集检索 V$信息的过滤器。

如:

sql>SELECT * FROM GV$LOCK WHERE INST_ID = 1;

表示从实例 1 上的 V$ 视图中检索信息。

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

sql>  select count(*) from v$fixed_table where name like 'GV$%'; COUNT(*)
----------
       523

sql> select count(*) from v$fixed_table where name like 'V$%'; COUNT(*)
----------
       552

查询结果看, GV$是 523个, V$是 552个,从这个结果可以证明:不是每个V$同义词都有对应的 GV$同义词。

V$FIXED_VIEW_DEFinitioN 视图

通过 V$FIXED_VIEW_DEFinitioN 视图可以获取组成 V$视图的底层
X$表的所有信息。

比如查看 V$FIXED_TABLE 视图定义

sql> select  a.VIEW_DEFinitioN from v$fixed_view_deFinition a where a.VIEW_NAME = 'V$FIXED_TABLE';

VIEW_DEFinitioN -------------------------------------------------------------
select  NAME,OBJECT_ID,TYPE,TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV('Instance')

从这里, 我们看到 V$FIXED_TABLE 基于 GV$FIXED_TABLE 创建。

查看 GV$FIXED_TABLE 定义

sql> select view_deFinition from v$fixed_view_deFinition where view_name='GV$FIXED_TABLE';

VIEW_DEFinitioN
------------------------------------------------------------
select inst_id,kqftanam,kqftaobj,'TABLE',indx from x$kqfta union all select inst_id,kqfvinam,kqfviobj,'VIEW',65537 from x$kqfvi union all select inst_id,kqfdtnam,kqfdtobj,65537 from x$kqfdt

从这里, 我们找到了 GV$FIXED_TABLE 视图的创建语句,该视图基于 X$表创建。

GV_$,V_$视图

动态性能的视图是通过 catalog.sql 创建。当 catalog.sql 运行时:

create or replace view v_$fixed_table as select * from v$fixed_table;
create or replace public synonym v$fixed_table for v_$fixed_table;
create or replace view gv_$fixed_table as select * from gv$fixed_table;
create or replace public synonym gv$fixed_table for gv_$fixed_table;

我们注意到, 先创建 V_$GV_$ 视图, 然后基于 V_$视图和 GV_$视图来创建 V$GV$同义词。

所以,实际上通常我们访问的 V$视图,其实是指向 V_$视图的同义词。
V_$视图是基于 X$表建立的。
关于这一点可以通过:v$fixed_view_deFinition 视图 来验证。

动态性能对象那么多,如何来判断某个对象到底是同义词还是视图呢? 可以通
过如下 sql 来实现:

sql> select object_type from all_objects where object_name=upper('v$datafile'); OBJECT_TYPE -------------------
SYNONYM

常用动态性能视图

维护数据库、调整数据库性能时,需要经常访问动态性能视图,以获取例程的动态信息。大多数动态性能视图只能由特权用户和DBA用户访问。

1、V$FIXED_TABLE

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

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 
Connected as cc@cc

sql> select * from v$fixed_table ;

NAME                     OBJECT_ID TYPE  TABLE_NUM
------------------------------ ---------- ----- ----------
X$KQFTA              4294950912 TABLE          0
X$KQFVI               4294950913 TABLE          1
X$KQFVT              4294951149 TABLE          2
.......

2、 V$INSTANCE

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

sql> col host_name format a20

sql> select instance_name,host_name,status from   V$instance;

INSTANCE_NAME HOST_NAME STATUS
---------------- -------------------- ------------
cc             entel2          OPEN

sql>

3、V$SGA

显示SGA主要组成部分

sql> col name  format a25;
sql> col value format a25;
sql> select  * from V$sga ;

NAME                                   VALUE
------------------------- -------------------------
Fixed Size                          2265384
Variable Size                  1258295000
Database Buffers                5251268608
Redo Buffers                    18993152

4、 V$SGAINFO

取得SGA的更详细信息

select * from v$sgainfo ;

5、 V$ParaMETER

取得初始化参数的详细信息

select a.NAME,a. VALUE,a.DESCRIPTION from v$parameter a where a.name='db_name';

6. V$VERSION

获取ORACLE版本的详细信息

sql> select * from v$version ;

BANNER ------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/sql Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0  Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

7. V$OPTION

显示已经安装的ORACLE选项

sql> select * from v$option;

ParaMETER                            VALUE
-------------------- ------------------------------
Partitioning                         TRUE
Objects                              TRUE
Real Application Clusters            FALSE
Advanced replication                 TRUE
Bit-mapped indexes                   TRUE
Connection multiplexing              TRUE
.........

8. V$SESSION

显示会话的详细信息

sql> select sid,serial#,username from V$session where username is not null;

       SID    SERIAL# USERNAME
---------- ---------- ------------------------------
         1       3293 DRMR80
         5      10127 DRMR80
         7      44691 CC
         8       8603 CC
................

如果username为NULL,则表示是后台进程会话。

9. V$PROCESS

显示与ORACLE相关的所有进程信息(包括后台进程和服务器进程)

select a.terminal,a.spid,a.pga_alloc_mem from V$process a,V$session b where a.addr=b.paddr and b.username='CC';

10. V$BGPROCESS

显示后台进程详细信息

select name,description from V$bgprocess where paddr<>'00';

11. V$DATABASE

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

sql> select name, log_mode,created from V$database;

NAME LOG_MODE CREATED
--------- ------------ -----------
CC     NOARCHIVELOG 2016-06-27

V$CONTROLFILE

取得当前数据库所有控制文件的信息。

sql> select * from v$controlfile;

oracle最重要的9个动态性能视图

v$session + v$session_wait (在10g里功能被整合,凑合算1个吧.)

v$process  --显示与ORACLE相关的所有进程信息(包括后台进程和服务器进程)


v$sql

v$sqltext

v$bh (更宁愿是x$bh)

v$lock

v$latch_children

v$sysstat

v$system_event

按组分的几组重要的性能视图

1.System 的 over view

v$sysstat,--整个系统的统计信息

v$system_event,--This view contains information on total waits for an event.每个事件的等待情况

v$parameter

2.某个session 的当前情况

v$process,v$session,v$session_wait,--This view lists the resources or events for which active sessions are waiting. 当前活动的会话正在等待的事件情况

v$session_event,--This view lists information on waits for an event by a session. 每个会话对每个事件的等待情况

v$sesstat –-每个会话的统计信息

3.sql 的情况

v$sql,v$sqlarea,v$sql_PLAN,V$sql_PLAN_STATISTICS,v$sqltext_with_newlines

4. Latch / lock /ENQUEUE(闩,锁相关)

v$latch,v$latch_children,v$latch_holder,v$lock,V$ENQUEUE_STAT,V$ENQUEUE_LOCK

5. IO 方面的

v$segstat,v$filestat,v$tempstat,v$datafile,v$tempfile

6.shared pool / Library cache

v$Librarycache,v$rowcache,x$ksmsp

7.几个advice也不错

v$db_cache_advice,v$PGA_TARGET_ADVICE,v$SHARED_POOL_ADVICE

8.等待事件:

v$system_event,v$session_event

9.块竞争:

v$waitstat-- This view lists block contention statistics.块竞争引起的等待统计

10.热块:

v$bh

Oracle 性能相关的几个视图和参数

相关文章

Java Oracle 结果集是Java语言中处理数据库查询结果的一种方...
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密...
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台...
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的...
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常...
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上...