动态性能视图
动态性能视图
一、动态性能视图介绍
动态性能视图基于从数据库内存结构构建的虚拟表,不是真正的表,所以数据取决于数据库和数据库实例的状态。
动态性能视图属于数据字典,系统管理员用户 SYS 可以访问它们。在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关。虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改。这些视图提供内部磁盘结构和内存结构方面的数据。用户可以对这些视图进行查询,以便对系统进行管理与优化。当数据库管理员启动某个例程时,数据库会自动建立动态性能视图;当停止某个例程时,数据库又会自动删除这些动态性能视图。
我们能在动态视图中掌握:
- 数据库运行相关的性能数据,如内存的使用量、磁盘排序发生的机率等等。
- 取得与磁盘和内存结构相关的其他信息。
二、状态转换时的动态性能视图
- 数据库处于“NOMOUNT”状态。数据库启动例程时,Oracle 数据库会打开参数文件,分配 SGA 内存并启动后台进程。此时,其实数据库还没有挂栽。此时,动态性呢视图收集的信息来源只有是 SGA,而不会从控制文件中收集相关的信息。所以,动态性能视图的数量要少得多。
- 当数据库处于 MOUNT 状态时,数据库会根据初始化参数打开所有的控制文件。所以,当例程处于 Mount 状态时,动态性能视图其收集到的信息就要第一个状态多的多。因为此时,动态性能视图还会去收集控制文件的相关信息。不过,此时动态性能视图所收集到的资料还不是最全的。
- 当用户打开数据库时,Oracle 系统会根据控制文件所记载的信息去打开所有的数据库文件以及重做日志。此时,数据库管理员除了可以从 SGA 和控制文件中获取信息的动态性能视图外,还可能访问与 Oracle 数据库性能相关的动态性能视图,如会话等待时间等视图。另外需要注意一点,就是只有在这个状态时,我们才能够访问数据库的数据字典视图。
查看数据库实例状态:
select status from v$instance;
三、V, V_, GV,X, X , X 视图说明
3.1 V$ 视图
V:针对某个实例的视图。是 V_的同义词,V_是基于真正的视图 V,而 V 视图是在 GV 的基础上限制 inst_id 得到;
动态性能视图由前缀 V_标识。这些视图的公用同义词具有前缀 V。数据库管理员或用户应该只访问 V 对象,而不是访问 V_对象。动态性能视图由企业管理器和 Oracle Trace 使用,Oracle Trace 是访问系统性能信息的主要界面。一旦实例启动,从内存读取数据的 V$ 视图就可以访问。
-- 查询V$视图
select count(*) from v$fixed_table where name like 'V$%';
3.2 GV$ 视图
从 Oracle8 开始,GV 视图开始被引入, GV(Global V,全局 V)。除了一些特例以外,每个 V 视图都有一个对应的 GV 视图存在。在并行服务器环境下,可查询 GV 视图从所有限定实例中检索 V 视图的信息。V 视图和 GV 视图是相同的,V 比 GV 只是少了 INST_ID 字段。INST_ID 列显示从其获得相关的 V 视图信息的实例号。INST_ID 列可用作一个从可得到的实例集检索 V 信息的过滤器。
-- 查询GV$视图
select count(*) from v$fixed_table where name like 'GV$%';
3.3 X$ 表
X 表包含了特定实例的各方面的信息,是 Oracle 数据库的运行基础,如当前的配置信息,连接到实例的会话,以及丰富而有价值的性能信息。 X 表并不是驻留在数据库文件的永久表或临时表。X 表仅仅驻留在内存中,当实例启动时,由 Oracle 应用程序动态创建,在内存中进行实时的维护。 它们中的大多数至少需要装载或已经打开的数据库。X 表为 SYS 用户所拥有,并且是只读的。 不能进行 DML(更新,插入,删除)。X$ 表对数据库来说至关重要,所以 Oracle 不允许 SYSDBA 之外的用户直接访问,显示授权不被允许。
-- 查询X$表
select count(*) from v$fixed_table where name like 'X$%';
四、常用的动态性能视图
和 session 相关的主要视图 vsession−>vsession->vsession− > vsession_wait
vsession 视图记录了当前连接 Session 的信息,这些信息包括用户名、连接主机、Session 正在执行的 SQL 的 SQL_ADDRESS、SQL_HASH_VALUE 等,非常详尽。vsession_wait 则记录了当前连接 session 正在等待的资源信息。在 Oracle 10g 中,Oracle 将 vsession_wait 视图的内容合并入 vsession 视图,使得对于当前 session 信息的获取更加简便。
通过这两个视图,可以快速得到当前连接 session 的状态,如果数据库正在经历诸如等待、竞争、锁定等问题,通过这两个视图就可以找到性能问题的原因,以及正在导致这些问题的 session。
和 Session 级统计信息相关的视图有 vsesstat -> vsysstat
vsesstat 视图记录了 session 的统计信息,这些统计信息包括诸如 session 的逻辑数据读取、物理数据读取、排序操作等。vsesstat 收集的信息同时会累积进入 vsysstat 视图,vsysstat 视图记录的是整个数据库系统的统计信息。
通过 vsesstat 可以对当前连接运行的 session 信息进行获取和分析;通过 vsysstat 则可以对数据库启动以来的运行状况获得整体印象。
和等待事件相关的主要视图 vsession_event->vsystem_event
vsession_event 记录了当前连接 session 的等待事件,这些信息最终被累积进入 vsystem_event 视图,v$system_event 记录的是整个数据库系统自数据库启动以来的等待信息汇总。通过这两个视图,可以了解到数据库的等待消耗在哪些事件上,从而可以进一步的诊断其具体问题。
这里需要对 vsession_wait 和 vsession_event 视图进行一点区别和说明。v$session_event 视图记录当前连接 session 的等待事件信息,这些等待事件是 session 生命周期内的各种等待事件的累计,比如查询当前 session 的累积等待:
SELECT * FROM v$session_event where sid = (SELECT sid FROM v$mystat where rownum <2)
该视图记录不同等待事件的等待时间、等待次数等信息。而 vsession_wait 记录的是活动 session 当前正在等待的资源信息,是实时信息的记录,vsession_wait 的实时等待结束之后才能被记入 v$session_event。
其他:
v$datafile:数据库使用的数据文件信息
v$librarycache:共享池中 SQL 语句的管理信息
v$lock:通过访问数据库会话,设置对象锁的所有信息
v$log:从控制文件中提取有关重做日志组的信息
v$logfile 有关实例重置日志组文件名及其位置的信息
v$parameter:初始化参数文件中所有项的值
v$process:当前进程的信息
v$rollname:回滚段信息
v$rollstat:联机回滚段统计信息
v$rowcache:内存中数据字典活动/性能信息
v$session:有关会话的信息
vsesstat:在 vsession 中报告当前会话的统计信息
v$sqlarea:共享池中使用当前光标的统计信息,光标是一块内存区域,有 Oracle 处理 SQL 语句时打开。
vstatname:在 vsesstat 中报告各个统计的含义
v$sysstat:基于当前操作会话进行的系统统计
v$waitstat:出现一个以上会话访问数据库的数据时的详细情况。当有一个以上的会话访问同一信息时,可出现等待情况。