- 浏览: 1099005 次
- 性别:
- 来自: 南京
博客专栏
-
Oracle管理和开发
浏览量:353158
最新评论
-
Simon.Ezer:
请问对于“如果非主键字段值发生改变,则不会同步过去”这种情况, ...
创建增量同步Oracle物化视图问题 -
dahai639:
挺好的,支持一下
Oracle的pipelined函数实现高性能大数据处理 -
zealotpz:
不错,原来是用户oracle 的所属组的问题
以sysdba身份登录oracle报ORA-1031权限不足错误之完美分析 -
mikixiyou:
zhangyuslam 写道如果担心全局索引失效,可以使用如下 ...
Oracle分区表的分区交互技术实现数据快速转移 -
sea0108:
...
Oracle sql loader使用速成
从物理角度上看Oracle shared pool ,它是由多个内存块组成。这里的内存块相当于数据文件中的数据块,是最小的分配单位。这个最小分配单位称为chunk ,它里面的内存字节是连续的。但每个chunk 的大小是不固定的。
shared pool 的内存分配由heap (堆)来实现。heap 的个数由隐含参数”_kghdsidx_count “ 来决定。
每个heap 下又有多个sub-heap ,他们之间的关系称为高级堆和副堆。他们的结构大致相同。
heap 由一个或多个extent 和heap header 组成,而extent 又由若干个chunk 和extent header 组成,而chunk 由chunk header 和chunk body 组成。
每个extent 的体积是若干个granule (有文档说是一个,但dump 出来看不只一个)。granule 是shared pool 逻辑角度上的组成单位。这个granule 是固定值,不同的SGA 下大小不同,如10g 中SGA_MAX_SIZE<=1024MB ,则granule 的值为4MB ;SGA_MAX_SIZE>1024MB ,则granule 的值为16MB 。可以通过v$sgainfo 去查证。
从视图 select ksmchcls, count (*) from x$ksmsp group by ksmchcls; 中可以看到shared pool 的每个chunk 的类型。
KSMCHCLS |
COUNT(*) |
free |
3299 |
freeabl |
13634 |
no acce |
17 |
perm |
43 |
R-free |
31 |
R-freea |
76 |
recr |
18519 |
free :这种类型的 chunk 不包含有效的对象,可以不受限制地被分配。
recr :意味着 recreatable ,这种类型的 chunk 里包含的对象可以在需要的时候被临时移走,并且在需要的时候重新创建。比如对于很多有关共享 SQL 语句的 chunk 就是 recreatable 的。
freeabl :这种类型的 chunk 包含的对象都是曾经被 session 使用过的,并且随后会被完全或部分释放。这种类型的 chunk 不能临时从内存移走,因为它们是在处理过程中间产生的,如果移走的话就无法被重建。
perm :意味着 permanent ,这种类型的 chunk 包含永久的对象,大型的 permanent 类型的 chunk 也可能含有可用空间,这部分可用空间可以在需要的时候释放回 shared pool 里。
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1667933 )
使用”heapdump at level 2” 将shared pool 空间dump 出来,可以看到heap 的组成。
使用的SQL 如下:
alter session set events 'immediate trace name heapdump level 2';
dump 出来的结果如下:
****************************************************** HEAP DUMP heap name="sga heap" desc=0x2000002c extent sz=0x32c8 alt=108 het=32767 rec=9 flg=-126 opc=0 parent=(nil) owner=(nil) nex=(nil) xsz=0x0 ****************************************************** HEAP DUMP heap name="sga heap(1,1)" desc=0x2001b598 extent sz=0xfc4 alt=108 het=32767 rec=9 flg=-126 opc=0 parent=(nil) owner=(nil) nex=(nil) xsz=0x1000000 EXTENT 0 addr=0x9d000000 Chunk 9d000038 sz= 24 R-freeable "reserved stoppe" Chunk 9d000050 sz= 839576 R-free " " Chunk 9d0ccfe8 sz= 24 R-freeable "reserved stoppe" Chunk 9d0cd000 sz= 10274952 free " " Chunk 9da99888 sz= 796 recreate "KGL handles " latch=(nil) Chunk 9da99ba4 sz= 1036 freeable "parameter table" Chunk 9da99fb0 sz= 96 freeable "library cache " Chunk 9da9a010 sz= 228 recreate "KGL handles " latch=(nil) Chunk 9da9a0f4 sz= 96 freeable "library cache " Chunk 9da9a154 sz= 284 recreate "KQR PO " latch=0x9baaf310 Chunk 9da9a270 sz= 284 recreate "KQR PO " latch=0x9baaf310 Chunk 9da9a38c sz= 540 recreate "KQR PO " latch=0x9baaf568 Chunk 9da9a5a8 sz= 96 freeable "library cache " Chunk 9da9a608 sz= 540 recreate "KGL handles " latch=(nil) Chunk 9da9a824 sz= 540 recreate "KGL handles " latch=(nil) Chunk 9da9aa40 sz= 540 recreate "KGL handles " latch=(nil) Chunk 9da9ac5c sz= 540 recreate "KGL handles " latch=(nil) Chunk 9da9ae78 sz= 540 recreate "KGL handles " latch=(nil)
在chunk 的 header 中,有一个16 字节的固定区域,保存分配该heap 内存的原因或者说是注释,如”KGL handles” 、”KQR PO” 等等。
Oracle shared pool 中这些物理内存的分配、管理都是由一个叫做KGH Heap Manager 的C 程序来实现的。Heap Manager 预先分配所有的shared pool 所定义的内存空间。Heap Manager 还管理PGA 内存,但这个操作需要经常同操作系统交互来分配和回收内存。
从逻辑角度看Oracle shared pool ,它主要分为library cache 、dictionary cache 和control structure 三个部分。
Shared pool 的library cache 主要保存了已执行的SQL 语句和PL/SQL 对象,以及它们的执行计划等等。
采用hash table 对这些对象进行管理。例如一个SQL 在经过hash 算法分析后得到一个hash 值。hash table 下由若干个hash bucket ,hash bucket 下又有若干个library cache handle 组成。这些handle 的组成部分包括name,namespace,lock owners,lock waiters,pin owners,pin waiters,flags,heap 0(object) 。其中heap 0 保存的是指向object 的指针。因此这个heap 0 也称为object 。如下图所示:
根据library cache 的结构,延伸到heap 0 这个级别上。heap 0 的组成部分包括object type,object name,flags,tables,data blocks 。其中tables 和data blocks 又进一步延伸。
tables 的组成部分包括dependency table ,child table ,translation table ,authorization table ,access table ,r-o dependency table ,schema name table 。
data blocks 的组成部分包括object, source,diana,pcode,mcode,errors,sql context 。其中source 也称为heap 1 用于存储sql 文本,sql context 称为heap 6 用于存储SQL 执行计划。如下图所示:
library cache 中不同bucket 的library cache object handle 是有不同类型的。可以根据object handle 中的namespace 进行区别。不同object handle 之间可能采用双向链表的形式相互关联。
如namespace 为CRSR 的,有parent cursor 和child cursor ,分别在不同的bucket 中的object handle 里。
使用”library_cache level 11 “将library cache 的内存dump 出来。
使用的SQL 如下:
alter session set events 'immediate trace name library_cache level 11';
dump 出来的结果如下:
BUCKET 5944: LIBRARY OBJECT HANDLE: handle=1895899e8 mtx=0x189589b18(1) cdp=1 name=select* from sys.obj$ where obj#=:x hash=8cd0bd4dbb09ea7c3d007f1ce9b01738 timestamp=08-21-2012 10:02:35 namespace= CRSR flags=RON/KGHP/TIM/PN0/SML/KST/DBN/MTX/[120100d0] kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=6 hpc=0002 hlc=0002 lwt=0x189589a90[0x189589a90,0x189589a90] ltm=0x189589aa0[0x189589aa0,0x189589aa0] pwt=0x189589a58[0x189589a58,0x189589a58] ptm=0x189589a68[0x189589a68,0x189589a68] ref=0x189589ac0[0x189589ac0,0x189589ac0] lnd=0x189589ad8[0x189589ad8,0x189589ad8] LOCK OWNERS: lock user session count mode flags -------- -------- -------- ----- ---- ------------------------ 17f72e938 1852c9890 1852c9890 1 N [00] LIBRARY OBJECT: object=1786e6168 type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0 CHILDREN: size=16 child# table reference handle ------ -------- --------- -------- 0 17816fa10 17816f680 144768330 DATA BLOCKS: data# heap pointer status pins change whr ----- -------- -------- --------- ---- ------ --- 0 144773248 1786e6280 I/P/A/-/- 0 NONE 00 BUCKET 5944 total object count=1
LIBRARY OBJECT HANDLE: handle=144768330 mtx=0x144768460(0) cdp=0 namespace=CRSR flags=RON/KGHP/PN0/EXP/[10010100] kkkk-dddd-llll=0000-0001-0001 lock=N pin=0 latch#=6 hpc=fffe hlc=fffe lwt=0x1447683d8[0x1447683d8,0x1447683d8] ltm=0x1447683e8[0x1447683e8,0x1447683e8] pwt=0x1447683a0[0x1447683a0,0x1447683a0] ptm=0x1447683b0[0x1447683b0,0x1447683b0] ref=0x144768408[0x17816f680,0x17816f680] lnd=0x144768420[0x144768420,0x144768420] CHILD REFERENCES: reference latch flags --------- ----- ------------------- 17816f680 11 CHL[02] LOCK OWNERS: lock user session count mode flags -------- -------- -------- ----- ---- ------------------------ 17f72f1d8 1852c9890 1852c9890 1 N [00] LIBRARY OBJECT: object=178161a10 type=CRSR flags=EXS[0001] pflags=[0000] status=VALD load=0 DEPENDENCIES: count=1 size=16 dependency# table reference handle position flags ----------- -------- --------- -------- -------- ------------------- 0 17837dae8 17837d828 189addbb8 17 DEP[01] AUTHORIZATIONS: count=1 size=16 minimum entrysize=16 00000000 00000000 00020000 00000000 ACCESSES: count=1 size=16 dependency# types ----------- ----- 0 0009 SCHEMA: count=1 size=262144 00000000 DATA BLOCKS: data# heap pointer status pins change whr ----- -------- -------- --------- ---- ------ --- 0 144e55298 178161b28 I/P/A/-/- 0 NONE 00 6 1786cd5a0 16ece5dc0 I/-/A/-/E 0 NONE 00
评论
有个问题想问一下博主:KGL handles, KGLS heap中的 KGL是什么含义。是那三个单词的缩写。搜索了好久也没有弄明白。
Kernel Generic Library,我猜测是这三个单词的首写字母。
有个问题想问一下博主:KGL handles, KGLS heap中的 KGL是什么含义。是那三个单词的缩写。搜索了好久也没有弄明白。
发表评论
-
Oracle分区表的分区交互技术实现数据快速转移
2013-01-22 11:48 14810有一个需求,将某业务表的某个时间点之前的记录转移到它的历史 ... -
等待事件enq TX row lock contention分析
2013-01-17 17:16 33298在Oracle数据库性能报告AWRRPT分析时,发现top ... -
Oracle的UNDO表空间管理总结
2013-01-14 15:06 12992UNDO是Oracle中的一个很 ... -
Oracle在不同windows系统中的迁移
2013-01-09 15:41 3807在Windows操作系统环境下 ... -
Oracle 10.2.0.1在windows 2008上安装失败经历
2013-01-07 10:29 8706这两天遇到这个一个项目上的数据库迁移的问题。原来的环境是数据库 ... -
所有的物化视图刷新脚本
2012-12-28 13:59 0select 'execute dbms_mview.refr ... -
Oracle数据库的SQL性能问题分析
2012-12-27 15:31 5289在Oracle 10.2.0.4数据库中,有一个SQL执行缓慢 ... -
db block gets和consistent gets的分析
2012-12-26 18:09 0在Oracle的文档中有这样一段解释: db block g ... -
创建增量同步Oracle物化视图问题
2012-12-25 14:07 15316我们采用Oracle的物化视图增量刷新机制定时将数据库A上的某 ... -
查归档日志文件每小时生成量
2012-12-18 16:13 10794在O racle数据库中,通过v$archived_lo ... -
如何删掉临时表空间的文件
2012-12-18 15:40 0Unlike Oracle datafiles which m ... -
Oracle sql性能诊断暨event 10046和10053使用
2012-12-17 10:24 0早上em grid control监控显示数据库的负载增加,其 ... -
查LOB字段占用的空间大小
2012-12-13 16:00 4584查询Oracle表中LOB字段的占用空间大小。表中每一个LOB ... -
Oracle Data Guard的重做日志传输和应用状况监控
2012-12-04 14:05 4081这是一个用来监控Oracle Data Guard环境下从主库 ... -
Oracle sql loader使用速成
2012-11-30 14:14 4955Oracle SQL LOADER是Oracle的 ... -
Oracle 11g2的监听器配置
2012-11-29 14:34 4391Oracle的监听器服务注册 ... -
Deleting archivelog on physical standby with RMAN in Oracle 10g
2012-11-28 13:25 0Turns out to be quite easy ... -
to_char将number转成string的小技巧
2012-11-27 14:14 10639很多数据转换处理操作时,会遇到将0.007007040000转 ... -
to_date转成字符串时ORA-01843 not a valid month 问题分析
2012-11-26 16:38 29315(注,本文三度易稿) 在开发Oracle SQL或PL/SQL ... -
Data Guard 10g 的保护级别为RESYNCHRONIZATION问题
2012-11-25 11:01 1923Oracle的data guard创建完成 ...
相关推荐
在内存结构上,Sharedpool可以逻辑地分为Library Cache和Dictionary Cache两部分,它们之间有紧密的交互。当SQL语句进入Library Cache时,Oracle会查找Dictionary Cache中的相关数据字典信息。若找不到所需信息,...
ORACLE数据库的体系结构主要包括物理结构和逻辑结构。物理结构包括数据文件、redo log files、控制文件和参数文件等。数据文件用于存储实际数据,redo log files用于记录所有的数据库操作,控制文件用于记录数据库的...
Oracle数据库管理体系结构是指Oracle数据库的逻辑和物理结构,它包括数据库的存储结构、进程结构、内存结构等方面。 Oracle数据库管理体系结构是Oracle数据库的核心组件,负责管理和维护数据库的所有资源和数据。 ...
- **物理存储**:实际存在于磁盘上的文件,包括数据文件(存储数据)、控制文件(记录数据库的物理结构和状态)、重做日志文件(记录事务日志)以及参数文件(存储数据库配置信息)。 4. **DBA职责**: - 安装和...
Oracle数据库的体系结构是其高效运行的基础,涵盖了物理结构、逻辑结构、内存结构、数据库实例与进程以及数据字典等多个方面。本章主要探讨的是Oracle 9i数据库的物理结构,包括数据文件、日志文件、控制文件和配置...
Oracle数据库的体系结构是其高效稳定运行的基础,涵盖了物理结构、逻辑结构、内存结构和存储结构等多个方面。首先,我们来详细探讨这些概念。 **物理结构**是指Oracle数据库在操作系统层面的实际存在形式,主要包括...
Oracle数据库的物理结构由一系列的文件组成,包括: 1. 数据文件:存储数据库的数据,扩展名为.dbf,每个表空间可以包含多个数据文件,但一个数据文件只能属于一个表空间。 2. 控制文件:记录数据库的元数据,如...
- 内存结构:主要包括共享池(Shared Pool)、数据缓冲区(Buffer Cache)、日志缓冲区(Redo Buffer)等,这些区域用于存储数据和SQL语句等信息。 - 后台进程:如PMON(Process Monitor)、SMON(System Monitor...
5. **创建初始化参数文件**:在物理 Standby 数据库上创建初始化参数文件,并对其中的一些参数进行修改,如 LOG_ARCHIVE_DEST、PARALLEL_MAX_SERVERS、SHARED_POOL_SIZE 等。 ##### 2.4 关闭物理 Standby 数据库并...
物理standby数据库保持与主数据库的物理结构一致,实时接收并应用主数据库的redo信息。逻辑standby则先将redo信息转换为SQL语句再应用,适合处理复杂的数据转换和格式调整。 在论文中,作者详细探讨了如何在Linux...
4. 物理和逻辑备份与恢复:在Oracle 12c中,通过RMAN(Recovery Manager)进行数据的备份和恢复。 5. Data Guard:提供高可用性解决方案,允许创建一个或多个备用数据库,可进行自动故障转移和灾难恢复。 6. 性能...
首先,数据库的整体架构包括物理结构和逻辑结构两部分。物理结构指的是在磁盘上实际存储的数据文件、控制文件、重做日志文件等,这些文件是数据库的基础,包含了数据库的所有数据和元数据。逻辑结构则是指表、索引、...
- **共享池(Shared Pool)**:存储最近执行的SQL语句和数据字典数据,有助于减少重复加载和解析SQL语句的时间。 - **数据库高速缓冲区(Database Buffer Cache)**:用于缓存最近使用的数据,从而提高数据检索速度。 ...
- **Controlfile**: 记录数据库的物理结构的关键信息。 - **Redolog Files**: 用于记录事务操作的日志文件,对于数据库的恢复至关重要。 - **Instance**: 实例是一个数据库在内存中的表现形式,它由系统全局区...
1. **共享池(Shared Pool)**:这是SGA中最重要的部分,用于存储解析后的SQL语句和PL/SQL代码。当SQL语句首次执行时,Oracle会对其进行解析并将其结果保存在共享池的Library Cache中。之后再次执行相同SQL时,Oracle...
在讲解Oracle 10g数据库结构时,我们重点关注四个关键部分:物理存储结构、逻辑存储结构、内存结构和数据库实例与进程。 2.1 物理存储结构 Oracle数据库的物理存储主要涉及数据文件(Data Files)、控制文件...
Oracle数据库管理员(DBA)学习笔记详细记录了Oracle数据库中SQL语句执行的过程,包括用户连接、服务器进程分配、PGA空间、SQL解析、执行计划缓存、shared pool、buffer cache、逻辑IO和物理IO、重做日志等关键知识...
本文将深入探讨Oracle数据库的启动与关闭、内存体系结构、数据库的物理结构以及与备份和恢复相关的数据库文件。 首先,数据库的启动与关闭涉及多个阶段。在未加载(nomount)状态下,Oracle实例仅仅启动,读取参数...