X$ 视图

X$数据结构是Oracle数据库管理系统(DBMS)的核心。在数据库管理系统的内核中,他们是处于不断变化中的内存结构,保存着实例(Instance)运行期间的各种统计信息。所以,如果你的实例已经运行了好几个月,某些统计值可能会因为太大而循环计数了,这些值一般可以忽略掉。X$视图的内容一般只存在于内存中,你不可能将他们导出到其他得数据库中,因为他们在数据字典中没有相关信息。他们也不像普通的表那样可以设置存储参数,但是某些固定的列上可以有索引。

X$视图的名字都是以K开头,表示内核(kernel)。初看起来,他们似乎没有规律,实际上,他们的名字是有规律可循的。X$视图的详细信息并没有相关的描述文档,而且各个版本也可能不一样。

Oracle的内核是分层结构的,相互之间保持独立,控制信息在不同层之间传递。每一层都有一组x$内存结构。下面列出了oracle内核中的层。

        KK 编译层(Comlication layer)
        KX 执行层(Execution layer)
        K2 分布式事务层(Distributed Transaction layer)
        KZ 安全层(Security layer)
        KQ 查询层(Query layer)
        KA 访问层(Access layer)
        KD 数据层(Data layer)
        KT 事务层(Transaction layer)
        KC 缓存层(Cache layer)
        KS 服务层(Service layer)
        KJ 锁管理层(Lock Management layer)
        KG一般层(Generic layer)

编译层(KK)主要负责PL/SQL对象的编译,基于数据字典统计信息的执行计划的生成。编译层的主要组件就是oracle的优化器(Optimizer)。
执行层(KX)执行上层编译好的代码,绑定SQL和PL/SQL对象,同时也负责执行对数据字典的递归SQL调用以及共享池(shared pool)中的游标(cursor)管理。

分布式事务层(K2)处理分布式事务中的两阶段提交(two-phase commits)。两阶段提交(准备和提交)是保证分布式事务的数据完整性的一种机制。

安全层(KZ)用于辅助上面的两层在编译和执行期间的权限处理,主要是管理角色和系统权限。

查询层(KQ)在数据字典缓存中缓存数据字典。在编译期间,编译层(KK)和安全层(KZ)需要从查询层读取数据。

访问层(KA)负责访问数据段(segment),并给上面的层提供数据。

数据层(KD)控制物理数据在段中的存储以及读取。还控制着用户存储表数据和索引数据的数据段的格式化。

事务层(KT)主要的组件就是回滚段(rollback segment)。控制着自由空间列表(freelists)的管理,数据块(data block)中事务列表(ITL)的分配,事务期间的行级锁定(row-level lock)已经回滚数据(undo)的生成。还负责回滚段的分配和事务一致性的管理。

缓存层(KC)管理数据缓冲区(database buffer cache)。本层和操作系统关系紧密,管理着缓冲区和共享内存。同时还负责重做(redo)的生成已经将重做日志写入到重做日志文件。

服务层(KS)为其他的层提供必要的服务。在实例和会话级应用初始化参数。控制着单个实例的闩锁latch分配和锁(lock)管理。并且维护实例级的等待时间和统计信息。

锁管理层(KJ)管理RAC环境的锁和资源。维护着全局缓冲锁(buffer lock),而不是表锁或者行级锁。

在你利用x$视图直接从SGA获取信息前,有必要澄清一些关于x$的常见的误解。

误解一:在一个负荷很重的系统中,你不应该查询x$视图。
事实:查询x$大部分时候是安全的。几乎所有的v$视图都是基于一个或多个x$视图的。如果有什么区别的话,绕过v$而直接查询x$代价更低。

误解二:你不应该经常查询x$视图,因为访问后x$的内容会被清除。
事实:只有X$KSMLRU(Kernel Serveice layer Memory-omponent Least Recently Used)会在查询后清空。其他的x$并不会在查询后清空其内容。

误解三:你不能对x$视图执行DML操作,否则将导致实例崩溃
事实:即使你试图对x$视图执行DML操作,你也不可能成功。Oracle是不会允许你这么做的。当然,通过某些手段可以清除或者重设某些x$视图,但那并不是DML操作了。

误解四:在实际生活中,你没有必要访问x$视图。因为机会所有的x$视图信息都能通过查询v$视图获得。
事实:v$视图只暴露了x$视图的一部分信息。对于一些高级的统计信息和内部信息,你仍然需要通过x$获取。例如,共享池内存块(chunks)的大小和块的接触点计数(touch count)都只能通过x$视图获得。

误解五:只有sys用户能访问x$视图。所以,为了获得x$视图的信息,必须以sys身份登陆数据库
事实:这并不完全正确。你可以以SYS的身份创建基于x$的视图,然后将对创建的视图的select权限赋予其他用户,然后其他非DBA的用户就可以查询这些视图了。
 
 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11976525/viewspace-670921/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/11976525/viewspace-670921/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值