打不死的心态活到老。

32Windows 上Oracle 如何突破4G

上一篇 / 下一篇  2008-08-07 10:11:24 / 个人分类:数据库

7sKcK\9EX#C"e&e032Windows 上Oracle 如何突破4G51Testing软件测试网-s1XG;M0r

A$}9t*yE/Mka"A0http://tomszrp.itpub.net/post/11835/457208

5r/r#z4S dR9M$@0
作者 tomszrp

A NL z"N,v2m4s0这个问题大家很熟悉了,但我从来没有设备能做这样的测试,这次终于得到一次巧合,做了一次测试,也验证了相关的一些理论.

;rgHAPQR.tT0

7`)NZ8o0f&_^0关于32windows上内存寻址的问题,这节就不介绍了,网上到处都是.下面就我测试的具体信息show一下,或许能对部分朋友有所帮助.51Testing软件测试网#xU["X\%n~ F

51Testing软件测试网dS ]6@3y?5]!J@

测试环境51Testing软件测试网$TD'T{xj8u#rou

Windows 2003 Server Enterprise (32位)

?2M*y4Z;Gx7c0

2 cpu + 8G(RAM) + Oracle 10.2.0.1(32位)51Testing软件测试网*`_!Nh.?3qe2_$o

db_block_size=819251Testing软件测试网;A3wXPaW9g

关键Oracle init参数文件说明

*sn]wER;wB0

*.use_indirect_data_buffers=true51Testing软件测试网"R$F'D$w \C,A,G5[
*.db_block_buffers=72089651Testing软件测试网2K8WY'D D:_`
*.java_pool_size=419430451Testing软件测试网:ka7LJ,Q \ o}'z
*.large_pool_size=419430451Testing软件测试网4h+P(ST"_.ZOz;D&k
*.shared_pool_size=214748364851Testing软件测试网Fe9K;mJ-SM]
*.streams_pool_size=0
5pg-W5P-gJ&|$x0*.compatible='10.2.0.1.0'
5g5zsS_*XE P0*.db_block_size=819251Testing软件测试网}y3gq&g:m?
*.db_file_multiblock_read_count=1651Testing软件测试网z?AO0JM3pe(zl'f.t
*.db_name='DBTest'51Testing软件测试网 vmaW e?$a"k
*.job_queue_processes=1051Testing软件测试网vG op i*~eq+u
*.open_cursors=30051Testing软件测试网W#o;`9n/v
*.pga_aggregate_target=20342374451Testing软件测试网 ik6A;bBGnV
*.processes=150
E8x?`2ne8C ~0*.remote_login_passwordfile='EXCLUSIVE'51Testing软件测试网*IT3_+Ve3e
 

)n$y,s#FU{5xqMf0

说明:为了使用AWE,在Oracle 10g中不能使用ASMM,所以需要设置sga_target=0.51Testing软件测试网4b1S:jsO A r g

测试内容和结果

(w IIX|+t"{+_(~0

测试序号cache size(G)db_block_buffersshared_pool_size测试结果
13393216213909504OK
23.5458752213909504OK
34524288213909504OK
44.5589824213909504OK
55655360283458240OK
65.5720896283458240OK
76786432283458240OK
86.5851968283458240OK
96.58519681073741824OK
105.57208962147483648OK

qw|,Jc4d x_-~/T0

 51Testing软件测试网#Z9p%`l%C'O0z

准备工作

L9Kj-y1SE c'rC0

1)enabling support at the OS level

-QT ]J7N8snl0

编辑Windows安装盘的根目录下的boot.ini文件,增加如下一行内容51Testing软件测试网7[}n|b

multi(0)disk(0)rdisk(0)partition(1)WINNT="Microsoft Windows 2003 Server Enterprise" /3GB /PAE51Testing软件测试网/gx,PQz2u|

51Testing软件测试网u"YN%W%x l?I

说明:/3GB enables a single process to attach 3GB of memory.51Testing软件测试网Y^'~j'i,f:\}*~
/PAE enables access to memory above 4GB to be mapped for a process.51Testing软件测试网t;?2d&r*_k h8C)v&|4`(L6W

这两个参数可以一起使用,也可以单独使用。51Testing软件测试网hT%H|R

if mem<=4G,就只需要设置/3GB即可51Testing软件测试网B}X cO4} So

if mem> 4G,/3GB /PAE可以同时设置(这个时候最大只能使用到16G,如果要使用更多的内容,需要去掉/3GB参数)

A jyGC UE0

 

6\]8eA xj0

授权:给运行Oracle数据库的操作系统帐户,授予"Lock Pages in Memory"的系统权限51Testing软件测试网"T5W9i'@,x-NQZ.T

 51Testing软件测试网iNKP5t2E M&wE

重起windows系统51Testing软件测试网Ra&[+t9kh.C*CR

2)enabling AWE Support at the Database/Instance Level

%jFr:HI6a!s0

设置USE_INDIRECT_DATA_BUFFERS=TRUE

n.|3\#_a6l0D0

设置DB_BLOCK_BUFFERS参数(不能使用db_cache_size参数)51Testing软件测试网sPe$[us

 

3@Kz`;g.T0

3)修改注册表参数AWE_WINDOW_MEMORY51Testing软件测试网!H0`8H/YAR#|

如果不设置这个参数,默认是1G51Testing软件测试网E3Z{V!a4}:l:rL

AWE_WINDOW_MEMORY参数有一个最小值计算公式,我们设置的value不能小于这个最小值

x/?;v tWr0

min(AWE_WINDOW_MEMORY)=(4096 * db_block_size * _db_block_lru_latches)/8

5ne)pJ {TK _.m0

其中 db_block_size就是块的大小(在这个测试中8K)51Testing软件测试网efL{V([ U

_db_block_lru_latches在10g中是一个隐藏的下化线参数,可以通过如下的脚本得到:

h6n/tdWoa0

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';

'u/y5NwTHr0

 

}@\ d] xc-yg0

_db_block_lru_latches这个参数也可以通过一个公式计算出来:51Testing软件测试网o8~^Y#~Oa

 

t(e6q4c@;nS0

_db_block_lru_latches=(max buffer pools * sets_per_pool)51Testing软件测试网4mj$y4rc

其中: max buffer pools是一个常量=851Testing软件测试网.M^]dC8vyX

sets_per_tool是一个变量,它的值取决于是否enable VLM(即是否设置了use_indirect_data_buffers=true)

th I su0

if VLM enabled then51Testing软件测试网7`&`B ]#` b5C(?c

sets_per_tool=2*cpu_count

y"N&Qze;P1t&Y!y0

else

!M,D,c2Z6O0

sets_per_tool=cpu_count/2

Q,g!r)s!XN(yi3s0

end if;

_,LV }&h;P _x!i0

 51Testing软件测试网Jj {B,}|.S

建议:建议使用前种方法直接使用Oracle自己计算出来的结果。

+e0A9Tuh(XWa0

)?Bi4mJ&@yF4gW0

根据这个测试环境,我们得到的

r~cc tm,@3H0

min(AWE_WINDOW_MEMORY)=(4096 * db_block_size * _db_block_lru_latches)/8
Qx:Q^Q/E9j0=(4096 * 8192 * (8*2*2))/8

!?} z/P5Q"w0

=134217728(byte)

YJ!?9Hz'{;A0

我在实际测试中,注册表中设置了这个值为234217728

/E |"DnFt^(^tof0

测试具体过程记录

{)R)k#A(M8IlB)~0

 51Testing软件测试网,R8H4S#Y D%@$L

第一轮:(cache size(G)=3 shared_pool_size=213909504)51Testing软件测试网+O'CyxX b3Bd:@

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 (DEscrīptION = (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)

9x2Ii;E+HT0
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)

+A }8H3^+u!`$E!~}0
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)

Co+{nN\)?e0
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)

X\4_)Nq!m+M0
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>

{*E GP-T0m;{Z0
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>
51Testing软件测试网R4[4U4W*R |U m ]o

第八轮:(cache size(G)=6.5 shared_pool_size=283458240)51Testing软件测试网` [aip a

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>
51Testing软件测试网 A*L]a ~.q3_

第九轮:(cache size(G)=6.5 shared_pool_size=1073741824)51Testing软件测试网(MO+Hm Z%zM }

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 memory
2)其他的比如Shared_pool, log_buffer, sort_area_size, pga etc. 均使用 the 3GB memory area
3)如果我们设置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: 数据库

 

评分:0

我来说两句

Open Toolbar