Thomas Zhang的杂货铺
13 03, 2008
32Windows 上Oracle 如何突破4G
作者 tomszrp 20:21 | Permalink 静态链接网址 | Comments 最新回复 (0) | Trackback 引用 (0) | 解决方案

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

关于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_buffersshared_pool_size测试结果
13393216213909504OK
23.5458752213909504OK
34524288213909504OK
44.5589824213909504OK
55655360283458240OK
65.5720896283458240OK
76786432283458240OK
86.5851968283458240OK
96.58519681073741824OK
105.57208962147483648OK

 

准备工作

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 a32 col ksppstvl format a20 select ksppinm, ksppstvl from x$ksppi x, x$ksppcv y where x.indx = y.indx and x.inst_id=userenv('instance') and y.inst_id=userenv('instance') and ksppinm='_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 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位的平台上

Comments
发表评论
标题:


称呼:


邮箱地址(可选):


个人主页(可选):


发表评论:
Bold Italic Link authimage




博客日历
« 七月 2008 »
  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 31      
搜索
最新发表
文章分类
文章归档
网站链接
新闻聚合