oracle sga是什么-编程知识网

本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。

内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构:

oracle sga是什么-编程知识网

下面给大家介绍一些内存结构中的sga

oracle sga简介

sga全称“System Global Area”,中文意思为“系统全局区”,是ORACLE为实例分配的一组共享缓冲存储区,主要用于存放数据库数据和控制信息,该信息为数据库进程所共享(PGA不能共享的),以实现对数据库数据的管理和操作。

它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

SGA是一组共享内存结构, 被所有的服务和后台进程所共享。当数据库实例启动时,系统全局区内存被自动分配。当数据库实例关闭时,SGA内存被回收。 SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。

查询SGA区的情况:

SQL> show SGA

Total System Global Area 3290345472 bytes
Fixed Size            2217832 bytes
Variable Size         1795164312 bytes
Database Buffers     1476395008 bytes
Redo Buffers           16568320 bytes
SQL> select * from v$sga;

NAME              VALUE
-------------------- ----------
Fixed Size        2217832
Variable Size         1795164312
Database Buffers     1476395008
Redo Buffers           16568320

登录后复制

  • Fixed Size表示固定区域,存储SGA各个组件的信息。不能修改大小。

  • Variable Size表示可变区域,比如共享池、java池、大池等。

  • Database Buffers表示数据库高速缓冲区。

  • Redo Buffers表示日志缓冲区。

SGA主要包括:

系统全局域SGA主要由三部分构成:共享池、数据缓冲区、日志缓冲区。

1、共享池(shared pool) :用来存储最近执行的SQL语句和最近使用的数据字典的数据。

它主要由两个内存结构构成:Library cache和Data dictionary cache

修改共享池的大小:ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;

Library Cache缓存被执行的SQL和PL/SQL的相关信息,即存放SQL语句的文本,分析后的代码及执行计划。实现常用语句的共享,使用LRU算法进行管理,由以下两个结构构成:Shared SQL area、Shared PL/SQL area;

Data Dictionary Cache缓存被使用的数据库定义,即存放有关表、列和其它对象定义及权限。它包括关于数据库文件、表、索引、列、用户、权限以及其它数据库对象的信息。在语法分析阶段,Server Process访问数据字典中的信息以解析对象名和对存取操作进行验证。数据字典信息缓存在内存中有助于缩短响应时间。

2、数据缓冲区 (database buffer cache):用来存储最近从数据文件中读写过的数据。

在数据高速缓冲区中存放着Oracle系统使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用户访问的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:

1) 脏数据区(Dirty Buffers):包含有已经改变过并需要写回数据文件的数据块。

2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。

3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。

3、重作日志缓冲区(redo log buffer):用来记录服务或后台进程对数据库的操作。

主要用于恢复其中的每一项修改记录都被称为redo 条目。利用Redo条目的信息可以重做修改。

另外在SGA中还有两个可选的内存结构:

4、Java池(Java Pool): 用来存储Java代码。

5、大型池(Large Pool): 用来存储不与SQL直接相关的大型内存结构。备份、恢复使用。

推荐教程:《Oracle教程》

以上就是oracle sga是什么的详细内容,更多请关注风君子博客其它相关文章!