32Windows 上Oracle 如何突破4G(转载)
上一篇 / 下一篇 2008-06-28 14:58:12 / 个人分类:常用语句
http://tomszrp.itpub.net/category/11835/23810
这个问题大家很熟悉了,但我从来没有设备能做这样的测试,这次终于得到一次巧合,做了一次测试,也验证了相关的一些理论.
关于32windows上内存寻址的问题,这节就不介绍了,网上到处都是.下面就我测试的具体信息show一下,或许能对部分朋友有所帮助.
测试环境:
Windows 2003 Server Enterprise (32位)
2 cpu + 8G(RAM) + Oracle 10.2.0.1(32位)
db_block_size=8192
关键Oracle init参数文件说明:
*.use_indirect_data_buffers=true
*.db_block_buffers=720896
*.java_pool_size=4194304
*.large_pool_size=4194304
*.shared_pool_size=2147483648
*.streams_pool_size=0
*.compatible='10.2.0.1.0'
*.db_block_size=8192
*.db_file_multiblock_read_count=16
*.db_name='DBTest'
*.job_queue_processes=10
*.open_cursors=300
*.pga_aggregate_target=203423744
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
说明:为了使用AWE,在Oracle 10g中不能使用ASMM,所以需要设置sga_target=0.
测试内容和结果
| 测试序号 | cache size(G) | db_block_buffers | shared_pool_size | 测试结果 |
| 1 | 3 | 393216 | 213909504 | OK |
| 2 | 3.5 | 458752 | 213909504 | OK |
| 3 | 4 | 524288 | 213909504 | OK |
| 4 | 4.5 | 589824 | 213909504 | OK |
| 5 | 5 | 655360 | 283458240 | OK |
| 6 | 5.5 | 720896 | 283458240 | OK |
| 7 | 6 | 786432 | 283458240 | OK |
| 8 | 6.5 | 851968 | 283458240 | OK |
| 9 | 6.5 | 851968 | 1073741824 | OK |
| 10 | 5.5 | 720896 | 2147483648 | OK |
准备工作
1)enabling support at the OS level
编辑Windows安装盘的根目录下的boot.ini文件,增加如下一行内容
multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2003 Server Enterprise" /3GB /PAE
说明:/3GB enables a single process to attach 3GB of memory.
/PAE enables access to memory above 4GB to be mapped for a process.
这两个参数可以一起使用,也可以单独使用。
if mem<=4G,就只需要设置/3GB即可
if mem> 4G,/3GB /PAE可以同时设置(这个时候最大只能使用到16G,如果要使用更多的内容,需要去掉/3GB参数)
授权:给运行Oracle数据库的操作系统帐户,授予"Lock Pages in Memory"的系统权限
重起windows系统
2)enabling AWE Support at the Database/Instance Level
设置USE_INDIRECT_DATA_BUFFERS=TRUE
设置DB_BLOCK_BUFFERS参数(不能使用db_cache_size参数)
3)修改注册表参数AWE_WINDOW_MEMORY
如果不设置这个参数,默认是1G
AWE_WINDOW_MEMORY参数有一个最小值计算公式,我们设置的value不能小于这个最小值
min(AWE_WINDOW_MEMORY)=(4096 * db_block_size * _db_block_lru_latches)/8
其中 db_block_size就是块的大小(在这个测试中8K)
_db_block_lru_latches在10g中是一个隐藏的下化线参数,可以通过如下的脚本得到:
col ksppinm format a32col ksppstvl format a20select ksppinm, ksppstvlfrom x$ksppi x, x$ksppcv ywhere x.indx = y.indx andx.inst_id=userenv('instance') andy.inst_id=userenv('instance') andksppinm='_db_block_lru_latches';
_db_block_lru_latches这个参数也可以通过一个公式计算出来:
_db_block_lru_latches=(max buffer pools * sets_per_pool)
其中: max buffer pools是一个常量=8
sets_per_tool是一个变量,它的值取决于是否enable VLM(即是否设置了use_indirect_data_buffers=true)
if VLM enabled then
sets_per_tool=2*cpu_count
else
sets_per_tool=cpu_count/2
end if;
建议:建议使用前种方法直接使用Oracle自己计算出来的结果。
根据这个测试环境,我们得到的
min(AWE_WINDOW_MEMORY)=(4096 * db_block_size * _db_block_lru_latches)/8
=(4096 * 8192 * (8*2*2))/8
=134217728(byte)
我在实际测试中,注册表中设置了这个值为234217728
测试具体过程记录
第一轮:(cache size(G)=3 shared_pool_size=213909504)
SQL> startup mount pfile='d:zrp.ora'; ORACLE 例程已经启动。 Total System Global Area 3439329280 bytes Fixed Size 1247564 bytes Variable Size 209716916 bytes Database Buffers 3221225472 bytes Redo Buffers 7139328 bytes 数据库装载完毕。 SQL> show parameter db_block NAME TYPE VALUE ------------------------------------ ----------- ------------- db_block_buffers integer 393216 db_block_checking string FALSE db_block_checksum string TRUE db_block_size integer 8192 SQL> SQL> alter database open; 数据库已更改。 SQL> select tablespace_name from dba_tablespaces; TABLESPACE_NAME ---------------------- SYSTEM UNDOTBS1 SYSAUX TEMP USERS SQL> create user thomas_zhang identified by thomas_zhang default tablespace users; 用户已创建。 SQL> grant connect,resource to thomas_zhang; 授权成功。 SQL> alter user thomas_zhang quota unlimited on users; 用户已更改。 SQL> conn thomas_zhang/thomas_zhang 已连接。 SQL> create table test (no int); 表已创建。 SQL> insert into test select rownum from dual connect by rownum<10; 已创建9行。 SQL> commit; 提交完成。 SQL> select *from test; NO ---------- 1 2 3 4 5 6 7 8 9 已选择9行。 SQL> drop table test purge; 表已删除。 SQL> conn /as sysdba 已连接。 SQL> show parameter service NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string DBTest SQL> host tnsping dbtest TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 12-3月 -2008 20:12:14 Copyright (c) 1997, 2005, Oracle. All rights reserved. 已使用的参数文件:D:oracleproduct10.2.0db_2networkadminsqlnet.ora 已使用 TNSNAMES 适配器来解析别名 Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = IP10128325) (PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = DBTest))) OK (30 毫秒) SQL> conn thomas_zhang/thomas_zhang@dbtest; 已连接。 SQL> select sysdate,user from dual; SYSDATE USER -------------- ------------------- 12-3月 -08 THOMAS_ZHANG SQL> conn /as sysdba 已连接。 SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL>
第二轮:(cache size(G)=3.5 shared_pool_size=213909504)
SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 3976200192 bytes
Fixed Size 1247564 bytes
Variable Size 209716916 bytes
Database Buffers 3758096384 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> conn thomas_zhang/thomas_zhang@dbtest;
已连接。
SQL> create table a (a int, b int);
表已创建。
SQL> insert into a values(1,1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select *from a;
A B
---------- ----------
1 1
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>第三轮:(cache size(G)=4 shared_pool_size=213909504)
SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 4513071104 bytes
Fixed Size 1247564 bytes
Variable Size 209716916 bytes
Database Buffers 4294967296 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> conn thomas_zhang/thomas_zhang@dbtest;
已连接。
SQL> select *from a;
A B
---------- ----------
1 1
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>第四轮:(cache size(G)=4.5 shared_pool_size=213909504)
SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 5049942016 bytes
Fixed Size 1247564 bytes
Variable Size 209716916 bytes
Database Buffers 4831838208 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL>
SQL> alter database open;
数据库已更改。
SQL> conn thomas_zhang/thomas_zhang@dbtest
已连接。
SQL> select *from a;
A B
---------- ----------
1 1
SQL> insert into a values(3,3);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>第五轮:(cache size(G)=5 shared_pool_size=283458240)第七轮:(cache size(G)=6 shared_pool_size=283458240)
SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 5679087616 bytes
Fixed Size 1247828 bytes
Variable Size 301991340 bytes
Database Buffers 5368709120 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> conn thomas_zhang/thomas_zhang@dbtest;
已连接。
SQL> select *from a;
A B
---------- ----------
3 3
1 1
SQL> insert into a values(5,5);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn /as sysdba
已连接。
SQL> show parameter db_block
NAME TYPE VALUE
------------------------------------ ----------- ---------
db_block_buffers integer 655360
db_block_checking string FALSE
db_block_checksum string TRUE
db_block_size integer 8192
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。SQL>
第六轮:(cache size(G)=5.5 shared_pool_size=283458240)SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 6215958528 bytes
Fixed Size 1247828 bytes
Variable Size 301991340 bytes
Database Buffers 5905580032 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ---------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 5928M
sga_target big integer 0
SQL> conn thomas_zhang/thomas_zhang@dbtest;
已连接。
SQL> select *from a;
A B
---------- ----------
3 3
1 1
5 5
SQL> insert into a values(6,6);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 6752829440 bytes
Fixed Size 1247828 bytes
Variable Size 301991340 bytes
Database Buffers 6442450944 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ---------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 6440M
sga_target big integer 0
SQL> conn thomas_zhang/thomas_zhang@dbtest;
已连接。
SQL> select *from a;
A B
---------- ----------
3 3
6 6
1 1
5 5
SQL> insert into a values(7,7);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>第八轮:(cache size(G)=6.5 shared_pool_size=283458240)
SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 7289700352 bytes
Fixed Size 1247828 bytes
Variable Size 301991340 bytes
Database Buffers 6979321856 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> conn thomas_zhang/thomas_zhang@dbtest;
已连接。
SQL> select *from a;
A B
---------- ----------
3 3
6 6
7 7
1 1
5 5
SQL> insert into a values(8,8);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>第九轮:(cache size(G)=6.5 shared_pool_size=1073741824)
SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 8078229504 bytes
Fixed Size 1250092 bytes
Variable Size 1090522324 bytes
Database Buffers 6979321856 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- -------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 7704M
sga_target big integer 0
SQL> show parameter shared_pool_size
NAME TYPE VALUE
------------------------------------ ----------- --------------
shared_pool_size big integer 1G
SQL> conn thomas_zhang/thomas_zhang@dbtest
已连接。
SQL> select * from a;
A B
---------- ----------
3 3
6 6
7 7
8 8
1 1
5 5
已选择6行。
SQL> insert into a values(9,9);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>第十轮:(cache size(G)=5.5 shared_pool_size=2147483648)SQL> startup mount pfile='d:zrp.ora';
ORACLE 例程已经启动。
Total System Global Area 8078229504 bytes
Fixed Size 1253172 bytes
Variable Size 2164261068 bytes
Database Buffers 5905580032 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
SQL> alter database open;
数据库已更改。
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- -------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 7704M
sga_target big integer 0
SQL> show parameter shared_pool_size
NAME TYPE VALUE
------------------------------------ ----------- -------------
shared_pool_size big integer 2G
SQL> conn thomas_zhang/thomas_zhang@dbtest
已连接。
SQL> select * from a;
A B
---------- ----------
3 3
6 6
7 7
8 8
1 1
5 5
9 9
已选择7行。
SQL> insert into a values(10,10);
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn /as sysdba
已连接。
SQL> drop user thomas_zhang cascade;
用户已删除。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>总结:因为测试Server的资源有限,只能做到这个深度了,这也说明了这项技术确实是可行的。但是,要注意1)只有data buffer goes into the AWE part of the memory2)其他的比如Shared_pool, log_buffer, sort_area_size, pga etc. 均使用 the 3GB memory area3)如果我们设置AWE_WINDOW_MEMORY大于1GB,我们必须考虑这个值+the variable part of the SGA必须不能超过3GB这就会引出来一个潜在的问题ORA-04031,我们知道10g中的shared_pool的开销因为设计上的缘故,比9i中增加了不少,再加上10g的很多自动管理的pkg,导致我们在使用10g 的时候,需要设置较大的shared_pool_size才能避免4031的发生。所以,对一个负载比较高的系统,3G的variable part一般是不够用的,所以建议升级到64位的平台上
导入论坛 引用链接 收藏 分享给好友 推荐到圈子 管理 举报
TAG:
标题搜索
日历
|
|||||||||
| 日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
| 1 | 2 | 3 | 4 | 5 | 6 | ||||
| 7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
| 14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
| 21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
| 28 | 29 | 30 | |||||||
数据统计
- 访问量: 1893
- 日志数: 72
- 书签数: 2
- 建立时间: 2008-04-29
- 更新时间: 2008-09-05

