程序员人生
网站导航
返回首页
php框架
web前端
程序人生
php开源
数据库
服务器
互联网
联系我们
Oracle核心技术 笔记(该书读得不仔细,需要找时间再细读~~)
栏目:
互联网
时间:2014-11-07 09:07:11
http://www.wfuyu.com/oracle/核心技术
跳转至: 导航、 搜索
目录
1
开始
2
redo和undo
3
事务与1致性
4
锁与闩
5
缓存和复制
6
写入和恢复
7
解析与优化
8
RAC及‘缺点’
9
附录A 转储与调试
开始
SGA/SCN
真正需要理解的仅仅3个进程:lgwr、dbwr、dbwN
redo和undo
http://www.wfuyu.com/oracle/ v6:改变向量(change vector)
两份存储:当前状态 + redo日志
改变数据的方法:4步关键步骤(这使得数据修改是可逆的)
创建改变操作的描写(redo change vector)
undo描写(插入到undo表空间的undo块中)
undo描写的描写(此undo的redo change vector)
改变数据项
实际的顺序变成3 1 2 4,2条redo被合并为1条日志记录,写入到redo缓冲区
事务中的第1次修改包括1些特殊步骤*
(我的小结)理论上说来,redo日志写成功即意味着事务已成功提交,这时候如果http://www.wfuyu.com/db/崩溃致使内存中确当前状态没有更新到http://www.wfuyu.com/db/存储中时,就能够通过redo再做1次以确保事务完成;另外1方面,由于1个嵌套事务的失败,致使已完成的http://www.wfuyu.com/db/更新需要回退,这时候就需要undo,而undo本身有可能因存储于易失性区域崩溃而丢失,这时候就需要把undo再通过undo的redo日志再做1遍以恢复数据到
前1个1致状态
从上面的描写可以看到,事务的实现依赖于数据修改是可逆的这1点,否则状态易失(如赋值操作、文件写操作)就不可能做到
1致性恢复
而1致性恢复依赖于全局1致性快照(即MVCC)的创建,为此需要事务号、时间戳这些特殊的底层属性来实现,这可以参考CLojure语言中相干概念
why?
undo记录禁止了其他用户查看我们正在改变的数据(中间临时状态)
其他用户可以通过undo得到记录的之前的1个版本(与他的事务视图相1
redo allocation latch:保护redo日志缓冲区(由于只有1个lgwr进行着串行的写操作)
所谓的latch其实就是Linux Kernel里类似spin_lock(自旋锁)的东西
p17 每一个人都做1点点“额外的”工作(协作的开消?),就意味着他们可以在不同的地方同时工作,而没必要常常在同1个地方竞争(contention)
redo simplicity
undo complexity
undo的存在能够让会话在不应当看到数据的最新版本(未事务提交!)时去访问更旧的版本(预会话的1致性符合合)
读1致性:有限的ITL entries,超越的作为undo记录保存(往回倒带~)
回滚:将产生新的redo!(请对比代码管理系统里的revert操作,revert实际上产生1个新的commit)
消除回滚本钱:全局临时表
事务与1致性
让提交尽量快*,让回滚渐渐来
*并且尽量频繁?细粒度的提交对VCS而言有助于连续集成,对DBMS呢?
事务与undo
undo段:段头、extent map、extent control header
事务表TRN TBL:,wrap#列?
事务表中条目,在v$transaction视图里称‘槽’(slot)
x$ktuxe
newing, & 闪回。。。
单个undo块可包括多个事务的undo记录
数据块访问与undo
本节包括的内容相当重要,但由于触及大量细节,只能等有时间的时间再细看了
提交SCN
提交清除
延迟块清除:通过“均摊”的方式来‘隐藏’工作量
事务表回滚
ORA⑴555 “快照太旧”
大对象(LOB)
只需关心索引的事务和读1致性处理,特例:ORA⑵2924
小结
1个ITL条目:xid: uba: SCN
锁与闩
锁和pin:FCFS;闩和Mutex(10g+,替换pin):随机抢占策略
闩:保护同享内存
可同享
本质上是1个内存位置和1个test-and-set的CPU原子操作的组合(#see Lock-Free数据结构)
相当于Linux内核里的spin_lock,spin_lock在单核CPU下不起作用
活动统计:v$latch_parent v$latch_children
gets、misses、spin_gets、sleeps、sleepN、immediate_gets、immmediate_misses、wait_time
等待唤醒机制(相当于Linux内核里的信号量?)
library cache latch
大部份闩锁在11g中取消了(只剩library cache load lock)
锁:保护对象(锁=排队?)
基础结构:x$ksqrs(v$resource,标记资源) x$ksqeq(设置锁模式)
v$lock
“锁定”某个对象:加入到等待队列某尾,直到等待队列和转换队列之间没有会话在你前面,这时候附加自己到具有者队列
死锁
TX/4等待?
锁模式
NL SS RS SX RX S SSX SRX X
保护锁的闩锁*
KGL锁(和pin)
锁和pin=〉11g后逐渐被Mutex替换
缓存和复制
内存管理
10g ASMM:db_cache_size/shared_pool_size ==> 固定大小的granule
多个数据块缓存
8种类型:db_cache_size db_keep_cache_size db_recycle_cache_size db_2k_cache_size(这甚么破命名) ...
更小的chunk
工作集
x$kcbwds
LRU/TCH算法
似乎比较重要,待有时间重新细读
REPL_AUX
--> REPL_MAIN?
查找数据
pin住缓存区
逻辑IO
更新
载入hash链
读1致性拷贝
物理IO
表扫描
写入和恢复
lgwr
redo sync writes和log file sync
10g+ 新的commit选项
重做日志浪费(redo wastage)
私有重做(private redo threads)
dbwr
缓冲区头部
检查点队列
增量检查点
写进程的交互
?相对文件号()/绝对文件号(afn:)
恢复
解析与优化
数据字典缓存:v$sgastat
8i+ cursor_sharing
parse活动和parse call?
库缓存
同享池
解析和优化(略)
executing、locking和pinning
RAC及‘缺点’
GRD
p178 虚拟IP和SCAN
p183 最少需要从4个实例开始
Master和Shadow
GCS和GES
缓存融会
附录A 转储与调试
------分隔线----------------------------
上一篇
table明明设置了固定值
下一篇
asp.net页面触发事件panel滚动条高度不变
------分隔线----------------------------
最新技术推荐
1
.cyou 非常适合 Z 世代企业家的三大理由
2
阿里、京东类ChatGPT产品正在内测 未来或将融入产品
3
公会积极复工复产,2023直播行业有哪些新机遇?
4
第三届OpenHarmony技术大会展区亮点纷呈,全方位洞见智慧互联未来
5
第三届OpenHarmony技术大会应用生态实践分论坛成功举办
6
第三届OpenHarmony技术大会OS安全分论坛圆满举办
7
第三届 OpenHarmony 技术大会:创新成果丰硕,共筑开源生态新未来