当前位置: 移动技术网 > IT编程>开发语言>Java > 荐 Oracle内存结构

荐 Oracle内存结构

2020年07月14日  | 移动技术网IT编程  | 我要评论

内存结构

  • Oracle内存结构由以下两个内存区组成:

    系统全局区 (SGA): 在实例启动时分配,它是Oracle实例最基本的组件之一。
    程序全局区(PGA): 当服务进程启动时分配。

系统全局区(SGA)

  • SGA由若干个内存结构组成:

    固定区域(fixed size):存储SGA中各种组件的信息,大小不能修改。
    可变区域(variable size):包括共享池(sharedpool)、大池(large pool)、Java池(Java pool)、 流池(stream Pool)等。
    数据库高速缓冲区(database buffer cache)
    重做日志缓冲区(redo log buffer)

--查看SGA的内存分配情况
	SHOW SGA
--或者
	SELECT * FROM v$sga;
  • 从Oracle 9i开始,SGA为动态的,其大小由SGA_MAX_SIZE 参数指定。
  • Oracle是利用区组(granules)来管理SGA的。区组是一片连续的虚拟内存区,是Oracle分配和
    回收内存区的基本单位。
  • 区组的大小取决于所估计的 SGA的大小(即SGA_MAX_SIZE参数)。
--查看SGA_MAX_SIZE的值
	SHOW PARAMETER SGA_MAX_SIZE
	
--查看当前SGA总的内存大小
	SELECT SUM(value)/1024/1024 "Total SGA MB" FROM v$sga;

共享池(Shared Pool)

  • 共享池用来存储:刚刚执行过的 SQL 语句(statements)、刚刚使用过的数据定义(data definitions)
  • 由两个关键的与性能相关的内存结构组成:库高速缓存(Library Cache)、数据字典高速缓存(Data Dictionary Cache)
  • 共享池的大小是由参数 SHARED_POOL_SIZE指定。
--修改共享池的大小
	 ALTER SYSTEM SET SHARED_POOL_SIZE = 250M;

库高速缓存

  • 库高速缓存包含共享SQL 区和共享PL/SQL 区两部分
  • 库高速缓存的用途:
    存储有关最近使用过的SQL和PL/SQL语句
    使通用语句的共享成为可能
    在Oracle 11g中,库高速缓冲区还可以包括SQL或PL/SQL的执行结果
  • 库高速缓存使用LRU (最近最少使用) 的队列或算法进行管理。
  • 只能通过设置共享池的大小来间接设置库高速缓存的大小。

数据字典高速缓存

  • 数据字典高速缓存的用途:
    存储数据库中最近刚刚使用过的数据文件、表、索引、列、用户和其他的数据对象的定义和权限等信息
    在编译阶段,服务器进程要查看数据字典的这些信息,以完成对象名字解析和访问权限的校验工作
    将数据字典信息装入内存可改进查询语句和DML语句的响应时间

  • 其大小通过设置共享池的大小来间接设置。

  • 工作原理:
    当用户发出SQL语句时,服务器进程将首先在数据库高速缓冲区中搜寻所需的数据,如果找到就直接使用而不进行磁盘操作;如果没有找到就将进行磁盘操作,把数据文件中的数据读入数据库高速缓冲区中。
    使用LRU(最近最少使用)的队列或算法对数据库高速缓冲区进行管理

  • 有关参数设置:
    DB_BLOCK_SIZE:设置Oracle数据块(内存缓冲区)的大小。该参数的值是在创建数据库时设定的,如果要改变此参数的值一般需要重建数据库。
    DB_BLOCK_BUFFERS:设置内存缓冲区的个数。该参数的值修改后必须重新启动数据库。

  • 数据库高速缓冲区大小 = DB_BLOCK_SIEZ * DB_BLOCK_BUFFERS

  • DB_CACHE_SIZE
    在Oracle 9i或以后的版本中引入的
    该参数是一个动态参数,可以在数据库运行时动态地修改其值。

--改变数据库高速缓冲区的大小。
	 ALTER SYSTEM SET DB_CACHE_SIZE = 250M;
  • 内存缓冲区顾问(v$db_cache_advice)
    它是Oracle 9i或以后的版本中提供的一个工具,用于获得调整数据库高速缓冲区的统计信息。
    内存缓冲区顾问共有三种状态:ON、READY和OFF。
    通过修改初始化参数DB_CACHE_ADVICE的值,可改变该工具的状态。
--查看内存缓冲区顾问的状态。
	SELECT id, name, block_size, advice_status FROM v$db_cache_advice;

--关闭内存缓冲区顾问工具。
	ALTER SYSTEM SET DB_CACHE_ADVICE = OFF;

重做日志缓冲区

  • 重做日志缓冲区的用途:
    引入该缓冲区的主要目的是数据恢复(在Oracle 8i之前也是唯一的用途)
    在该缓冲区记录了数据库中数据块的所有变化,包含了重新构造或重做变化所需的信息,这些信息称为重做日志记录(redo entries)。

  • 其大小由 参数LOG_BUFFER 所决定。

大池(Large pool)

  • 它是一个可选的内存结构。
  • 它可以减轻Shared Pool的负担,提高效率。
  • 在以下情况下使用:
    在多线程(MTS)或共享服务器(Shared Server)连接时,存储内存的会话信息(UGA)
    在大规模I/O及备份和恢复操作时可能使用该区
  • 其大小可通过动态参数LARGE_POOL_SIZE进行设置。

Java池(Java Pool)

  • 它是一个可选的内存结构。
  • 引入它的目的是能够编译 Java语言的命令。
  • 如果要使用Java语言就必须设置它。
  • 其大小可通过动态参数JAVA_POOL_SIZE进行设置。

程序全局区(PGA)

  • 它是一个私有的内存区,不能共享,且只属于一个服务器进程。
  • 生命周期:
    随着服务器进程的创建而被分配
    随着服务器进程的终止而被回收
  • PGA主要包括以下结构:
    排序区(sort area):用于处理SQL语句所需的排序。Cursor状态区(cursor state):用于指示会话当前所使用的SQL语句的处理状态。
    会话信息区(session information):包括会话的用户权限和优化统计信息。
    堆栈区(stack space):包括其他的会话变量。

进程结构

  • User process(用户进程): 在一个数据库用户请求与Oracle服务器连接时启动。
  • Server process (服务器进程) : 与Oracleinstance(实例)相连,当一用户创建一会话时启动。
  • Background processes(后台进程): 当 Oracle实例启动时启动。

后台进程

  • 后台进程用来维护和保证物理(外存)结构和内存结构之间的关系。
  • 5个必需的后台进程:数据库写进程 (DBWn)、重做日志写进程 (LGWR)、系统监督进程 (SMON)、进程监督进程 (PMON)、检查点进程(CKPT)
    注意:这5个后台进程中任何一个未能启动,则实例都将自动关闭。
--查看后台进程的基本信息。
	select spid, pid, username, program, pname,background 
	from v$process 
	where background = '1';

数据库写进程(DBWn)

  • DBWn负责将高速数据缓冲区中的“脏”数据块写到数据文件中。
  • DBWn并不是随时将所有的“脏”数据块都写入数据文件,只有满足一定的条件,才开始批量地“脏”数据块写入数据文件,以达到尽量减少I/O操作,提高服务器性能的目的。
  • 当以下情况发生时DBWn写 :
    当脏缓冲区的数量超过了所设定的限额时
    当所设定的时间间隔已到时
    当有进程需要数据库高速缓冲区却找不到空闲的缓冲区时
    当检验(检查)点发生时
    当某个表被删除(drop)或截断(truncate)时
    当某个表空间被设为只读状态(read only)时
    当对某个表空间进行联机备份时
    当某个表空间被设为脱机状态(offline)或正常状态(normal)时

重做日志写进程(LGWR)

  • LGWR负责将重做日志缓冲区的记录顺序地写到重做日志文件中。
  • Oracle系统首先将用户所做的修改日志信息写入日志文件,然后再将修改结果写入数据文件。
  • 以下情况发生时LGWR写 :
    当某个事务被提交时
    当重做日志缓冲区中所存的记录已超过缓冲区容量的1/3时在DBWR将数据库高速缓冲区中修改过的数据块写到数据文件之前(如果需要)
    每3秒钟

系统监督进程(SMON)

  • 系统监督进程(SMON)负责:
    实例恢复(实例恢复、打开数据库允许用户访问、回滚没有提交的事务)
    回收或合并空闲磁盘空间
    释放临时段

进程监督进程(PMON)

  • 负责进程崩溃后的清理工作:
    回滚用户当前的事务
    释放用户所加的所有表一级和行一级锁
    释放用户所有的其他资源

检查点进程(CKPT)

  • 检查点进程负责:
    在检查点时调用DBWn
    用检查点信息修改数据文件头
    用检查点信息修改控制文件

归档日志进程(ARCn)

  • ARCn是一个重要的可选后台进程。
  • 当数据库设置为归档(ARCHIVELOG)模式时,ARCn自动执行归档操作,即将联机重做日志文件 复制到归档日志文件中。
  • 归档日志文件保留了对数据库所做的所有变化的记录。

本文地址:https://blog.csdn.net/JaneWay_Chen/article/details/107329157

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网