Oracle内存结构(之三),oracle内存结构
【深入解析--eygle】 学习笔记
1.2.3 PGA的管理:
sys@felix 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。
sys@felix 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>sys@felix SQL>select description,dest fromx$messages where description like 'SQL Memory%'; DESCRIPTION DEST -------------------------------------------------- ---------- SQL Memory Management Calculation CKPT 15:26:04 sys@felix SQL></strong>
sys@felix 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 sys@felix 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 sys@felix SQL>/
TO_NUMBER('BAF3CA0','XXXXXXXXXX')
---------------------------------
196033696
15:50:33 sys@felix 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地址信息及空间分配:
[oracle@felix ~]$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 数据库领域老大,看下面的
SQL Server只适合个人使用或小型企业,成本低,但为了学习我也不会选择它,缺点多多。
DB2 功能上紧次Oracle,担接触的人不多,应用面不如Oracle。
看了下面的你们就都会明白了,不懂的就应该知道以后如何选择使用的数据库了。
1.选择一个好的数据库是非常重要的。
2.如何选择一个好的数据库
开放性:
SQL Server
只能在windows 上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的。Windows9X系列产品是偏重于桌面应用,NT server只适合中小型企业。而且windows平台的可靠性,安全性和伸缩性是非常有限的。它不象unix那样久经考验,尤其是在处理大数据量的关键业务时.
Oracle
能在所有主流平台上运行(包括 windows)。完全支持所有的工业标准。采用完全开放策略。可以使客户选择最适合的解决方案。对开发商全力支持。
DB2
能在所有主流平台上运行(包括windows)。最适于海量数据。DB2在企业级的应用最为广泛,在全球的500家最大的企业中,几乎85%以上用DB2数据库服务器,而国内到97年约占5%.
可伸缩性,并行性
SQL server
DB2
并行实施和共存模型并不成熟。很难处理日益增多的用户数和数据卷。伸缩性有限。
Oracle
平行服务器通过使一组结点共享同一簇中的工作来扩展windownt的能力,提供高可用性和高伸缩性的簇的解决方案。
如果windowsNT不能满足需要, 用户可以把数据库移到UNIX中。
DB2
DB2具有很好的并行性。DB2把数据库管理扩充到了并行的、多节点的环境.
数据库分区是数据库的一部分,包含自己的数据、索引、配置文件、和事务日
志。数据库分区有时被称为节点或数据库节点
安全性
SQL server
没有获得任何安全证书。
Oracle Server
获得最高认证级别的ISO标准认证。
DB2
获得最高认证级别的ISO标准认证。
性能
SQL Server
多用户时性能不佳
Oracle
性能最高, 保持windowsNT下的TPC-D和TPC-C的世界记录。
DB2
适用于数据仓库和在线事物处理性能较高。
客户端支持及应用模式
SQL Server
C/S结构,只支持windows客户,可以用ADO,DAO,OLEDB,ODBC连接.
Oracle
多层次网络计算,支持多种工业标准,可以用ODBC,JDBC,OCI等网络客户连接
DB2
跨平台,多层结构,支持ODBC,JDBC等客户
操作简便
SQL Server
操作简单,但只有图形界面.
Oracle
较复杂, 同时提供GUI和命令行,在windowsNT和unix下操作相同
DB2
操作简单,同时提供GUI和命令行,在windowsNT和unix下操作相同
使用风险
SQL server
完全重写的代码,经历了长期的测试,不断延迟,许多功能需要时间来证明。并不十分兼容早期产品。使用需要冒一定风险。
Oracle
长时间的开发经验,完全向下兼容。得到广泛的应用。完全没有风险。
DB2
在巨型企业得到广泛的应用,向下兼容性好。风险小。
只能找这么多了!...余下全文>>
1.数据库高速缓冲(the data buffer cache),
2.重做日志缓冲(the redo log buffer)
3.共享池(the shared pool),包括库高速缓存(the Library cache)和数据字典缓存(the data dictionary cache)以及其它各方面的信息。
4,java池(java pool)
解释:
1.数据高速缓冲区(Data Buffer Cache)
在数据高速缓冲区中存放着Oracle系统最
近使用过的数据块(即用户的高速缓冲区),当把数据写入数据库时,它以数据块为单位进行读写,当数据高速缓冲区填满时,则系统自动去掉一些不常被用户访问
的数据。如果用户要查的数据不在数据高速缓冲区时,Oracle自动从磁盘中去读取。数据高速缓冲区包括三个类型的区:1) 脏的区(Dirty
Buffers):包含有已经改变过并需要写回数据文件的数据块。
2) 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle可以从数据文件读数据块该区。
3) 保留区(Pinned Buffers):此区包含有正在处理的或者明确保留用作将来用的区。
2.Redo Log Buffer Cache缓存对于数据块的所有修改。
主要用于恢复其中的每一项修改记录都被称为redo 条目。利用Redo条目的信息可以重做修改。
3. Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义。
它主要由两个内存结构构成:Library cache和Data dictionary cache
修改共享池的大小:ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;
Libray
Cache缓存最近被执行的SQL和PL/SQL的相关信息,即存放SQL语句的文本,分析后的代码及执行计划。实现常用语句的共享,使用LRU算法进行
管理,由以下两个结构构成:Shared SQL area、Shared PL/SQL area;
Data Dictionary
Cache缓存最近被使用的数据库定义,即存放有关表,列和其它对象定义及权限。它包括关于数据库文件、表、索引、列、用户、权限以及其它数据库对象的信
息。在语法分析阶段,Server
Process访问数据字典中的信息以解析对象名和对存取操作进行验证。数据字典信息缓存在内存中有助于缩短响应时间。
4.java pool
在数据库中运行Java代码时用到这部分内存。例如:编写Java存储过程在服务器内运行。需要注意的是,该内存与常见的Java编写的B/S系统并没关系。用JAVA语言代替PL/SQL语言在数据库中写存储过程才会用到这部分内存。
如果你还想细致的了解话,建议看看相关资料
wenku.baidu.com/...tml###
参考资料:百度文库