oracle内存结构:SGA的区域信息

简介: http://www.itpub.net/471913.htmlSGA的区域信息  SGA(system global area)系统全局区跟一些必须的后台进程合进来称为实例(Instance)。

http://www.itpub.net/471913.html

SGA的区域信息

  SGA(system global area)系统全局区跟一些必须的后台进程合进来称为实例(Instance)。说它是全局区是包含了全局变量和数据结构,是系统区是包含了进入整个Oracle Instance的数据结构而不是特定的进程结构。

  SGA区域:

  SGA大概包括下面四到五种区域:

  The fixed area

  The variable area

  The database blocks area

  The log buffer

  The instance lock database(for parallel server instances)——OPS&RAC

  根据内存的大小,我们可以把The fixed area和The log buffer设为很小。

  The fixed area:

  SGA中的The fixed area包含了数千个原子变量,以及如latches和指向SGA中其它区域的pointers(指针)等小的数据结构。通过对fixed table内表X$KSMFSV查询(如下)可以获得这些变量的名字,变量类型,大小和在内存中的地址。

  SQL> select ksmfsnam, ksmfstyp, ksmfssiz, ksmfsadr

  2> from x$ksmfsv;

  这些SGA变量的名字是隐藏的而且几乎完全不需要去知道。但是我们可以通过结合fixed table内表X$KSMMEM获得这些变量的值或者检查它们所指向的数据结构。

  SQL>select a.ksmmmval from x$ksmmem a where addr=(select addr from x$ksmfsv where ksmfsnam=‘kcrfal_’);

  SGA中的fixed area的每个组成部分的大小是固定的。也就是说它们是不依靠于其它的初始化参数的设置来进行调整的。fixed area中的所以组成部分的大小相加就是fixed area的大小。

  The variable area:

  SGA中的the variable area是由large pool和shared pool组成的。large pool的内存大小是动态分配的,而shared pool的内存大小即包含了动态管理的内存又包含了永久性的(已经分配的)内存。实际上,初始化参数shared_pool_size的大小设置是指定 shared pool中动态分配的那部分内存的一个大概的SIZES而不是整个shared pool的SIZES

  Shared pool中永久性的内存包含各种数据结构如:the buffer headers, processes, sessions, transaction arrays, the enqueue resources , locks, the online rollback segment arrays, various arrays for recording statistics.其中大部分的SIZE是依靠初始参数的设置来确定的。这些初始参数只能在实例被关闭的状态下才能够进行修改。所以这里说的永久性是针对实例打开状态下的生存期而言。简单的一个例子PROCESSES参数。在这个process arrays中的slots用完之后,如果有其它的process想再申请一个process则会失败,因为它们在内存中的大小是在实例启动时预分配的。不能动态修改之。

  针对很多永久性的arrays,有很多的X$表都把这些元素做一个记录而成员结构则作为字段。V$视图的数据就是从这些X$表获得。如V$ PROCESS是基于X$KSUPR内表的。V$PROCESS视图不包含X$KSUPR的全部字段。 X$KSUPR也没有覆盖SGA进程结构的所有成员。

  The variable area的在SGA中的SIZES就等于LARGE_POOL_SIZE,SHARED_POOL_SIZE和永久性的内存arrays的SIZE三者相加。 永久性的内存arrays的总的SIZE可以通过初始参数的设置来计算得到。然而,你需要知道从参数获得这些array sizes的方程式,每个array元素大小的字节数,还有array头信息的sizes.这些跟Oracle的版本号和OS有关。实际使用中,我们是不必要计算这个永久性的内存arrays的SIZE的。如果想知道,一个方法就是在STARTUP NOMOUNT数据库时记下the variable area.然后减去参数中LARGE_POOL_SIZE和SHARED_POOL_SIZE的大小就可以。

  The database block area:

  这个区域是数据库块的拷贝。在Oracle 8i中,buffer数由DB_BLOCK_BUFFERS指定。每个buffer的大小由DB_BLOCK_SIZE指定。所以这个区域的大小是两者相乘。在Oracle 9i中,这个区域的大小是DB_CACHE_SIZE指定。这个区不包含它们自己的控制结构,只包含database block copies data.每个buffer的header信息存在于SGA的the variable area中。还有latches信息也放在SGA的the variable area中。在设置DB_BLOCK_BUFFERS时每4个BUFFERS会影响the variable area的1K的SIZE.关于这一点。可以通过测试(针对8i而言)。

  The log buffer:

  这个区域的SIZE是由参数LOG_BUFFER指定的。如果OS支持内存保护,log buffer将会被两个保护页面包围起来以免被一些ORACLE的错误进程损坏log buffer.在SGA中,跟其它的如variable area和database block area相比,log buffer是非常小的。log buffer分成内部的buffer blocks,而这些block各有8个字节的头部信息存在于variable area中。

  The instance lock database

  在OPS/RAC配置中,instance locks用来控制由所有instances共享的资源以串行的方式被进入并使用。SGA中的这个区域所维护的是本地实例所要使用的数据库资源,所有实例和进程都会用到的数据库资源,还有所有实例和进程当前需要的或者已经拥有的锁(LOCKS)。这三个arrays的SIZE分别由参数LM_RESS, LM_PROCS,LM_LOCKS参数指定。(这三个参数是RAC的参数,在单实例中用SHOW PARAMETER是查看不到的)。 The instance lock database还包含了message buffers和其它的structure.但是其SIZE是非常小的。

  这个区域的SIZE是没办法在实例启动的时候看到的。这是Oracle Internals.可以用ORADEBUG工具查看。SQL>ORADEBUG IPC.至于ORADEBUG工具就不做介绍。用这个工具做操作时需要经过Oracle Support同意。

  可以用以下的两种方式DUMP SGA:

  SQL>ALTER SESSION SET EVENTS 'immediate trace name global_area level 2';

  或者SQL>ORADEBUG DUMP GLOBAL_AREA 2


racle内存结构:SGA的区域信息
目录
相关文章
|
8月前
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
784 55
|
9月前
|
Arthas 监控 Java
Arthas memory(查看 JVM 内存信息)
Arthas memory(查看 JVM 内存信息)
780 6
|
9月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
10月前
|
SQL 存储 缓存
【赵渝强老师】达梦数据库的内存结构
本文介绍了达梦数据库管理系统的内存结构,包括内存池、缓冲区、排序区和哈希区。内存池分为共享内存池和运行时内存池,能够提高内存申请与释放效率,并便于监控内存使用情况。缓冲区涵盖数据缓冲区、日志缓冲区、字典缓冲区和SQL缓冲区,用于优化数据读写和查询性能。排序区和哈希区分别提供排序和哈希连接所需的内存空间,通过合理配置参数可提升系统效率。文内附有具体配置示例及视频讲解,帮助用户深入理解达梦数据库的内存管理机制。
364 0
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
174 3
|
存储 算法 Java
聊聊jvm的内存结构, 以及各种结构的作用
【10月更文挑战第27天】JVM(Java虚拟机)的内存结构主要包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和运行时常量池。各部分协同工作,为Java程序提供高效稳定的内存管理和运行环境,确保程序的正常执行、数据存储和资源利用。
402 10
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
4973 2
|
运维 JavaScript Linux
容器内的Nodejs应用如何获取宿主机的基础信息-系统、内存、cpu、启动时间,以及一个df -h的坑
本文介绍了如何在Docker容器内的Node.js应用中获取宿主机的基础信息,包括系统信息、内存使用情况、磁盘空间和启动时间等。核心思路是将宿主机的根目录挂载到容器,但需注意权限和安全问题。文章还提到了使用`df -P`替代`df -h`以获得一致性输出,避免解析错误。
611 1
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
1030 5
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的物理存储结构
Oracle的物理存储结构包括数据文件、联机重做日志文件、控制文件、归档日志文件、参数文件、告警日志文件、跟踪文件和备份文件。这些文件在硬盘上存储数据库的各种数据和日志信息,确保数据库的正常运行和故障恢复。视频讲解和详细说明见原文。
231 0

推荐镜像

更多