Oracle内存结构(之三)

【深入解析--eygle】 学习笔记

1.2.3 PGA的管理:

[email protected] SQL>show parameter area_size

NAME                                 TYPE                   VALUE
------------------------------------ ----------------------------------------------------
bitmap_merge_area_size               integer                1048576
create_bitmap_area_size              integer                8388608
hash_area_size                       integer                131072
sort_area_size                       integer                65536
workarea_size_policy                 string                 AUTO

自动化SQL执行内存管理(Automated SQL Execution Memory Management),也称为自动PGA管理,使用这个新特性,Oracle可以在一个总体PGA使用限制下自动管理和调整SQL内存区,从而大大简化了DBA的工作,同时也?高了数据库的性能。

为实现自动的PGA管理,Oracle引入了几个新的初始化参数:

(1)PGA_AGGREGATE_TARGET 此参数用来指定所有session 总计可以使用最大PGA内存。这个参数可以被动态的更改,取值范围从10M  ~(4096G-1 )bytes。

(2)WORKAREA_SIZE_POLICY此参数用于开关PGA内存自动管理功能,该参数有两个选项:AUTO  和  MANUAL,当 设 置为AUTO时,数据库使用自动PGA管理功能,当设置为MANUAL时,则仍然使用之前手工管理的方式。

缺省的,WORKAREA_SIZE_POLICY参数被设置为AUTO。

[email protected] SQL>show parameterWORKAREA_SIZE_POLIC

NAME                                 TYPE                   VALUE
---------------------------------------------------------- --------
workarea_size_policy                 string                 AUTO

此外需要注意的是,在不同版本中,自动PGA管理的范畴不同:

(1)在Oracle9i中,PGA_AGGREGATE_TARGET参数仅对专用服务器模式下(DedicatedServer)的专属连接有效,但是对共享服务器(Shared Server)连接无效

(2)从Oracle10g开始PGA_AGGREGATE_TARGET对专用服务器连接和共享服务器连接同时生效。

1.2.4 参数的设置与内存分配

工作区性能期望实现如下目标:

workarea execution - optimal >= 90%

workarea execution - multipass = 0%

生产系统的PGA性能指标脚本:

SELECT NAME,
      VALUE,
       100 *
      (VALUE / DECODE((SELECT SUM(VALUE)
                         FROM v$sysstat
                        WHERE NAME LIKE'workarea executions%'),
                       0,
                       NULL,
                       (SELECT SUM(VALUE)
                          FROM v$sysstat
                         WHERE NAME LIKE'workarea executions%'))) pct
  FROMv$sysstat
 WHERE NAMELIKE 'workarea executions%';

<strong>[email protected] SQL>select description,dest fromx$messages where description like 'SQL Memory%';

DESCRIPTION                                        DEST
-------------------------------------------------- ----------
SQL Memory Management Calculation                  CKPT

15:26:04 [email protected] SQL></strong>
[email protected] SQL>select * from v$pgastat;

NAME                                          VALUE UNIT
---------------------------------------- ---------- ------------------------
aggregate PGA target parameter            146800640 bytes
aggregate PGA auto target                  22099968 bytes
global memory bound                        29360128 bytes
total PGA inuse                           122360832 bytes
total PGA allocated                       144107520 bytes
maximum PGA allocated                     163160064 bytes
total freeable PGA memory                  11141120 bytes
process count                                    32
max processes count                              36
PGA memory freed back to OS               374669312 bytes
total PGA used for auto workareas                 0 bytes
maximum PGA used for auto workareas         6313984 bytes
total PGA used for manual workareas               0 bytes
maximum PGA used for manual workareas             0 bytes
over allocation count                             0
bytes processed                           232915968 bytes
extra bytes read/written                          0 bytes
cache hit percentage                            100 percent
recompute count (total)                        6004

19 rows selected.

1.2.6 PGA调整建议

伴随自动PGA调整功能的引入,Oracle同时引入相应的动态性能视图用于优化建议,PGA的优化建议通过v$pga_target_advice  和  v$pga_target_advice_histogra提供。v$pga_target_advice视图通过对不同PGA设置进行评估,给出在不同设置下的PGA命中率和OverAlloc等信息。

15:32:23 [email protected] SQL>select PGA_TARGET_FOR_ESTIMATE/1024/1024 PGAMB, PGA_TARGET_FACTOR,
15:37:08   2  ESTD_PGA_CACHE_HIT_PERCENTAGE, ESTD_OVERALLOC_COUNT
15:37:08   3  from v$pga_target_advice;

     PGAMB PGA_TARGET_FACTOR ESTD_PGA_CACHE_HIT_PERCENTAGE ESTD_OVERALLOC_COUNT
---------- ----------------- ----------------------------- --------------------
      17.5              .125                            85                    4
        35               .25                            85                    4
        70                .5                            85                    4
       105               .75                            85                    4
       140                 1                           100                    0
       168               1.2                           100                    0
       196               1.4                           100                    0
       224               1.6                           100                    0
       252               1.8                           100                    0
       280                 2                           100                    0
       420                 3                           100                    0
       560                 4                           100                    0
       840                 6                           100                    0
      1120                 8                           100                    0

v$pga_target_advice_histogram 视图可以通过对不同工作区大小的采样评估?供统计信息

供分析使用。其中几个重要字段有:

(1)LOW_OPTIMAL_SIZE-Histogram评估区间内Optimal下限  (bytes)

(2)HIGH_OPTIMAL_SIZE-Histogram评估区间内Optimal上限  (bytes)

(3)ESTD_OPTIMAL_EXECUTIONS-Histogram评估区间内估计optimal执行次数

(4)ESTD_ONEPASS_EXECUTIONS-Histogram评估区间内估计onepass执行次数

(5)ESTD_MULTIPASSES_EXECUTIONS-Histogram评估区间内估计multipass执行次数

(6)ESTD_TOTAL_EXECUTIONS-Histogram评估区间内估计执行总次数

SELECT pga_target_factor factor,
       low_optimal_size / 1024 low,
       ROUND(high_optimal_size / 1024) high,
       estd_optimal_executions estd_opt,
       estd_onepass_executions estd_op,
       estd_multipasses_executions estd_mp,
       estd_total_executions estd_exec
  FROM v$pga_target_advice_histogram
 WHERE pga_target_factor = 0.25
   AND estd_total_executions > 0;
</pre><pre name="code" class="html"><img src="http://img.blog.csdn.net/20140727143007260?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGFuZmVsaXg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;"> heap name="pga heap"  desc=0xbaf3ca0   --注意这里</span></strong></span>
 extentsz=0x20c0 alt=216 het=32767 rec=0 flg=3 opc=2
 parent=(nil)owner=(nil) nex=(nil) xsz=0xfff0 heap=(nil)
 fl2=0x60,nex=(nil), dsxvers=1, dsxflg=0x0
 dsx firstext=0xf7fa7720
EXTENT 0 addr=0x7fadf7c72010
  Chunk     7fadf7c72020 sz=    65504   free      "               "
EXTENT 1 addr=0x7fadf7d00010
  Chunk     7fadf7d00020 sz=    28920   perm      "perm           "  alo=9384
  Chunk     7fadf7d07118 sz=     7656   free      "               "
  Chunk     7fadf7d08f00 sz=     4224   freeable  "diag pga       " ds=0x7fadf82157e0
  Chunk     7fadf7d09f80 sz=     4224   freeable  "diag pga       " ds=0x7fadf82157e0
/heap
  Chunk     7fadf7fd28d0 sz=     7608   perm      "perm           "  alo=7608
  Chunk     7fadf7fd4688 sz=       40   free      "               "
  Chunk     7fadf7fd46b0 sz=       80   freeable  "dbgdInitEventGr"
  Chunk     7fadf7fd4700 sz=      184   freeable  "sdbgrf: iosb   "
  Chunk     7fadf7fd47b8 sz=       80   freeable  "skgfzctx       "
  Chunk     7fadf7fd4808 sz=      376   freeable  "PLS cca hpdesc"
EXTENT 18 addr=0x7fadf7fcd860
  Chunk     7fadf7fcd870 sz=    20512   perm      "perm           "  alo=20512
EXTENT 19 addr=0x7fadf7fc9958
  Chunk     7fadf7fc9968 sz=    16072   perm      "perm           "  alo=16072
EXTENT 20 addr=0x7fadf7fc7868
  Chunk     7fadf7fc7878 sz=     3240   perm      "perm           "  alo=3240
  Chunk     7fadf7fc8520 sz=     3184   perm      "perm           "  alo=3184
  Chunk     7fadf7fc9190 sz=     1088   perm      "perm           "  alo=1088
  Chunk     7fadf7fc95d0 sz=      168   perm      "perm           "  alo=168
  Chunk     7fadf7fc9678 sz=       48   free      "               "
  Chunk     7fadf7fc96a8 sz=       72   freeable  "koh-kghu callh"
  Chunk     7fadf7fc96f0 sz=      568   freeable  "joxp heap      "
EXTENT 21 addr=0x7fadf7fc5778
  Chunk     7fadf7fc5788 sz=     4848   perm      "perm           "  alo=4848
  Chunk     7fadf7fc6a78 sz=      440   freeable  "krbabrPgaRespMs"
  Chunk     7fadf7fc6c30 sz=       56   freeable  "krbabrPgaReqCtx"
  Chunk     7fadf7fc6c68 sz=      424   freeable  "krbabrPgaReqMsg"
  Chunk     7fadf7fc6e10 sz=     2600   freeable  "kjztprq struct"
EXTENT 22 addr=0x7fadf7fc3688
  Chunk     7fadf7fc3698 sz=     7720   perm      "perm           "  alo=7720
  Chunk     7fadf7fc54c0 sz=      160   freeable  "regheapd_kdlwpg"
  Chunk     7fadf7fc5560 sz=       88   freeable  "KCFIS GCTX     "
  Chunk     7fadf7fc55b8 sz=      400   freeable  "krbabrPgaStbyRe"
EXTENT 23 addr=0x7fadf7fb5e28
  Chunk     7fadf7fb5e38 sz=    55328   perm      "perm           "  alo=55328
EXTENT 24 addr=0x7fadf7fb3d38
  Chunk     7fadf7fb3d48 sz=     4888   perm      "perm           "  alo=4888
  Chunk     7fadf7fb5060 sz=     2992   recreate  "KSFQ heap      " latch=(nil)

进一步的,可以将某个具体的数据存储结构转储出来(DS),如 以 上 的ds dcd00c0其空间使用的大小为  sz= 14036,首先对空间地址进行一下转换:

select to_number('baf3ca0','xxxxxxxxxx') from dual
15:50:33 [email protected] SQL>/

TO_NUMBER('BAF3CA0','XXXXXXXXXX')
---------------------------------
                        196033696

15:50:33 [email protected] SQL>

使用如下命令转储固定地址空间的内容:

alter session set events‘immediate trace name heapdump_addr level 1, addr n‘;

以上计算的地址空间可以通过如下命令转储:

SQL> ALTER SESSIONSET EVENTS ‘immediate trace name heapdump_addr level 1, addr 196033696‘;

Session altered.

获取转储文件的脚本:

SELECT a.VALUE || b.symbol || c.instance_name || '_ora_' || d.spid ||
       '.trc' trace_file
  FROM (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') a,
       (SELECT SUBSTR(VALUE, -6, 1) symbol
          FROM v$parameter
         WHERE NAME = 'user_dump_dest') b,
       (SELECT instance_name FROM v$instance) c,
       (SELECT spid
          FROM v$session s, v$process p, v$mystat m
         WHERE s.paddr = p.addr
           AND s.SID = m.SID
           AND m.statistic# = 0) d;

检查这个进程转储文件,可以发现如下Heap地址信息及空间分配:

[[email protected] ~]$grep heap  /u01/app/oracle/diag/rdbms/felix/felix/trace/felix_ora_6443.trc
<strong><span style="color:#ff0000;">HEAP DUMP heap name="pga heap"  desc=0xbaf3ca0</span></strong>
 parent=(nil) owner=(nil) nex=(nil) xsz=0xfff0 heap=(nil)
  Chunk     7fadf7fc96f0 sz=      568    freeable  "joxp heap      "
  Chunk     7fadf7fc54c0 sz=      160    freeable  "regheapd_kdlwpg"
  Chunk     7fadf7fb5060 sz=     2992    recreate  "KSFQ heap      "  latch=(nil)
  Chunk     7fadf7fb5c10 sz=      160    freeable  "KSFQ heap descr"
  Chunk     7fadf7fb0790 sz=      232    freeable  "iovecheapd_kdlw"
  Chunk     7fadf7fb0878 sz=      304    freeable  "bcheapd_kdlwpga"
  Chunk     7fadf7fb09a8 sz=      208    freeable  "sioheapd_kdlwpg"
  Chunk     7fadf7fb0ad8 sz=      160    freeable  "KSZ pga subheap"
Total heap size    =   499952
<strong><span style="color:#ff0000;">HEAP DUMP heap name="top call heap"  desc=0xbaf94e0</span></strong>
 parent=(nil) owner=(nil) nex=(nil) xsz=0xfff8 heap=(nil)
  Chunk     7fadf7ccb7d8 sz=     1032    recreate  "callheap       "  latch=(nil)
  Chunk     7fadf7cceb78 sz=     4224    freeable  "callheap       "  ds=0xbaf85c0
  Chunk     7fadf7ccfbf8 sz=     1032    recreate  "callheap       "  latch=(nil)
Total heap size    =   524096
<strong><span style="color:#ff0000;">HEAP DUMP heap name="top uga heap"  desc=0xbaf9700</span></strong>
 parent=(nil) owner=(nil) nex=(nil) xsz=0xfff8 heap=(nil)
  Chunk     7fadf7c62018 sz=    65512    freeable  "session heap   "  ds=0x7fadf7cd5be0
  Chunk     7fadf7d10018 sz=    65512    freeable  "session heap   "  ds=0x7fadf7cd5be0
  Chunk     7fadf7cf0018 sz=    65512    freeable  "session heap   "  ds=0x7fadf7cd5be0
  Chunk     7fadf7ce0068 sz=    65432    recreate  "session heap   "  latch=(nil)
Total heap size    =   262048
<strong><span style="color:#ff0000;">HEAP DUMP heap name="pga heap"  desc=0xbaf3ca0</span></strong>
 parent=(nil) owner=(nil) nex=(nil) xsz=0x1fff0 heap=(nil)
  Chunk     7fadf7fc96f0 sz=      568    freeable  "joxp heap      "
  Chunk     7fadf7fc54c0 sz=      160    freeable  "regheapd_kdlwpg"
  Chunk     7fadf7fb5060 sz=     2992    recreate  "KSFQ heap      "  latch=(nil)
  Chunk     7fadf7fb5c10 sz=      160    freeable  "KSFQ heap descr"
  Chunk     7fadf7fb0790 sz=      232    freeable  "iovecheapd_kdlw"
  Chunk     7fadf7fb0878 sz=      304    freeable  "bcheapd_kdlwpga"
  Chunk     7fadf7fb09a8 sz=      208    freeable  "sioheapd_kdlwpg"
  Chunk     7fadf7fb0ad8 sz=      160    freeable  "KSZ pga subheap"
Total heap size    =   827504

由上面红色字体可见,在自动管理模式下,PGA,CGA,UGA都是独立分配的。

Oracle内存结构(之三),布布扣,bubuko.com

时间: 2024-08-07 04:33:35

Oracle内存结构(之三)的相关文章

ORACLE内存结构简介

ORACLE数据库作为世界上一款功能强大的数据库管理软件,功能体系特别庞大.我们有必要对它的每一部分学习了解,然后才从全局的角度进行有效把握.我们会着重从理论基础体系角度再逐步到实战应用.实际上,如果没有掌握基础理论体系,而直接生搬硬套一些维护技术经验,那也只是空中楼阁罢了.而如果你想直接通过一两篇文章学到什么秘籍成为维护或是DB优化高手那也是不现实的.所以这些文适合静下心来真正想了解学习ORALCE体系的读者.方法论掌握好,起码头脑中的思路方向是正确的,至于术也就是水到渠成. 我们通常所说的O

oracle 内存结构详解

Oracle 内存结构 与 Oracle 实例关联的基本内存结构包括: 系统全局区 (SGA):由所有服务器和后台进程共享.SGA 中存储的数据示例包括高速缓存的数据块和共享 SQL 区域. 程序全局区 (PGA):各个服务器进程和后台进程专用,每个进程都有一个 PGA. SGA 是共享内存区,包含实例的数据和控制信息,由以下各项组成: 数据库缓冲区高速缓存:用于缓存从磁盘检索到的数据块 重做日志缓冲区:用于缓存重做信息,直到其可以写入磁盘为止 共享池:用于缓存可在用户间共享的各种结构 大型池:

oracle内存结构(一)

Oracle 内存结构 与Oracle 实例关联的基本内存结构包括: 系统全局区(SGA):由所有服务器进程和后台进程共享 程序全局区(PGA):由每个服务器和后台进程专用,每个进程都有一个PGA. 系统全局区(SGA) 是共享内存区,包含实例的数据和控制信息,由以下各项组成: 数据库缓冲区高速缓存(DB buffer cache):用于缓存从磁盘检索到的数据块 重做日志缓冲区(redo buffer):用于缓存重做信息,直到其可以写入磁盘为止 共享池(share pool):用于缓存可在用户间

oracle内存结构

一.内存结构 SGA(System Global Area):由所有服务进程和后台进程共享: PGA(Program Global Area):由每个服务进程.后台进程专有:每个进程都有一个PGA. 二.SGA 包含实例的数据和控制信息,包含如下内存结构: 1)Database buffer cache:缓存了从磁盘上检索的数据块. 2)Redo log buffer:缓存了写到磁盘之前的重做信息. 3)Shared pool:缓存了各用户间可共享的各种结构. 4)Large pool:一个可选

[精]Oracle 内存结构详解

内存结构 现代计算机中,CPU 对内存的访问速度要比从磁盘的速度快千倍,因此 Oracle 对于数据的访问 也尽量都在内存中完成,而不是直接修改硬盘上的数据.内存内容在合适的时候再同步到磁盘. Oracle 利用内存来克服磁盘 IO的束缚,在内存中进行活动越多,系统性能越好,反之,在磁盘上进 行的操作越多,系统性能越差.(原文地址:http://blog.sunansheng.com/2016/04/29/oracle-memory/) Oracle 是一个内存消耗大户,它消耗的内存可以分成两部

Oracle内存结构:SGA PGA UGA

内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构: 一. 系统全局区  (System Global Area, SGA): SGA是一组共享内存结构, 被所有的服务和后台进程所共享.当数据库实例启动时,系统全局区内存被自动分配.当数据库实例关闭时,SGA内存被回收. SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素. 查询SGA区的情况: SQL> show SGA T

2、Oracle内存结构

系统全局区(SGA),也叫共享全局区. 1.数据缓冲区(Data Buffer Cache): 用于存储从磁盘数据文件中读取的数据,供所有用户共享.用户修改数据后,修改后的数据先保存在数据库缓冲区中,最后由DBWn进程写入磁盘数据文件. 2.日志缓冲区(Redo Log Buffer Cache): 用于存储数据库的修改操作信息.当日志缓冲区中的日志数据达到一定限度时,由日志写入进程LGWR写入磁盘日志文件. 3.共享池(Shared Pool): 用于保存最近执行的SQL语句.PLSQL程序的

oracle 内存结构 share pool sql解析的过程

1.sql解析的过程 oracle首先将SQL文本转化为ASCII字符,然后根据hash函数计算其对应的hash值(hash_value).根据计算出的hash值到library cache中找到对应的bucket,然后比较bucket里是否存在该SQL语句. 如果不存在,获得shared pool latch,然后在shared pool中的可用chunk链表(也就是bucket)上找到一个可用的chunk,然后释放shared pool latch.在获得了chunk以后,这块chunk就可

oracle进程结构简介

我们经常说数据库实例,实例其实就是指的是数据库的内存结构和进程结构.我们安装数据库软件大量的是在安装其内存和进程组件结构.上篇节我们介绍了oracle内存结构,这节就介绍下oracle进程结构. 首先看下oracle进程的分类: 1)用户进程 是连接到Oracle DB 的应用程序或工具 2)数据库进程 服务器进程:连接到Oracle实例,在用户建立会话时启动 后台进程:在启动Oracle实例时启动 3) 守护程序/应用程序进程 网络监听程序 Gridinfrastructure 守护程序 从进