查看: 14501|回复: 12

[精华] 32bit oracle sga_max_size与单进程pga之间的制约关系

[复制链接]
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
发表于 2004-7-27 15:52 | 显示全部楼层 |阅读模式
阅读本文前建议先阅读
http://blog.csdn.net/biti_rainy/ ... cle_20040726_1.aspx



有颜色标注的原文连接  
http://blog.csdn.net/biti_rainy/ ... cle_20040727_1.aspx




在我的测试中,由于我降低了SGA的起点(和本文章无关,碰巧被修改过而已),从0x5000000降低到0x42000000,也就是说,当没有降低的时候,SGA的理论极限值是约小于1.75G,我降低起点后,SGA的极限值大约是1.95G。

show">sys@OCN>show sga   

Total System Global Area 2064719084 bytes
Fixed Size                   453868 bytes
Variable Size             385875968 bytes
Database Buffers         1677721600 bytes
Redo Buffers                 667648 bytes
sys@OCN>

我的SGA_MAX_SIZE的大小这时为 2064719084 。

show">sys@OCN>show parameters sga_max_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sga_max_size                         big integer 2064719084

实际上,我这个时候的SGA_MAX_SIZE比真实的SGA设置要大一些,这是我手工调大的。我们来观察单个数据库进程的maps

[oracle@ocnsb2 oracle]$ ps -ef|grep pmon
oracle   18346     1  0 12:16 ?        00:00:00 ora_pmon_roocn
oracle   18535 18493  0 13:04 pts/0    00:00:00 grep pmon

[oracle@ocnsb2 oracle]$ more  /proc/18346/maps
08048000-0a4b9000 r-xp 00000000 08:05 324868     /opt/oracle/products/9.2.0/bin/oracle
0a4b9000-0ad53000 rw-p 02470000 08:05 324868     /opt/oracle/products/9.2.0/bin/oracle
0ad53000-0adec000 rwxp 00000000 00:00 0
40000000-40016000 r-xp 00000000 08:02 448102     /lib/ld-2.2.4.so
40016000-40017000 rw-p 00015000 08:02 448102     /lib/ld-2.2.4.so
40017000-40018000 rw-p 00000000 00:00 0
40018000-40019000 r-xp 00000000 08:05 1038540    /opt/oracle/products/9.2.0/lib/libodmd9.so
40019000-4001a000 rw-p 00000000 08:05 1038540    /opt/oracle/products/9.2.0/lib/libodmd9.so
4001a000-40026000 r-xp 00000000 08:05 1038423    /opt/oracle/products/9.2.0/lib/libskgxp9.so
40026000-4002a000 rw-p 0000b000 08:05 1038423    /opt/oracle/products/9.2.0/lib/libskgxp9.so
4002a000-40038000 r-xp 00000000 08:05 1038537    /opt/oracle/products/9.2.0/lib/libskgxn9.so
40038000-40039000 rw-p 0000d000 08:05 1038537    /opt/oracle/products/9.2.0/lib/libskgxn9.so
40039000-4004d000 rw-p 00000000 00:00 0
4004d000-4032c000 r-xp 00000000 08:05 1038531    /opt/oracle/products/9.2.0/lib/libjox9.so
4032c000-4043c000 rw-p 002de000 08:05 1038531    /opt/oracle/products/9.2.0/lib/libjox9.so
4043c000-4043e000 rw-p 00000000 00:00 0
4043e000-40441000 r-xp 00000000 08:02 448115     /lib/libdl-2.2.4.so
40441000-40442000 rw-p 00002000 08:02 448115     /lib/libdl-2.2.4.so
40442000-40443000 rw-p 00000000 00:00 0
40443000-40465000 r-xp 00000000 08:02 448117     /lib/libm-2.2.4.so
40465000-40466000 rw-p 00021000 08:02 448117     /lib/libm-2.2.4.so
40466000-40475000 r-xp 00000000 08:02 448147     /lib/libpthread-0.9.so
40475000-4047d000 rw-p 0000e000 08:02 448147     /lib/libpthread-0.9.so
4047d000-40490000 r-xp 00000000 08:02 448120     /lib/libnsl-2.2.4.so
40490000-40491000 rw-p 00012000 08:02 448120     /lib/libnsl-2.2.4.so
40491000-40493000 rw-p 00000000 00:00 0
40493000-405c8000 r-xp 00000000 08:02 448111     /lib/libc-2.2.4.so
405c8000-405cd000 rw-p 00134000 08:02 448111     /lib/libc-2.2.4.so
405cd000-405f4000 rw-p 00000000 00:00 0
405f5000-405ff000 r-xp 00000000 08:02 448136     /lib/libnss_files-2.2.4.so
405ff000-40600000 rw-p 00009000 08:02 448136     /lib/libnss_files-2.2.4.so
40600000-40680000 rw-p 00000000 08:02 69445      /dev/zero
40680000-406c1000 rw-p 00000000 00:00 0
42000000-be400000 rw-B 00000000 00:04 524288     /SYSV0676004c (deleted)
bffe4000-bffee000 rwxp ffff7000 00:00 0
0a4b9000-0ad53000 rw-p 02470000 08:05 324868     /opt/oracle/products/9.2.0/bin/oracle
0ad53000-0adec000 rwxp 00000000 00:00 0
40000000-40016000 r-xp 00000000 08:02 448102     /lib/ld-2.2.4.so
40016000-40017000 rw-p 00015000 08:02 448102     /lib/ld-2.2.4.so
40017000-40018000 rw-p 00000000 00:00 0
40018000-40019000 r-xp 00000000 08:05 1038540    /opt/oracle/products/9.2.0/lib/libodmd9.so
40019000-4001a000 rw-p 00000000 08:05 1038540    /opt/oracle/products/9.2.0/lib/libodmd9.so
4001a000-40026000 r-xp 00000000 08:05 1038423    /opt/oracle/products/9.2.0/lib/libskgxp9.so
40026000-4002a000 rw-p 0000b000 08:05 1038423    /opt/oracle/products/9.2.0/lib/libskgxp9.so
4002a000-40038000 r-xp 00000000 08:05 1038537    /opt/oracle/products/9.2.0/lib/libskgxn9.so
40038000-40039000 rw-p 0000d000 08:05 1038537    /opt/oracle/products/9.2.0/lib/libskgxn9.so
40039000-4004d000 rw-p 00000000 00:00 0
4004d000-4032c000 r-xp 00000000 08:05 1038531    /opt/oracle/products/9.2.0/lib/libjox9.so
4032c000-4043c000 rw-p 002de000 08:05 1038531    /opt/oracle/products/9.2.0/lib/libjox9.so
4043c000-4043e000 rw-p 00000000 00:00 0
4043e000-40441000 r-xp 00000000 08:02 448115     /lib/libdl-2.2.4.so
40441000-40442000 rw-p 00002000 08:02 448115     /lib/libdl-2.2.4.so
40442000-40443000 rw-p 00000000 00:00 0
40443000-40465000 r-xp 00000000 08:02 448117     /lib/libm-2.2.4.so
40465000-40466000 rw-p 00021000 08:02 448117     /lib/libm-2.2.4.so
40466000-40475000 r-xp 00000000 08:02 448147     /lib/libpthread-0.9.so
40475000-4047d000 rw-p 0000e000 08:02 448147     /lib/libpthread-0.9.so
4047d000-40490000 r-xp 00000000 08:02 448120     /lib/libnsl-2.2.4.so
40490000-40491000 rw-p 00012000 08:02 448120     /lib/libnsl-2.2.4.so
40491000-40493000 rw-p 00000000 00:00 0
40493000-405c8000 r-xp 00000000 08:02 448111     /lib/libc-2.2.4.so
405c8000-405cd000 rw-p 00134000 08:02 448111     /lib/libc-2.2.4.so
405cd000-405f4000 rw-p 00000000 00:00 0
405f5000-405ff000 r-xp 00000000 08:02 448136     /lib/libnss_files-2.2.4.so
405ff000-40600000 rw-p 00009000 08:02 448136     /lib/libnss_files-2.2.4.so
40600000-40680000 rw-p 00000000 08:02 69445      /dev/zero
40680000-406c1000 rw-p 00000000 00:00 0
42000000-be400000 rw-B 00000000 00:04 524288     /SYSV0676004c (deleted)

这里可以看出单个进程中根据SGA_MAX_SIZE预分配了0x42000000 -- 0xbe400000 这段虚拟内存空间,虽然实际SGA并没有这么大,但是正是这段空间的预留,为9i中动态增大SGA提供了可能。也就是说进程能访问的虚拟地址空间是登陆上数据库的时候决定的,这样即使sga真正地发生了变化,只要在SGA_MAX_SIZE之内,该进程都可以访问这些虚拟内存空间。

select">sys@OCN>select  (to_number('be400000','xxxxxxxxxx') - to_number('42000000','xxxxxxxxxx'))/1024/1024 from dual;

(TO_NUMBER('BE400000','XXXXXXXXXX')-TO_NUMBER('42000000','XXXXXXXXXX'))/1024/1024
---------------------------------------------------------------------------------
                                                                             1988

sys@OCN>



bffe4000-bffee000 rwxp ffff7000 00:00 0
[oracle@ocnsb2 oracle]$


从这里可以看出进程的私有内存分配的顶点,我们看

0xbe400000--0xbffe4000 属于oracle进程可使用的 PGA 的空间大小

select">sys@OCN>select to_number('bffe4000','xxxxxxxxxx') - to_number('be400000','xxxxxxxxxx')  from dual;

TO_NUMBER('BFFE4000','XXXXXXXXXX')-TO_NUMBER('BE400000','XXXXXXXXXX')
---------------------------------------------------------------------
                                                             29245440

sys@OCN>

从这里可以看出PGA能使用的空间大约是 29245440 字节

我们来做一个测试

show">sys@OCN>show parameters pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 524288000
sys@OCN>

在 oracle 中单个进程的PGA的使用遵循的原则是 小于 min(pga_aggregate_target *5%, 100MB),在这样的设置下我执行对两个大表做hash join的查询,结果是成功完成。然后我修改pga_aggregate_target  = 1024M

alter">sys@OCN>alter system set pga_aggregate_target  = 1024m;

System altered.

show">sys@OCN>show parameters pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 1073741824
sys@OCN>

当我再运行这个查询的过程中,我同时观察该进程的PGA使用量

在session 1 中执行

  1* select * from company c,member m where c.admin_member_id = m.login_id
/">alibaba@OCN>/
ERROR:
ORA-04030: out of process memory when trying to allocate 254476 bytes (hash-join
subh,kllcqas:kllsltba)



no rows selected


Execution Plan



在session2中观察结果(不停地执行下面的查询观察变化)

sys@OCN> select  spid,USERNAME,PGA_USED_MEM ,PGA_ALLOC_MEM,PGA_FREEABLE_MEM, PGA_MAX_MEM    from v$process;

SPID         USERNAME                       PGA_USED_MEM PGA_ALLOC_MEM PGA_FREEABLE_MEM PGA_MAX_MEM
------------ ------------------------------ ------------ ------------- ---------------- -----------
                                                       0             0                0           0
18346        oracle                               147425        476981                0      476981
18348        oracle                               244313        570985                0      570985
18350        oracle                              1304737       1635765                0     1635765
18354        oracle                              2945957       3300193                0     3300193
18356        oracle                               200089        534729                0      534729
18358        oracle                              4368569       4741969                0     4741969
18360        oracle                               151577        551357                0      551357
18362        oracle                               165841        510101                0      510101
18364        oracle                               156625        485493                0      485493
18366        oracle                               157009        485493                0      485493
18368        oracle                              4362441       4748549                0     4748549
18370        oracle                              4362441       4715245                0     4715245
18388        oracle                               191285        790553           196608      790553
18406        oracle                             29041865      30095501                0    30095501


我们发现,执行hash join的进程的PGA最大达到29041865 之后,就报出错误4030而返回了,基本吻合前面关于 SGA_MAX_SIZE与进程私有空间虚拟地址的顶点之间的计算。
论坛徽章:
65
ITPUB元老
日期:2006-03-01 17:57:36马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
发表于 2004-7-27 16:21 | 显示全部楼层
呵呵

如果不做任何修改
单个用户进程在2.1上SGA+PGA的虚拟地址空间的确是不能超过2G的。

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
 楼主| 发表于 2004-7-27 16:34 | 显示全部楼层
最初由 piner 发布
[B]呵呵

如果不做任何修改
单个用户进程在2.1上SGA+PGA的虚拟地址空间的确是不能超过2G的。 [/B]


是 1.75G  不是 2G  

使用道具 举报

回复
论坛徽章:
65
ITPUB元老
日期:2006-03-01 17:57:36马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
发表于 2004-7-27 17:41 | 显示全部楼层
是,你说的更精确。。。

使用道具 举报

回复
招聘 : 灾备架构师
论坛徽章:
53
IT宝贝
日期:2009-02-23 21:48:25现任管理团队成员
日期:2011-05-07 01:45:08IT宝贝
日期:2013-06-18 18:07:16
发表于 2004-7-27 18:03 | 显示全部楼层
晕,biti越搞越深了   

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
66
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08版主3段
日期:2012-05-15 15:24:11
发表于 2004-7-28 13:46 | 显示全部楼层
最初由 biti_rainy 发布
[B]

是 1.75G  不是 2G  

[/B]


在ads3上也是如此。

使用道具 举报

回复
论坛徽章:
65
ITPUB元老
日期:2006-03-01 17:57:36马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52
发表于 2004-7-28 15:16 | 显示全部楼层
最初由 xzh2000 发布
[B]

在ads3上也是如此。 [/B]



ads3需要看什么内核,不能一楷而论

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2005-4-4 18:09 | 显示全部楼层
请教:在64bit的oracle中有何不同呢

使用道具 举报

回复
论坛徽章:
86
ITPUB元老
日期:2005-02-28 12:57:002012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20咸鸭蛋
日期:2012-05-08 10:27:19版主8段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24
 楼主| 发表于 2005-4-4 21:53 | 显示全部楼层
最初由 berbang 发布
[B]请教:在64bit的oracle中有何不同呢 [/B]


64 bit 就没有 4g 限制了啊
自然跟这个帖子没关系了

使用道具 举报

回复
论坛徽章:
3
授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:34ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2005-4-7 08:49 | 显示全部楼层
我现在在64bit中遇到了ORA-04030错误。
具体内容在这个帖子里:
http://www.itpub.net/showthread.php?s=&postid=2361522#post2361522

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表