本教程操作环境:windows7系统、oracle 11g版、dell g3电脑。
内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素oracle数据库中包括3个基本的内存结构:
下面给大家介绍一些内存结构中的sga。
oracle sga简介
sga全称“system global area”,中文意思为“系统全局区”,是oracle为实例分配的一组共享缓冲存储区,主要用于存放数据库数据和控制信息,该信息为数据库进程所共享(pga不能共享的),以实现对数据库数据的管理和操作。
它包含oracle 服务器的数据和控制信息,它是在oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。
sga是一组共享内存结构, 被所有的服务和后台进程所共享。当数据库实例启动时,系统全局区内存被自动分配。当数据库实例关闭时,sga内存被回收。 sga是占用内存最大的一个区域,同时也是影响数据库性能的重要因素。
查询sga区的情况:
sql> show sgatotal system global area 3290345472 bytesfixed size 2217832 bytesvariable size 1795164312 bytesdatabase buffers 1476395008 bytesredo buffers 16568320 bytessql> select * from v$sga;name value-------------------- ----------fixed size 2217832variable size 1795164312database buffers 1476395008redo 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是什么的详细内容。
