分享
 
 
 

PL/SQL学习之oracle排序系列二(上)

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

上一期讲了oracle在什么情况下需要排序,这次我们把注意力集中到与排序相关的几个内存组件

PGA:

The Process Global Area,它是属于私有内存段,段内的内容只对本进程可见,这不同于sga的共享内存段。

pga的内存结构不需要latch来保护,因为不会有其他进程同时访问。PGA包括两个部分,fixed pga,variable pga。

fixed pga保存一些数据结构和指向variable pga的指针。PGA也是通过freelist和bucket来分配和管理。

UGA:

User Global Area,它包含以下一些信息

The persistent and runtime areas for open cursors

State information for packages, in particular package variables

Java session state

The roles that are enabled

Any trace events that are enabled

The NLS parameters that are in effect

Any database links that are open

The session's mandatory access control (MAC) label for Trusted Oracle

和PGA一样,它也分为fixed,variable两个部分,同样通过freelist和bucket分配和管理内存。

CGA:

Call Global Area,跟PGA不一样,CGA只是短暂存在的,它只存在于每一次调用周期,当

Parse an SQL statement

Execute an SQL statement

Fetch the outputs of a SELECT statement

的时候它会被使用到

在分析语句的时候产生的递规调用将会使用到CGA,包括用于检查语义,生成执行计划,PL/SQL中的递规调用也会用到它,DML的触发器递规

调用同样会需要它。Java Call Memory也是在CGA中,这也是ORACLE内存管理中唯一一个用到垃圾收集(garbage collection)的内存区域。

关于PGA,UGA,CGA的详细解释请参考Steve Adamas的<<oracle8i internal services for waits, latches, locks

sort_area_size:

排序空间的最大限制,在完成排序阶段后,oracle将释放内存并保留sort_area_retained_size用于fetch阶段,当最后一条记录被fetch回客户端后,oracle将会释放sort_area_retained_size。

sort_area_retained_size:

在UGA中分配的排序空间,当oracle发生排序时,先会从UGA中分配内存直到达到sort_area_retained_size的限制,然后会继续在PGA中分配内存一直到sort_area_size限制,如上面所说的,sort_area_retained_size将会在fetch阶段被保留,在fetch完成后释放给OS或PGA(区别在于是否UGA是PGA的subheap)

在9iR2版本以前,UGA,CGA一直是PGA的subheap,当它们被释放后将会释放给PGA而不是释放给OS,这是由于PGA的内存分配是通过malloc,brk来实现的,但是从9iR2版本开始,我们有了选择,_use_realfree_heap参数给我们机会去改变PGA内存的分配方式,当_use_realfree_heap为true时,PGA的内存分配将会通过mmap来实现,这样当调用munmap的时候将不必将内存返回给进程而直接返回给OS.下面我们来验证一下

alter system set "_use_realfree_heap"=true;

ALTER SESSION SET EVENTS

'immediate trace name heapdump level 1';

HEAP DUMP heap name="pga heap"

desc=0xc6a6400

extent sz=0x206c alt=92 het=32767 rec=0 flg=2 opc=2

parent=(nil) owner=(nil) nex=(nil) xsz=0xfff8

EXTENT 0 addr=0xb72c0008

******************************************************

******************************************************

HEAP DUMP heap name="top call heap"

desc=0xc6a8c00

extent sz=0x206c alt=100 het=32767 rec=0 flg=2 opc=2

parent=(nil) owner=(nil) nex=(nil) xsz=0xfffc

EXTENT 0 addr=0xb72b0004

Chunk b72b000c sz=

32780

perm

"perm

"

alo=40

Chunk b72b8018 sz=

31672

free

"

"

Chunk b72bfbd0 sz=

1072

recreate

"callheap

"

latch=(nil)

ds

c6a8300 sz=

1072 ct=

1

Total heap size

=

65524

******************************************************

******************************************************

HEAP DUMP heap name="top uga heap"

desc=0xc6a8d20

extent sz=0xffdc alt=100 het=32767 rec=0 flg=3 opc=3

parent=(nil) owner=(nil) nex=(nil) xsz=0xfffc

EXTENT 0 addr=0xb72e0004

Chunk b72e000c sz=

65524

free

"

"

EXTENT 1 addr=0xb72d0004

Chunk b72d000c sz=

48

free

"

"

Chunk b72d003c sz=

65476

recreate

"session heap

"

latch=(nil)

ds b72c7628 sz=

65476 ct=

1

Total heap size

=

131048

当_use_realfree_heap为true时,pga,uga,cga为独立的heap

strace -p xxxx -o 1.txt

mmap2(0xb7271000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7271000

mmap2(0xb7281000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7281000

mmap2(0xb7291000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7291000

mmap2(NULL, 1048576, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE, 7, 0xf1) = 0xb7121000

mmap2(0xb7121000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7121000

mmap2(0xb7131000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7131000

mmap2(0xb7141000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7141000

mmap2(0xb7151000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7151000

mmap2(0xb7161000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 0) = 0xb7161000

同时可以看到内存分配是通过mmap来实现的

alter system set "_use_realfree_heap"=false;

ALTER SESSION SET EVENTS

'immediate trace name heapdump level 1';

HEAP DUMP heap name="pga heap"

desc=0xc6a6400

extent sz=0x206c alt=92 het=32767 rec=0 flg=3 opc=3

parent=(nil) owner=(nil) nex=(nil) xsz=0x206c

EXTENT 0 addr=0xc74a7b8

Chunk

c74a7c0 sz=

8292

free

"

"

EXTENT 1 addr=0xc748740

Chunk

c748748 sz=

4148

free

"

"

Chunk

c74977c sz=

4144

freeable

"session heap

"

ds=0xc73332c

当_use_realfree_heap为true时,uga,cga为pga的subheap

strace -p xxxx -o 2.txt

brk(0xc7fb000)

= 0xc7fb000

brk(0xc823000)

= 0xc823000

brk(0xc852000)

= 0xc852000

brk(0xc881000)

= 0xc881000

brk(0xc8b1000)

= 0xc8b1000

brk(0xc8e0000)

= 0xc8e0000

brk(0xc90f000)

= 0xc90f000

brk(0xc93f000)

= 0xc93f000

brk(0xc96e000)

= 0xc96e000

brk(0xc99d000)

= 0xc99d000

同时可以看到内存分配是通过brk来实现的

我们再来看一下在_use_realfree_heap不同设置下uga,pga的内存使用情况

_use_realfree_heap=true

SQL 10Gselect * from testsort order by 1,2,3;

398608 rows selected.

SQL 10G/

NAME

MEM

---------------------------------------------------------------- -----------------------------------------

session uga memory

1.8679962158203125M

session uga memory max

49.53220367431640625M

session pga memory

4.808185577392578125M

session pga memory max

62.308185577392578125M

SQL 10G/

NAME

MEM

---------------------------------------------------------------- -----------------------------------------

session uga memory

49.78192901611328125M

session uga memory max

49.78192901611328125M

session pga memory

52.808185577392578125M

session pga memory max

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有