`

认识Oracle数据库System Global Area (SGA)

阅读更多

1 概述

Oracle SGA区的监控和管理,是数据库日常维护的重要内容。本文详细介绍SGA的基本概念,SGA运行情况检查,以及SGA的参数设置原则,希望对大家的有所帮助。

2 SGA的基本概念

当启动Oracle数据库时,系统会先在内存内规划一个固定区域,用来储存用户需要的数据,以及Oracle运行时必备的系统信息。我们称此区域为系统全局区(System Global Area),简称SGA。

SGA 包含数个重要区域,分别是:

■ Database Buffer Cache (数据库缓冲区)

■ Redo Log Buffer (重做日志缓冲区)

■ Shared Pool (共享区)

■ 其它,如Java pool, Large pool

2.1 Database Buffer Cache (数据库缓冲区)

数据库缓冲区的作用主要是在内存中缓存从数据库中读取的数据块。数据库缓冲区越大,为用户已经在内存里的共享数据提供的内存就越大,这样可以减少所需要的磁盘物理读。

在9i以前数据库缓冲区的大小是由db_block_buffers*db_block_size 来决定大小的。db_block_size参数是在创建数据库时设置的,OLTP系统的db_block_size一般设置为8k。

在9i中,数据库缓冲区的大小由db_cache_size决定,8i中的db_block_buffers被取消。db_cache_size的单位是字节,它直接决定了数据库缓冲区的大小,而不再是块的数量。

2.2 Shared Pool (共享区)

共享区由三部分组成,分别是Dictionary cache(包括数据字典的定义,如表结构、权限等),Library cache(包括共享的sql游标,sql原代码以及执行计划、存储过程和会话信息)和Control structure。它的大小由初始化参数shared_pool_size控制,它的作用是缓存已经被解析过的SQL,使其能被重用,不用再解析。 SQL的解析非常消耗CPU的资源,如果一条SQL在Shared pool中已经存在,则进行的仅是软解析(在Shared pool中寻找相同SQL),这将大大提高数据库的运行效率。当然,这部分内存也并非越大越好,太大的Shared pool,oracle为了维护共享结构,将付出更大的管理开销。建议在150M-500M之间。如果系统内存为1G,该值可设为150M-200M;如果为2G,该值设为250M-300M;每增加1G内存,该值增加100M;但该值最大不应超过500M。

2.3 Redo Log Buffer (重做日志缓冲区)

Log_buffer是重做日志缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR 进程将它写入磁盘。LGWR的写入条件是:用户提交、有1/3 重做日志缓冲区未被写入磁盘、有大于1M 重做日志缓冲区未被写入磁盘、超时、DBWR需要写入的数据的SCN 号大于LGWR 记录的SCN 号,DBWR 触发LGWR写入。

从中可以看出,大于1M的log buffer值意义并不大。重做日志缓冲区的大小由初始化参数log_buffer设定。

2.4 Large pool和Java pool

Large pool:用于MTS、并行查询和RMAN。如果使用了MTS或RMAN,large_pool特别有用,它可以降低用户对share pool的争用。

如果应用系统不使用MTS,也不使用RMAN,large_pool_size的大小可设为1M。

Java pool:Oracle8I以后,oracle数据库内置了对java的支持,如果数据库安装时选择了JServer组件,则这个值可以设置为20M- 30M之间。可以查询v$option动态视图,如果java那一项值为true,则表示安装了JServer,为false,表示未安装。

如果应用系统不使用PORTAL,APPS,也不使用RMAN,Java pool值的大小可设为1M。如果系统需要安装补丁,建议先把Java pool值的大小临时增加到50-150M。

3 SGA运行情况检查

3.1 SGA整体检查

对于SGA部分,我们通过sqlplus查询:


SQL> show sga

Total System Global Area 316899848 bytes

Fixed Size 741896 bytes

Variable Size 150994944 bytes

Database Buffers 163840000 bytes

Redo Buffers 1323008 bytes
或者


SQL> select * from v$sga;

NAME VALUE

-------------------- ----------

Fixed Size 741896

Variable Size 150994944

Database Buffers 163840000

Redo Buffers 1323008
Show sga的结果和SGA的初始化参数配置并不是完全一一对应的,下面是每一个部分的具体解释:

Fixed Size

oracle 的不同平台和不同版本下可能不一样,但对于确定环境是一个固定的值,里面存储了SGA各部分组件的信息,可以看作引导建立SGA的区域。

Variable Size

包含了shared_pool_size、java_pool_size、large_pool_size等内存设置和用于管理数据缓冲区等内存结构的hash table、块头信息等。

Database Buffers

指数据缓冲区,在8i中包含default pool、buffer_pool_keep、buffer_pool_recycle三部分内存。在9i中包含db_cache_size、 db_keep_cache_size、db_recycle_cache_size、db_nk_cache_size。这里要注意在8i中三部分内存总和为db_block_buffers*db_block_size。

Redo Buffers

指重做日志缓冲区的实际大小,和log_buffer的值可能稍有不同。

3.2 Data buffer 命中率检查

检查语句:


SQL>select 1 - (phy.value / (cur.value + con.value)) "HIT RATIO"

from v$sysstat cur, v$sysstat con, v$sysstat phy where cur.name = 'db block gets'

and con.name = 'consistent gets'

and phy.name = 'physical reads';
调整原则:

命中率不应该低于90%.

如果该值过低,应该调高初始化参数。8i调整db_block_buffer,9i调整db_cache_size。

3.3 Dictionary cache命中率检查

检查语句:


SQL>SELECT 1 - (SUM(getmisses)/SUM(gets)) "Data Dictionary Hit Ratio" FROM v$rowcache;
调整原则:

命中率不应该低于95%.

如果该值过低,应调高shared_pool_size的大小。

3.4 Library cache命中率检查

检查语句:


SQL>SELECT 1-(SUM(reloads)/SUM(pins)) "Library cache Hit Ratio" FROM v$librarycache;
调整原则:

命中率不应该低于99%.

如果该值过低,应调高shared_pool_size的大小。

3.5 Log buffer命中率检查

检查语句:


SQL>select (req.value*5000)/entries.value "Ratio"

from v$sysstat req, v$sysstat entries

where req.name = 'redo log space requests'

and entries.name = 'redo entries';
调整原则:

命中率不应该高于1.

如果该值过高,应调高log_buffer的大小。

4 SGA 的参数设置原则

在 Oracle8i 时,SGA 的大小是由初始化参数文件内的某些参数所设定,最麻烦的是每次调整参数之后必须等重新激活数据库才生效。从Oracle9i 开始,DBA 可以动态配置内存的大小;这样的技术我们称为「dynamicSGA」。有了dynamic SGA ,SGA的各组成区域都可以动态地进行规划与调整,而不需先关闭数据库。

在Oracle9i中,SGA_MAX_SIZE可设定 SGA 所占用的最大内存空间。需要注意的是:SGA_MAX_SIZE 尽量不要超过物理内存大小,否则将会使用到硬盘上的虚拟内存,反而导致性能低下。如果 SGA_MAX_SIZE 之设定值小于其它 SGA 相关参数设定值的总和,或是小于各相关参数默认值的总和,则 SGA_MAX_SIZE 之设定值无效。

在SGA的基本概念部分,已经介绍了各个部分大小设置的原则,这里再用一句话来总结:

1)数据库缓冲区建议占物理内存的20%-30%。物理内存在1G以内,可以占20%,1G-2G之间可占25%,物理内存在2G以上,可以占30%,甚至更高。

2)共享区建议在150M-500M之间。如果系统内存为1G,该值可设为150M-200M;如果为2G,该值设为250M-300M;每增加1G内存,该值增加100M;但该值最大不应超过500M。

3)重做日志缓冲区建议设为1M。

4)如果应用系统不使用MTS,也不使用RMAN,Large pool的大小可设为1M。否则设为16M。

5)如果应用系统不使用RMAN,Java pool值的大小可设为1M。否则设为50M。如果系统需要安装补丁,建议先把Java pool值的大小临时增加到50-150M。

调整完上述参数后,一定要计算SGA的尺寸,总原则是SGA的尺寸应小于物理内存的一半。SGA的计算方法如下:SGA= DB_BLOCK_BUFFERS*DB_BLOCK_SIZE+SHARED_POOL_SIZE+LOG_BUFFER。同时还要保证(SGA+ sort_area_size*sesson数量)不大于物理内存的70%。

分享到:
评论

相关推荐

    Oracle数据库内存结构SGA的区域信息

    SGA(system global area)系统全局区跟一些必须的后台进程合进来称为实例(Instance).说它是全局区是包含了全局变量和数据结构,是系统区是包含了进入整个Oracle Instance的数据结构而不是特定的进程结构。本文将为大家...

    ORACLE数据库 ORACLE数据库

    - **sga (System Global Area)**:共享内存区域,包含数据缓冲区、重做日志缓冲区和数据字典缓存等。 4. **关键操作** - **安装与配置**:包括选择合适的安装类型、设置初始化参数、创建数据库实例等步骤。 - **...

    oracle改sga导致数据库启动异常处理办法

    在 Oracle 数据库中,SGA(System Global Area)参数调整可能会导致数据库启动异常。这种情况下,需要了解 SGA 参数的调整方法和恢复数据库的方法。 一、SGA 参数调整的重要性 SGA 参数是 Oracle 数据库中最重要的...

    Oracle 9i数据库的动态SGA特性探索

    Oracle 9i数据库引入了一项重大改进,即动态SGA(System Global Area)特性,这使得DBA(数据库管理员)能够在数据库运行时调整SGA的各个控制参数,无需停机重启。这一变化显著提升了数据库的可用性和灵活性。 在...

    Oracle数据库进阶 高可用性、性能优化和备份恢复

    另外,PGA(Program Global Area)和SGA(System Global Area)的合理设置也是性能优化的关键。 总的来说,Oracle数据库的进阶学习涵盖了从高可用架构的设计到性能瓶颈的排查和解决,再到数据安全的保障,每一个...

    ORACLe数据库讲义.ppt

    在Oracle数据库的体系结构中,System Global Area (SGA) 是一个重要的内存区域,它包括: 1. **共享池**:存储PL/SQL代码、SQL语句和数据库缓存信息。 2. **数据缓冲区**:缓存从数据文件中读取的数据块,减少磁盘I...

    ORACLE 数据库构架图

    5. **系统全局区(System Global Area, SGA)**:SGA是Oracle实例在内存中分配的一个区域,包含数据缓冲区高速缓存、共享池、重做日志缓冲区、PGA(程序全局区)以及其他组件。 6. **后台进程**:Oracle数据库运行...

    ORACLE 数据库入门.ppt

    - **内存结构**:Oracle数据库的内存结构称为System Global Area(SGA),它占据了操作系统内存的大约60-70%,包括共享池、数据缓冲区和重做日志缓冲区。 2. **实例与后台进程**: - **实例(Instance)**:实例...

    Oracle数据库体系结构(详细版)

    SGA(System Global Area)是数据库运行时共享的内存区域,包括数据缓冲区缓存、重做日志缓冲区、PGA(Program Global Area)等。数据缓冲区缓存存储最近访问过的数据块,减少了磁盘I/O。PGA则包含每个用户会话的...

    ORACLE数据库培训.docx

    Oracle内存主要分为两大类:系统全局区(System Global Area, SGA)和进程全局区(Program Global Area, PGA)。 - SGA是所有数据库进程共享的内存区域,包含以下关键部分: - 共享池(Shared Pool):存储已解析...

    oracle数据库配置文件

    例如,内存结构如SGA(System Global Area)、PGA(Program Global Area)的大小设置,数据库字符集,日志切换策略,以及各种性能优化参数等。对这个文件的修改直接影响数据库的行为和性能,因此需谨慎操作。 2. **...

    Oracle8i数据库的SGA管理.pdf

    Oracle8i数据库的SGA(System Global Area)是数据库系统的核心组成部分,它是一个共享内存区域,存储了数据库运行时所需的各种信息。优化SGA的管理对于提升数据库性能至关重要。SGA主要包括以下几个部分: 1. **...

    ORACLE数据库日常巡检内容报告

    - **内存信息**:如SGA(System Global Area)、PGA(Program Global Area)等。 - **SID.ORA相关参数**:用于连接数据库的服务标识符。 2. **故障监控**: - **服务器实例可用性**:检查数据库实例是否正常运行...

    ORACLE 数据库入门视频

    2. **内存结构(System Global Area, SGA)** - SGA占用了操作系统内存的大部分,约为60%-70%。它包含三个主要部分:共享池(shared pool)、数据库缓冲区(database buffer cache)和重做日志缓冲区(redo log ...

    oracle数据库教学

    理解Oracle实例、后台进程和System Global Area (SGA)的概念对于数据库的管理和操作至关重要。 总的来说,Oracle数据库教学的第二章内容主要涉及安装配置的详细步骤、数据库服务的管理和数据库的启停操作,这些都是...

    ORACLE数据库参数设置技术手册

    Oracle内存结构包括SGA(System Global Area)和PGA(Program Global Area),它们是数据库运行时存储数据和控制信息的关键区域。了解这些内存组件的工作原理和大小设置对整体性能至关重要。 4.1 BUFFER_POOL_KEEP...

    《Oracle数据库系统》多媒体课件

    5. **数据库实例与内存结构**:理解SGA(System Global Area)和PGA(Program Global Area)的作用,以及它们在数据库操作中的角色。 6. **数据库创建与管理**:学习如何创建、启动、关闭数据库,以及进行数据库...

Global site tag (gtag.js) - Google Analytics