
ORACLE内核原理
oracle
执笔画情ora
数据库管理系统
展开
-
Oralce数据库管理-详细解析update语句的过程
执行UPDATE语句的过程: 用户进程执行一个update语句:UPDATE emp set sal=10 WHERE id=1234 用户进程和服务器进程建立连接,把该用户进程的信息存储到PGA的UGA中 语句经过PGA处理后传递给实例instance 实例instance中的共享池处理这条语句 库缓冲区去判断语句如何分析--软分析(快)或硬分析(慢) 根据cbo得到执...原创 2019-08-21 16:12:48 · 4172 阅读 · 0 评论 -
oracle数据库内核管理-数据块读取与写入
Oracle读取或修改数据块的流程:一.(读操作)非唯一索引方式,非索引根块和分支块对要访问的块地址做HASHHASH(FILE#,BLOCK#) = hash_value(HV)根据HV找到对应的HASH bucket以独占方式申请管辖此bucket的CBC latch搜索bucket中的HASH chain链表,比对chain上的buffer_header(BH),找到目标BH修改BH中的buffer pin锁为S(share)模式(之前为0,无锁)释放CBC l转载 2020-11-11 11:04:48 · 344 阅读 · 0 评论 -
ORACLE内核理解挂你-ITL槽
数据块作为ORACLE发出I/O的最小单位,结构由三部分组成。由上至下为:1.数据块头部; 2.可用空间; 3.数据;(数据时从下往上增长的)数据块头部:1.数据块所属segment类型(数据或者索引)2.数据块的地址;3.ITL(Insterested Transaction List)槽,即事务槽;4.行目录;每当一个事务要更新数据块里的数据时,必须先得到一个ITL槽,然后将当前事务ID,事务所用的undo数据块地址,SCN号,当前事务是否提交等信息写到ITL槽里。也就是...转载 2020-07-16 11:09:13 · 227 阅读 · 0 评论 -
ORACLE内核管理-检查点列队与实例恢复
1 检查点列队与实例恢复块被修改时会产生redo记录。 块在由不脏变脏时,会被链接到检查点列队。 检查点列队块的排序基本和redo记录保持一致。 DBWR每3s检查一次检查点列队,也就是脏块数,超过一定范围,会触发写脏块。 CKPT每3s会将检查点列队对应的LRBA记录到控制文件中。 如果发生数据库实例崩溃,宕机情况,恢复起点就是检查点列队对应的LRBA位置 oracle找到此LR...转载 2020-01-26 20:15:36 · 234 阅读 · 0 评论 -
oracle内核管理-修改buffer过程
为什么日志文件的写入性能影响buffer busy waits修改buffer过程如下:1 获取cbc。 2 修改独占buffer pin。 3 释放CBC。 4 生成redo和undo。 5 修改buffer中的内容。 6 申请cbc 7 释放独占buffer pin 8 释放cbc...原创 2020-01-25 22:13:58 · 250 阅读 · 0 评论 -
ORACLE内核管理-一致性读取测试
测试环境windos 12.2.0.1版本会话1 更新表T1全部记录会话2 进行select查询,产生大量的一致性读取。SQL> ALTER SYSTEM FLUSH BUFFER_CACHE;SQL> SELECT STATUS,COUNT(1) FROM V$BH GROUP BY STATUS;STATU COUNT(1)----- ----------x...原创 2020-01-25 18:52:04 · 195 阅读 · 0 评论 -
oracle内核原理-读取buffer cache(逻辑读)解析,SDU
1 搜索buffer过程如下:根据要访问的文件号,块号,计算hash值。 根据hash值,找到对应的bucket。 搜索(在CBC的保护下) bucket的链表,查找哪个 BH为目标BH. 找到对应的BH,开始修改buffer pin锁,完成后释放CBC。 在buffer pin锁保护下,读取BA。 按照BA访问buffer以上为oracle逻辑读过程,如果未找到,则需要发生物理读...原创 2020-01-22 15:28:28 · 526 阅读 · 0 评论 -
oracle内核管理-读不阻塞写过程解析V1
1 过程分析1 A进程需要读取5号文件1234号块。2 B进程需要修改5号文件1234号块。步骤1 :A进程在BH中成功设置buffer pin锁,注意,此时A进程的cbc latch已经释放,A进程在buffer pin锁的保护下访问buffer数据。步骤2 :B进程想修改buffer,它首先要获取cbc latch。步骤3 :B进程查看BH发现BH中的buffer pin锁...原创 2020-01-22 15:28:06 · 350 阅读 · 2 评论 -
oralce数据库管理-详细解析oracle数据库update整体执行过程
oracle-1条updata的故事客户端SQL Plus请求连接,监听接受客户端的TCP连接,并获取客户端发过来的TNS数据包。监听进程打开用于与子进程通信的管道,同时fork一个子进程,称为“监听子进程1”的子进程,然后监听进程一直等待,直到这个“监听子进程1”结束。监听子进程1 Fork出子进程2。完成上面一步,子进程1马上退出并结束子进程1。子进程2收集本进程所在的主机...转载 2020-01-16 10:39:30 · 1078 阅读 · 1 评论 -
oracle数据库文件管理-控制文件
1数据库控制文件中记录着启动和关闭使用数据库实例所需要的各种信息数据库名。数据库建立时间,数据文件名称、位置。联机和脱机状态,重做日志文件的名称和位置,表空间名称等信息。各种scn信息以及checkpoint信息。ckpt每3s将ckpt列表的lrba写进控制文件,备份集信息。归档日志信息。 1增量检查点更新控制文件scn,包括数据文件、数据库scn。 2全量检查点更...原创 2020-01-15 19:59:14 · 332 阅读 · 0 评论 -
oracle空间管理-区段管理信息
文章转自 (oracle内核技术揭秘)一书1 每个数据文件的前8个或者128个 local extent management管理区,即为数据文件头信息(包含检查点scn,数据文件大小,绝对文件号和相对文件号等元数据)。select dbms_rowid.rowid_relative_fno(rowid),dbms_rowid.rowid_block_number(rowid) from ...原创 2019-08-20 17:01:33 · 223 阅读 · 0 评论 -
oracle内核原理-索引范围扫描
1按照根,枝,叶顺序读取。2在oracle中根块永远在段头块的下一个块处,因此索引扫描不需要读取段头。3确定索引段头位置,+1即为根块位置。(根据file#和block进行hash运算得到hash值,定位bucket,检索hash链表)。4测试分析对于一个blevel为1的索引,进行分析。创建表T1,在object_id列创建索引,索引的blevel为1,只包含根块...原创 2020-01-15 01:11:44 · 526 阅读 · 0 评论 -
ORACLE内核管理-事物深度解析
事物深度解析事物深度解析一、部分概念及理论1、快速提交Oracle数据库事物信息会分布在:(1)undo段头块事务表。(2)数据块事物槽。(3)数据块中的数据行。每更新修改一条数据,都会在行头部写入事物信息。如果数据库事物提交,则需要更新各个角落的事物信息,造成提交缓慢。目前,oracle采用快速提交。 当一个事务涉及到要修改很多个数据块时,为了避免要在每个...转载 2020-01-13 16:52:06 · 346 阅读 · 0 评论 -
Oracle内核管理-事务IMU
Oracle传统的undo机制:在传统里面oracle对undo表空间和普通表空间是一视同仁的。都是在buffer cache里面分配内存区,都是用DBWR进程定时写到磁盘上。一个事务开始时,在一个相对空闲的undo段段头里面获得一个槽位,写上事务信息。1.段头可能不在内存里面,就需要通过IO把段头放在内存里去;2.接下来获得一个undo回滚块,可能undo回滚块不在内存里面,这是...转载 2020-01-13 16:50:04 · 185 阅读 · 0 评论 -
oracle内核原理-IMU1
深入解析Oracle IMU模式下的REDO格式1. 什么是IMU?IMU的主要作用是什么,也就是说为了解决什么问题?IMU--->In Memory Undo,10g新特性,数据库会在shared pool开辟独立的内存区域用于存储Undo信息,每个新事务都会分配一个IMU buffer(私有的),一个buffer里有很多node,一个node相当于一个block(回滚块)。IM...转载 2020-01-10 01:56:17 · 435 阅读 · 0 评论 -
oracle内核原理-ITL槽
一、ITL描述:ITL(Interested Transaction List)是Oracle数据块内部的一个组成部分,位于数据块头(block header),itl由xid,uba,flag,lck和scn/fsc组成,用来记录该块所有发生的事务,一个itl可以看作是一条事务记录。当然,如果这个事务已经提交,那么这个itl的位置就可以被反复使用了,因为itl类似记录,所以,有的时候也叫it...转载 2020-01-10 01:46:05 · 302 阅读 · 0 评论