html网站建设实例代码,wordpress easy stmp,南昌专业网站制作公司,win10做网站服务器Oracle内存管理#xff08;之二#xff09; 【深入解析--eygle】 学习笔记 1.2.2 UGA和CGA UGA#xff08;用户全局区#xff09;由用户会话数据、游标状态和索引区组成。在共享server模式下#xff0c;一个共享服务进程被多个用户进程共享#xff0c;此时UGA是Shared Po… Oracle内存管理之二 【深入解析--eygle】 学习笔记 1.2.2 UGA和CGA UGA用户全局区由用户会话数据、游标状态和索引区组成。在共享server模式下一个共享服务进程被多个用户进程共享此时UGA是Shared Pool或Large Pool的一部分。而在专用server模式下UGA则是PGA的一部分。 不考虑Shared Server模式在Dedicated模式下PGA与UGA关系就如同Process和Session的关系PGA是服务于进程的内存结构包括进程信息而UGA是服务于会话的它包括的是会话的信息。UGA中包括例如以下信息 1打开游标的永久区和执行区。 2包的状态信息以及变量信息 3Java会话的状态信息 4启用角色信息、跟踪事件 5起作用的NLS參数。 6全部打开的database links 7会话訪问控制信息等 UGA也由两组区组成。固定UGA和可变UGA或者说UGA堆。固定UGA包括了大概70个原子变量、小的数据结构以及指向UGA堆的指针。 UGA中的内存分配能够通过内部表X$KSMUPX$KSMUP - [K]ernel [S]ervice[M]emory [U]GA Hea[P]查询得到。UGA堆包括了存储一些固定表X$表的永久内存依赖于特定參数的设置。如OPEN_CURSORSOPEN_LINKS和MAX_ENABLED_ROLES。 sysfelix SQLselect ADDR,KSMCHCOM,KSMCHPTR,KSMCHSIZ,KSMCHCLS,KSMCHTYP,KSMCHPAR from x$ksmup; ADDR KSMCHCOM KSMCHPTR KSMCHSIZ KSMCHCLS KSMCHTYP KSMCHPAR ------------------------------------------------ ---------------- ---------- -------------------------- -- 00007F528F1D6920dbgdInitEventGr 00007F528F23FFB0 80freeabl 0 00 00007F528F1D68C8 sessionlanguag 00007F528F23FD60 592freeabl 0 00 00007F528F1D6870 SessionNCHAR l 00007F528F23FB10 592freeabl 0 00 00007F528F1D6818 kdlw:UGAstate 00007F528F23FAC8 72freeabl 0 00 00007F528F1D67C0 kdlu:UGAstate 00007F528F23FAA0 40 freeabl 0 00 00007F528F1D6768kzsrcrdi 00007F528F23F960 320freeabl 0 00 00007F528F1D6710kzctxhugi1 00007F528F23E948 4120 freeabl 0 00 00007F528F1D66B8 PLS ccahp desc 00007F528F23E7D0 376freeabl 0 00 00007F528F1D6660 PLS ccahp desc 00007F528F23E658 376freeabl 0 00 00007F528F1D6608 PLS UGAhp 00007F528F23DE50 2056recr 409500007F528F23E7E8 00007F528F1D65B0 kgsc htsegs 00007F528F23DE30 32freeabl 0 00 00007F528F1D6558 kgsc htsegs 00007F528F23DE10 32freeabl 0 00 00007F528F1D6500 kgsc htsegs 00007F528F23DDF0 32freeabl 0 00 00007F528F1D64A8 kgsc htsegs 00007F528F23DDD0 32 freeabl 0 00 00007F528F1D6450 kgsc htsegs 00007F528F23DDB0 32freeabl 0 00 00007F528F1D63F8 kgsc htsegs 00007F528F23DD90 32freeabl 0 00 00007F528F1D63A0 kgsc htsegs 00007F528F23DD70 32freeabl 0 00 00007F528F1D6348 kgsc htsegs 00007F528F23DD50 32freeabl 0 00 00007F528F1D62F0 kgsc htsegs 00007F528F23DD30 32freeabl 0 00 00007F528F1D6298 kgsc htsegs 00007F528F23DD10 32freeabl 0 00 00007F528F1D6240 kgsc htsegs 00007F528F23DCF0 32 freeabl 0 00 00007F528F1D61E8 kgsc htsegs 00007F528F23DCD0 32freeabl 0 00 00007F528F1D6190 kgsc htsegs 00007F528F23DCB0 32freeabl 0 00 00007F528F1D6138 kgsc htsegs 00007F528F23DC90 32freeabl 0 00 00007F528F1D60E0 kgsc htsegs 00007F528F23DC70 32freeabl 0 00 从Oracle9iR2開始有一系列新的隐含參数被引入用于控制自己主动的PGA管理这当中有一个关键的參数是_use_realfree_heap当设置这个參数为true时Oracle会为CGA、UGA单独分配堆。而不从PGA中分配。它的默认值为false而当设置了pga_aggregate_target后。它的值自己主动被改为true SQLSELECT x.ksppinm NAME, y.ksppstvl VALUE,x.ksppdesc describ FROMSYS.x$ksppi x, SYS.x$ksppcv y WHEREx.indx y.indx AND x.ksppinm LIKE %par%; Enter value for par: realfree old 3:WHERE x.indx y.indx AND x.ksppinm LIKE %par% new 3:WHERE x.indx y.indx AND x.ksppinm LIKE %realfree% NAME VALUE DESCRIB ----------------------------------------------------- ----------------------------------------- _realfree_heap_max_size 32768 minimum max total heap size, in Kbytes _realfree_heap_pagesize_hint 65536 hint for real-free page size in bytes _realfree_heap_mode 0 mode flags for real-free heap _use_realfree_heap TRUE use real-free based allocator for PGAmemory SQL _use_realfree_heap 是自己主动管理PGA技术的关键技术变化realfree代表着实时释放。Oracle9i之前手工管理的PGA的主要问题在于。UGA缺省的在PGA中分配当会话运行了诸如排序、HASH-JOIN等操作。耗用了大量PGA内存而当会话运行完毕之后。内存会释放给PGA而不是OS。在非常多时候这会导致过度的PGA内存使用在曾经版本号PGA内存分配和回收是通过malloc()以及brk()调用来完毕的。从Oracle9iR2開始。自己主动的PGA内存管理当_use_realfree_heap为true时PGA的内存分配将会通过mmap()调用来实现。这样当调用结束时将不必将内存返回给进程而直接返回给OS。从而实现了更好的PGA内存分配与使用。 通过V$PGASTAT视图能够查询PGA累计释放回OS的内存空间 SQL select name,value from v$pgastat wherename like %OS; NAME VALUE ---------------------------------------- ----------- PGA memory freed back to OS 175374336 下图是UGA的结构示意图 在PGA的示意图中还涉及了另外一块内存区域被称为CGACall Global Area-调用全局区。与其它的全局区不同。CGA的存在是瞬间的。仅仅存在于调用过程中。并且不管UGA存在于PGA还是SGACGA都是PGA的SubHeap。对 于 实 例 的 一 些 低 层 次 的 调 用Low-Level Call 须要CGA包含分析SQL语句、运行SQL语句以及获取查询结果都须要使用CGA。在SQL运行过程中的每一个递归调用须要一个独立的CGA在SQL的解析过程中查询数据字典信息、对SQL进行语法以及语义的解析、SQL的优化以及不同运行计划的评估都须要使用CGA。 当然调用并非仅仅通过CGA中的数据结构来工作实际上调用所须要的大部分的关键数据结构都来自于UGA如SQL AREA, PL/SQL AREASort Area都存放在UGA中由于这些结构在调用期间须要一直可用。CGA中仅仅包括了那些调用结束后能够被释放的数据。比如CGA中包括了Direct I/O BUFFER、递归调用信息、表达式评估的堆栈信息等。此外Java调用内存也在CGA中分配。 posted on 2017-04-19 11:17 mthoutai 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/mthoutai/p/6732420.html