1.实例与数据库实例(instance) 运行中的数据库,即内存中的数据库。组成:SGA(system global area + background process)Show parameter instance_name;数据库 操作系统中数据库文件的集合。Show paramter db_name;两者关系:通常情况一个实例对应一个数据库多个实例对应一个数据库,例OPS(oracle parallel server) & RAC(双机)。
2.SGA是一组包含着一个oracle实例的数据和控制信息的共享内存结构。
▲SGA主要包含6类缓冲:
1, 块缓冲区(Db_buffer_cache)
2, 共享池(Shared_pool)
3, 重做日志缓冲区(Redo_log_buffer)
4, 大池(Large_pool)
5, Java池(Java_pool)
6, 流池(Streams_pool)
▲SGA参数:查看 SQL> show parameter sga;
NAME TYPE VALUE------------------------------------ ----------- ------------------------------------------------ pre_page_sga boolean FALSE(启动是否将全部sga区都绑定到物理内存,而不使用swap。)
lock_sga boolean FALSE(运行过程中是否也将全部sga区都绑定到物理内存,而不使用swap。)
sga_max_size big integer 164M (sga区总大小上限值)
sga_target big integer 160M
Sga_target启用自动共享内存管理ASMM(automatic shared memory management),分配给ASMM的内存主要包括db_cache_size/db_buffer_cache、shared_pool、large_pool_size、java_pool_size。该四项和应小于sga_max_size,并尽量接近。
sga内存按颗粒大小granule_size分配内存,若手工分配非整数,则自动凑为整数倍。
SQL> select name,bytes from v$sgainfo where name='Granule Size';
NAME BYTES-------------------------------- ----------
Granule Size 4194304
Sga 1G ,8M for win,16M for other
SQL>select current_size from v$buffer_pool;查看db_cache_size当前实际大小(单位M)
CURRENT_SIZE
------------
92
SQL> select pool,sum(bytes) from v$sgastat group by pool;(查看shared_pool,large_pool,java_pool当前实际大小)
POOL SUM(BYTES)
------------ ----------
104855308
java pool 4194304
shared pool 58725572
large pool 8388608
v$sgastat :这个视图比较重要。它记录了关于sga的统计信息。包含三个字段:Name(SGA内存区的名字);Bytes(内存区的大小,单位为字节);Pool(这段内存所属的内存池)。这个视图尤其重要的是,它详细记录了个各个池(Pool)内存分配情况。
修改: alter system set sga_target=158M scope=both;
▲ SQL> show sga;
Total System Global Area 171966464
bytesFixed Size 1218364
bytesVariable Size 62916804
bytesDatabase Buffers 100663296
bytesRedo Buffers 7168000
bytesfixes size : oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了 SGA 各部分组件的信息,Oracle通过它找到SGA中的其他区,可以简单理解为用于管理的一段内存区。Variable Size : 包括 shared_pool ,large_pool,,java_pool 管理DB_BLOCK_BUFFERS 的内存,管理控制文件信息的内存,等等其他管理和控制 oracle 内部结构的内存。
3. db_buffer_cache查询时,会先把从磁盘读取的数据放入内存,以后再查询相关数据时不用再次读取磁盘而先到db_buffer_cache中来寻找。插入和更新时,会现在该区中缓存数据,之后批量写到硬盘中。通过块缓冲区,可以通过内存缓存提高磁盘的I/O性能。Db_buffer_cache缓冲区中有三个区域:
默认池(Default pool):所有数据默认都在这里缓存。
保持池(Keep pool):用来缓存需要多次重用的数据。(该缓存不参与ASMM,先进先出的方式从MRU移动到LRU端,无空闲缓冲,LRU端最久未使用数据被调出缓存)
回收池(Recycle pool):用来缓存很少重用的数据。(该缓存不参与ASMM,recycle_pool满后,读取的数据不被缓存,以节省开销)
原来只有一个默认池,所有数据都在这里缓存。这样会产生一个问题:大量很少重用的数据会把需重用的数据“挤出”缓冲区,造成磁盘I/O增加,运行速度下降。后来分出了保持池和回收池根据是否经常重用来分别缓存数据。
这三部分内存区需要手动确定大小,并且之间没有共享。例如:保持池中已经满了,而回收池中还有大量空闲内存,这时回收池的内存不会分配给保持池。
9i开始,还可以设置db_nk_cache。9i之前数据库只能使用相同的块大小。9i开始同一个数据库可以使用多种块大小(2KB,4KB,8KB,16KB,32KB),这些块需要在各自的db_nk_cache中缓存。如果为不同的表空间指定了不同的块大小,需要为其设置各自的缓冲区。
两个不同的列表管理待写列表(write list):包含已被修改,但尚未写入disk的脏缓存块。最近最少使用列表(least recently userd/LRU list):包含空闲缓存块,命中缓存块,及还未移入write list的脏缓存块。Default pool工作方式:当oracle进程访问一块缓冲区后,会将该缓冲区移动到LRU列表的MRU(most recently userd最近用的即热端),随着更多被访问的缓冲区移动到LRU列表的热端,较早前被访问过的缓冲区就向LRU列表的LRU(least recently used冷端)移动。当user process 执行FTS(full table scan全表扫描)时,数据首次将会从disk被读入缓冲区,之后将该缓冲区移动到LRU列表的LRU端而非MRU端),以使这些通常暂时需要的全表扫描数据所占的缓冲区能被尽快地移出数据缓冲区,为其他使用频繁更高的数据块腾出空间。
SQL> select component,current_size from v$sga_dynamic_components;
如何指定对象使用keep缓存池
Create table aaa(n number) storage (buffer_pool keep);Alter table bbb storage (buffer_pool keep);
4. Shared pool共享池是SGA中最重要的内存段之一。共享池太大和太小都会严重影响服务器性能。主要包括library cache(sql语句缓冲)和data dictionary cache
library cache :SQL和PL/SQL代码在执行前会进行“硬解析”来获得执行计划及权限验证等相关辅助操作。“硬解析”很费时间。对于响应时间很短的查询,“硬解析”可以占到全部时间的2/3。对于响应时间较长的统计等操作,“硬解析”所占用的时间比例会下降很多。执行计划及所需的数据字典数据都缓存在共享池中,让后续相同的查询可以减少很多时间。
SQL>select sum(sharable_mem) from v$db_object_cache; 查看library cache大小
data dictionary cache :专供数据字典使用的缓冲区,sql语句分析过程中需要大量访问系统数据字典。数据字典是用于描述所有数据库对象的数据库对象的集合。
select * from dict;查看数据字典
SQL> select sum(sharable_mem) from v$sqlarea;
查看data dictionary cache大小 Set autot on stat 统计信息动态表(以v$为首):不断动态更新以反映数据库当前运行状况。
5. Redo_log_buffer对数据库的任何修改都按顺序被记录在该缓冲区中,然后由lgwr进程根据条件更改信息批量写入disk的redolog文件,以节省disk I/O,该缓存不参加ASMM的动态管理,不能自动调整大小。
6. Large_poolLarge_pool用来分配大内存块,来处理比shared_pool更大的内存,实际常用做备用池,用以缓解oarcle对共享池和PGA区内存的使用压力下面三种情况使用到large_pool:
并行执行:存放进程间的消息缓冲区
RMAN:某些情况下用于磁盘I/O缓冲区
共享服务器模式:共享服务器模式下UGA在大池中分配(如果设置了大池)
7. Java_pool在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存.
8. Streams_buffer用于对流复制缓冲
分享到:
相关推荐
Oracle 10g的内存结构是数据库管理系统的关键组成部分,它决定了数据库的性能和稳定性。SGA(System Global Area)是Oracle数据库中一个重要的共享内存区域,用于存储数据库运行时的各种数据和控制信息。 1. SGA...
2. **内存结构**:Oracle11g的内存结构主要由两部分组成——系统全局区(SGA)和程序全局区(PGA)。SGA是被多个用户进程共享的内存区域,包含数据缓冲区缓存、共享池、大池、Java池和流池等;PGA是为每个会话分配的...
Oracle 10g 体系结构是理解其高效运行和管理的关键。Oracle数据库是企业级的关系型数据库管理系统,广泛应用于各种规模的企业中。本课重点介绍了Oracle 10g的架构,旨在帮助数据库管理员(DBA)更好地管理和维护...
Oracle 11g的内存结构主要分为两大部分:系统全局区(SGA)和个人全局区(PGA)。 1. **系统全局区(SGA)**: - SGA是被多个用户进程共享的一块内存区域,主要包括以下几个部分: - **Java池**:用于存储Java...
2. **数据库实例与物理结构**:Oracle10g中的数据库实例是由内存结构(如数据缓冲区高速缓存、重做日志缓冲区、共享池)和后台进程组成,而物理结构则涉及表空间、段、区和块的层次结构。 3. **SQL优化**:Oracle10...
Oracle 10g数据库体系结构是理解其工作原理和高效管理的关键。Oracle 10g是Oracle数据库的一个版本,特别适用于数据库管理员(DBA)进行管理和维护。本课内容主要涵盖Oracle 10g的内存结构、进程结构以及存储结构。 ...
Oracle 10G是Oracle数据库的一个重要版本,其体系结构包含了许多关键组件和服务,这些组件共同构成了一个高效、可靠的数据库管理系统。以下是对Oracle 10G体系结构的详细解析: 一、数据库实例 Oracle数据库实例是...
Oracle 10g是一款经典的关系型数据库管理系统,尤其在企业级应用中有着广泛的应用。本文将详细介绍在Windows操作系统下如何安装Oracle 10g。在安装过程中,我们需要了解一些关键概念和技术,包括数据库架构、安装...
Oracle 10g数据库体系结构是理解其高效运行和管理的关键。DBA(数据库管理员)在这一领域扮演着至关重要的角色,他们负责整个数据库系统的管理、监控和维护。Oracle 10g的体系结构主要由内存结构、进程结构和存储...
Oracle 10g 是一款广泛使用的数据库管理系统,其体系结构对于理解数据库的运作方式至关重要。DBA(数据库管理员)在管理Oracle数据库时,必须对这一结构有深入的理解。Oracle 10g 的体系结构主要由内存结构、进程...
在Oracle 10G RAC中,每个节点都有自己的内存结构(SGA)和磁盘空间,但它们共享同一个物理数据库。当一个节点发生故障时,其他节点可以接管其工作,确保服务不间断。这种架构对于那些不能容忍停机时间的业务来说...
2. 数据库架构:Oracle 10g的物理和逻辑结构包括数据文件、控制文件、重做日志文件、系统表空间、用户表空间等。理解这些组件的作用对于管理数据库至关重要。 3. 表空间与数据文件:表空间是存储数据库对象的逻辑...
【Oracle10G体系结构】是Oracle数据库在2003年发布的一个重要版本,它引入了许多创新技术和改进,以提升数据库性能、可用性和可管理性。本篇将基于【Oracle10G体系结构】这一主题,深入探讨其核心概念、组件及工作...
Oracle 10g 是一款功能强大的关系型数据库管理系统,其体系结构是理解其高效运作的关键。Oracle 10g 的体系结构主要由内存结构、进程结构和存储结构三大组件构成。 1. **内存结构**: - **System Global Area (SGA...
Oracle10G是Oracle数据库系统的一个重要版本,它在2003年发布,提供了许多增强功能和性能优化,使得数据库管理更为高效。本培训日志主要围绕Oracle10G的相关知识展开,旨在帮助学习者深入理解Oracle数据库的运行机制...
《Sybex OCA Oracle 10g Administration》是一本专为准备Oracle 10g认证管理员考试(1Z0-042)的读者设计的详细指南。这本书全面覆盖了Oracle数据库10g版本的管理和维护知识,是IT专业人员提升技能、备考OCA认证的...
首先,我们从"第01章 Oracle 10g体系结构.ppt"开始,这一章节会详细介绍Oracle 10g的整体架构,包括进程结构、内存结构以及磁盘存储结构。Oracle数据库由多个后台进程和用户进程协同工作,如DBWR(数据库写入进程)...
Oracle 10g OCP(Oracle Certified Professional)是Oracle公司为数据库管理员提供的专业认证,它证明了持证者对Oracle 10g数据库管理的深入理解和实践经验。这个认证包括了一系列的理论考试和实践测试,旨在确保...