认识Oracle数据库SystemGlobalArea(SGA) |Oracle优化 Oracle Oracle内存 TTTBLOG
2009-07-1743290
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 命中率检查
检查语句:
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%。
2019-4-30 · Oracle密码过期怎么取消密码180天限制发布时间:2021-02-07 10:55:42来源:亿速云阅读:90作者:小新栏目:数据库小编给大家分享一下Oracle密码过期怎么取消密码180天限 …
解决方案:. 密码过期一般存在两种可能:. 由于Oracle中默认在default概要文件中设置了“PASSWORD_LIFE_TIME=180天”所导致。. 由于Oracle中默认在default概要文件中设置 …
2022-7-9 · Oracle 账号 提示:申请的Oracle 账号老是登录不成功。我们在下载Oracle JDK的时候,必须同意 Oracle 许可协议,然后再使用Oracle账号登录后方可下载,过程非常繁琐。为了 …
Oracle Alloy is a complete cloud infrastructure platform that enables partners to become cloud providers and offer a full range of cloud services to expand their businesses. …
Oracle密码默认180天会过期,这样对于开发过程有些麻烦烦,所以需要去掉过期策略。第一步、查看用户的proifle是哪个,一般是default SELECT username,PROFILE FROM …
修改oracle数据库用户名和密码 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后, …
2019-5-3 · Oracle数据库加固密码策略的方法发布时间:2020-11-18 17:48:20来源:亿速云阅读:158作者:LeahOracle数据库加固密码策略的方法? 很多新手对此不是很清楚,为了帮助大 …
2016-8-14 · oracle 用户密码设置了带有“@”符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误,解决办法:1:修改密码,修改密码,密码中不包括@符号;2:增加转义即可,在 …
一、修改数据库密码 1. 登录oralce数据库 su oracle 2. 以管理员身份登录 sqlplus / as sysdba 3. 更改密码 password JSSJTT 二、设置密码永不过 3. 将概要文件(如default)的密码有 …
2022-9-26 · Oracle密码默认180天会过期,这样对于开发过程有些麻烦烦,所以需要去掉过期策略。第一步、查看用户的proifle是哪个,一般是default SELECT username,PROFILE FROM …
连接单引号. || 运算符将连接包含在单引号中的字符串值,但并不直接说明如何在连接字符串的结果中添加单引号字符。. 我们来看一个相当简单的例子,它显示了如何使用 || 运算符 …
2021-5-21 · Oracle 在使用的过程中经常遇到密码过期,这种情况下应该如何才能再次正常连接数据库。 Oracle 11g 之前默认的用户时是没有密码过期的限制的,在Oracle 11g 中默认的profile …
Oracle 报错,显示用户密码过期 1.查看用户的proifle,一般是default: select username,profile from dba_users; 2.查看指定概要文件(如default)的密码有效期设置: select …
2021-4-30 · Oracle的密码过期规则是用Profile来管理的,系统默认只有一个Profile(DEFAULT),该profile 的密码过期规则为180天。那么如何修改Oracle数据库用户的 …
2016-8-14 · oracle 用户密码设置了带有“@”符号,正常登陆总是无法登陆,提示无法解析的连接字符串错误,解决办法:1:修改密码,修改密码,密码中不包括@符号;2:增加转义即可,在 …
Oracle 提供全面的 Public Cloud 服务,云区域和数据中心网络遍布全球。立即深入了解 Oracle 区域和数据中心。 Oracle 云网络功能提供完全灵活性,让客户可以安全地连接到 Oracle 服务。客户既可通过站点到站点 VPN 从公共互联网建立安全连接,也可以通过 Oracle Cloud Infrastructure FastConnect 提供的专用高带宽 ...
Oracle Java 是广受欢迎的编程语言和开发平台。. 它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。. 如今,Java 仍是企业和开发人员的首选开发平台,全球有数百万开发人员运行超过 60 亿台 Java 虚拟机。. 评估 Java 环境的健康状况. …
问题现象: 今天在更改数据库数据的时候,程序报错了,如下: ORA-28001:the password has expired 问题分析: 很显然,报错原因就是: 密码已过期!所以现在需要做的事 …
输入“alter user sys identified by 新密码”,注意:新密码最好以字母开头,否则可能出现错误Ora-00988。 (有了这个方法后,只要自己对oracle服务器有管理员权限,不记得密码的时候就可以随意修改密码) 二、密码有效期无限制
一、修改Oracle数据库密码二、设置密码永不过期1.查看用户的proifle是哪个,一般是default;SELECT username,PROFILE FROM dba_users2.查看对应的概要文件(如default)的密 …
Oracle 用户的状态是由密码来决定的,而 Oracle 中的密码是由 PROFILE 来配置的。 PROFILE 是口令限制 、 资源限制的命令集合 。 当建立数据库 时 , Oracle 会自动建立名称为 DEFAULT 的 PROFILE 。
oracle 密码过期的解决方法,按照如下步骤进行操作: 1、查看用户的proifle是哪个,一般是def oracle 用户密码已过期,oracle提示登录密码过期完美解决方法 …
在Oracle 11g之前,我们需要手工来完成这样的工作,大概步骤是:. 1. 创建一张自定义的表,保存下常用的系统用户以及默认密码的HASH值。. 2. 将系统中的用户密码HASH …
oracle 提示登录密码过期解决 1.登录到oracle的 服务器 2.切换到oracle 用户 3.设置到当前操作的实例名:export ORACLE_SID=XXX 4.连接数据库的命令行模式:sqlplus /nolog 5.sql: conn /as sysdba;用dba的身份登录...
Oracle忘记用户密码: 1.打开cmd命令窗口 2.登录,输入命令: sqlplus/nolog 1 3.链接数据库,输入命令: conn/as sysdba 1 4.修改密码,输入命令: alter user 要修改密码的用户名 identified …
在ORACLE中默认的密码规则是很宽松的,多么简单的密码都是可以被设置的。但是在一些对安全很敏感的环境下,我们最好开启ORACLE的复杂密码规则的功能。下面我们来看看默认的ORACLE密码规则是什么样的:[ora9i@db ora9i]$ sqlplus / as sysdbaSQL*Plus: Release 9.2.0.8.0 - Production on Mon Apr 8 18:57
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是世界上流行的关系 …
Oracle 在使用的过程中经常遇到密码过期,这种情况下应该如何才能再次正常连接数据库。 Oracle 11g 之前默认的用户时是没有密码过期的限制的,在Oracle 11g 中默认 …
ORACLE ORA-28001数据库密码过期解决方案 Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是 180 …
Oracle Java SE Java 是先进的编程语言和平台。随着数百万的开发人员在全球范围内运行超过 510 亿个 Java 虚拟机,Java 仍然是企业和开发人员的首选开发平台。 了解有关 …