Oracle-内存管理解读-更新中

前端之家收集整理的这篇文章主要介绍了Oracle-内存管理解读-更新中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

关于内存的配置,是最影响 Oracle性能的配置。内存还直接影响到其他两个重要资源的消耗: cpu 和 IO.

那Oracle 内存存储的主要内容是什么呢?

  • 程序代码( PLsql、 Java);
  • 关于已经连接的会话的信息,包括当前所有活动和非活动会话;
  • 程序运行时必须的相关信息,例如查询计划;
  • Oracle 进程之间共享的信息和相互交流的信息,例如锁;
  • 那些被永久存储在外围存储介质上,被 cache 在内存中的数据( 如 redo log 条目,数据块)。

每个 Oracle 数据库都是由 Oracle Instance(实例)与数据库(数据文件,控制文件、重做日志文件)组成,其中所谓实例就是用户数据库交互的媒介,用户通过于一个实例相连来操作数据库

而实例又是由统一的内存结构( SGA,PGA, UGA)和一批内存驻留进程组成。

实例在操作系统中用 ORACLE_SID 来标识,在 Oracle 中用参数 INSTANCE_NAME 来标识, 它们两个的值是相同的。

数据库启动时,系统首先在服务器内存中分配系统全局区( SGA), 构成了 Oracle的内存结构,然后启动若干个常驻内存的操作系统进程,即组成了 Oracle 的 进程结构,内存区域和后台进程合称为一个 Oracle 实例。


SGA (System Gloable Area)

架构图

SGA概述

SGA 是一组为系统分配的共享的内存结构,可以包含一个数据库实例的数据或控制信息。

如果多个用户连接到同一个数据库实例,在实例的 SGA 中,数据可以被多个用户共享。

数据库实例启动时, SGA 的内存被自动分配;当数据库实例关闭时, SGA 内存被回收。

SGA 是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。

SGA 区是可读写的。所有登录到实例的用户都能读取 SGA 中的信息,而在oracle 做执行操作时,服务进程会将修改的信息写入 SGA 区。

SGA 主要包括了以下的数据结构:

  • 数据缓冲( Buffer Cache)
  • 重做日志缓冲( Redo Log Buffer)
  • 共享池( Shared Pool)
  • Java 池( Java Pool)
  • 大池( Large Pool)
  • 流池( Streams Pool — 10g 以后才有)
  • 数据字典缓存( Data Dictionary Cache)
  • 其他信息(如数据库和实例的状态信息)

SGA 中的数据字典缓存其他信息 会被实例的后台进程所访问,它们在实例启动后就固定在 SGA 中了,而且不会改变,所以这部分又称为固定 SGA( Fixed SGA)。这部分区域的大小一般小于 100K。

Shared Pool、 Java Pool、 Large Pool 和 Streams Pool 这几块内存区的大小是相应系统参数设置而改变的,所以有通称为可变 SGA( Variable SGA)。


查看SGA信息

使用有DBA权限的用户

sql> show parameter sga

NAME                                 TYPE        VALUE
------------------- ----------- --------------------------
lock_sga                             boolean     FALSE
pre_page_sga                         boolean     FALSE
sga_max_size                         big integer 6256M
sga_target                           big integer 0

PGA(Program Global Area)

原文链接:https://www.f2er.com/oracle/211853.html

猜你在找的Oracle相关文章