Oracle9I 的SGA 内存管理中,默认 SGA_MAX_SIZE 通常都是100M,这导致了机器性能的浪费,通过调整
SGA 参数的参数值,可以将Oracle 的性能显著提高
--------------Oracle 9i 中修改SGA 参数 begin-----------
1、SGA 主要由三部分组成 :共享池(share pool),数据缓冲区(datebase buffer cache ) ,回滚日志缓冲区
(redo log buffer cache).
sga_max_size = shared_pool_size + db_cache_size + log_buffer
由上面可得主要涉及四个参数的修改
sga_max_size :sga 最大值
db_cache_size:数据库缓冲区
shared_pool_size:共享池值
log_buffer:回滚日志值
2、查看目前的值
2.1
SGA 值 约168M
SQL> show sga;
Total System Global Area 168894212 bytes
Fixed Size 454404 bytes
Variable Size 142606336 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
2.2
sga 最大值 约168M
SQL> show parameters sga_max_size
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sga_max_size big integer
168894212
2.3 数据库缓冲区值
约25M
SQL> show parameter db_cache_size;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
db_cache_size big integer
25165824
2.4 共享池
约58M
SQL> show parameter SHARED_POOL_SIZE;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
shared_pool_size big integer
58720256
2.5 日志
约524K
SQL> show parameter log_buffer
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
log_buffer integer
524288
3、 由以上可知,内存没有调到最优,更改参数
假定Oracle是 32 bit ,服务器RAM大于2G ,注意你的PGA的情况,,则建议
shared_pool_size + data buffer +large_pool_size + java_pool_size < 1.6G
如果服务器RAM如果2G
shared_pool_size = 150M ,data buffer = 1.2G
3.1 alter system set SGA_MAX_SIZE= 1600M scope=spfile;
3.2 SQL>ALTER SYSTEM SET DB_CACHE_SIZE=1200M
3.3 SQL>ALTER SYSTEM SET SHARED_POOL_SIZE=150M;
4、 关于OS 64 32 Oracle 32 64 位概念
64 os 可以安装 32位 Oracle(32位的Oracle对内存始终是1.7g,网上有方法突破,但是要想想,Oracle为什么要做这个限制?)
(也可以安装32位 weblogic) ,但是32 os 不能安装64位 Oracle
参考文档1 关于 SGA的基础
http://hi.baidu.com/shirdrn/blog/item/7e6ba72df89ab831349bf78c.html
参考文档2 关于
关于SGA设置的一点总结 很好的关于SGA 的设置
http://hydex.iteye.com/blog/186810
参考文档3 关于 SGA的参数修改的一些建议
http://topic.csdn.net/t/20031013/19/2351321.html
参考文档5 显示信息
http://mba.shengwushibie.com/itbook/BookChapter.asp?id=41233
关于SGA 的设置
http://patmusing.blog.163.com/blog/static/135834960201001410357431/
------------ 20120410 创建数据库内存分配 begin ---------
1、9I 安装的时候默认值为
共享池: 48MB
缓冲区高速缓存:24MB
JAVA池:32M
大型池:8
PGA:24
合计为176MB
2\9I 安装的时候调整为100%
用于ORACLE的物理内存为(2047MB)的百分比
当百分率为100的时候
共享池: 333MB
缓冲区高速缓存:1000MB
JAVA池:32M
大型池:197
PGA:444
合计为2046MB
3、自定义分配
IDEACENTER K330 物理内存 2.99GB
3.1 根据分配原则
SGA不超过1.7G,PGA+SGA不超过2G
shared_pool_size 200M--300M
log_buffer : 128K ---- 1M
large_pool_size 10M --- 50M
java_pool_size 30M
data buffer ,在做了前面的设置后,凡可以提供给oracle的内存
PGA : =(total_mem * 80%) * 20% (这里的total_mem为机器的内存 total_mem * 80%=分配给ORACLE的内存=2046) 计算所得409
3.2 实际分配
3.2.1 SGA
shared_pool_size 分配250
large_pool_size 分配 50
java_pool_size 分配 32
data buffer 分配 1200 mb
3.2.2
PGA : 分配444
以上合计为 2016
PGA 内存分配的文章 http://blog.csdn.net/zyxvic1981/article/details/7352869 有关于PGA的计算
------------ 20120410 创建数据库内存分配 end ---------
--------------Oracle 9i 中修改SGA 参数 end-----------
------------------------------------ORA-04030 进程内存不足 begin --------------------
1、 原有系统 PAG 参数设置为 250M
现修改为 pga_aggregate_target=600m
alter system set pga_aggregate_target=600m scope=spfile;
2 、本机器物理内存大小3G ,Oracle 为 32位。
根据 SGA+PGA 约为总内存的80%,且SGA<1.7G的标准 ,设定参数为
sga_max_size =1600M
pga_aggregate_target=600m
---- 上面的方案没有解决问题 ,尝试 新的 begin -----------
SQL> alter system set dbwr_io_slaves=2 scope=spfile;
系统已更改。
SQL> alter system set backup_tape_io_slaves=true scope=spfile;
系统已更改。
SQL> alter system set sga_target=1400m;
系统已更改。
SQL> alter system set sga_max_size=1400m scope=spfile;
系统已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
Oracle 例程已经关闭。
SQL> alter system set large_pool_size=80m;
alter system set large_pool_size=80m
*
第 1 行出现错误:
ORA-01034: Oracle not available
进程 ID: 2156
会话 ID: 14 序列号: 39
SQL> startup
Oracle 例程已经启动。
Total System Global Area 1464717312 bytes
Fixed Size 1377108 bytes
Variable Size 671091884 bytes
Database Buffers 780140544 bytes
Redo Buffers 12107776 bytes
数据库装载完毕。
数据库已经打开。
SQL> alter system set large_pool_size=80m;
系统已更改。
SQL> alter system set pga_aggregate_target=300m scope=spfile;
系统已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
Oracle 例程已经关闭。
SQL> startup
Oracle 例程已经启动。
Total System Global Area 1464717312 bytes
Fixed Size 1377108 bytes
Variable Size 746589356 bytes
Database Buffers 704643072 bytes
Redo Buffers 12107776 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter pga;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
pga_aggregate_target big integer
300M
SQL> show parameter sga;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
lock_sga boolean
FALSE
pre_page_sga boolean
FALSE
sga_max_size big integer
1400M
sga_target big integer
1400M
---- 上面的方案没有解决问题 ,尝试 新的 end-----------
-----------scope BEING--------
应该是scope=both和scope=spfile
Oracle 里面有个叫做spfile的东西,就是动态参数文件,里面设置了Oracle 的各种参数。所谓的动态,就是说你可以在不关闭数据库的情况下,更改数据库参数,记录在spfile里面。更改参数的时候,有4种scope选项。scope就是范围
++ scope=spfile 仅仅更改spfile里面的记载,不更改内存,也就是不立即生效,而是等下次数据库启动生效。有一些参数只允许用这种方法更改
++ scope=memory 仅仅更改内存,不改spfile。也就是下次启动就失效了
++ scope=both 内存和spfile都更改
++ 不指定scope参数,等同于scope=both.
-----------scope END --------
ORA-04030 参考链接 http://blog.csdn.net/ky000/article/details/6662845
http://blog.csdn.net/zhangout/article/details/6454794
------------------------------------ORA-04030 end --------------------
PGA(Program Global Area程序全局区)是一块包含一个服务进程的数据和控制信息的内存区域
。它是Oracle在一个服务进程启动是创建的,
是非共享的(参考链接 http://www.cuug.com/xueyuanzhuanqu/jishuwenzhang/201110/jishuwenzhang-1112.html)
------------------------------------ORA-12528 begin--------------------
# listener.ora Network Configuration File: e:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(Oracle_HOME = e:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:e:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(GLOBAL_DBNAME = prod)
(Oracle_HOME = e:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = prod)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
ADR_BASE_LISTENER = e:\app\Administrator
问题 解决 :加入这一段
(SID_DESC =
(GLOBAL_DBNAME = prod)
(Oracle_HOME = e:\app\Administrator\product\11.2.0\dbhome_1)
(SID_NAME = prod)
)
------------------------------------ORA-12528 end --------------------