Oracle核心技术

跳转至: 导航搜索

文件夹

開始

  1. SGA/SCN
  2. 真正须要理解的只3个进程:lgwr、dbwr、dbwN

redo和undo

  1. Oracle v6:改变向量(change vector)
  2. 两份存储:当前状态 + redo日志
  3. 改变数据的方法:4步关键步骤(这使得数据改动是可逆的)
    1. 创建改变操作的描写叙述(redo change vector)
    2. undo描写叙述(插入到undo表空间的undo块中)
    3. undo描写叙述的描写叙述(此undo的redo change vector)
    4. 改变数据项
    • 实际的顺序变成3 1 2 4,2条redo被合并为一条日志记录,写入到redo缓冲区
    • 事务中的第一次改动包括一些特殊步骤*
    • (我的小结)理论上说来,redo日志写成功即意味着事务已经成功提交。这时假设数据库崩溃导致内存中的当前状态没有更新到数据库存储中时,就能够通过redo再做一次以确保事务完毕;另外一方面,因为一个嵌套事务的失败,导致已完毕的数据库更新须要回退。这时就须要undo,而undo本身有可能因存储于易失性区域崩溃而丢失。这时就须要把undo再通过undo的redo日志再做一遍以恢复数据到前一个一致状态
      从上面的描写叙述能够看到,事务的实现依赖于数据改动是可逆的这一点,否则状态易失(如赋值操作、文件写操作)就不可能做到一致性恢复
      而一致性恢复依赖于全局一致性快照(即MVCC)的创建。为此须要事务号、时间戳这些特殊的底层属性来实现。这能够參考CLojure语言中相关概念
  4. why?undo记录阻止了其它用户查看我们正在改变的数据(中间暂时状态)
    1. 其它用户能够通过undo得到记录的之前的一个版本号(与他的事务视图相一
  5. redo allocation latch:保护redo日志缓冲区(由于仅仅有一个lgwr进行着串行的写操作)
    1. 所谓的latch事实上就是Linux Kernel里类似spin_lock(自旋锁)的东西
  6. p17 每一个人都做一点点“额外的”工作(协作的开销?),就意味着他们能够在不同的地方同一时候工作,而不必常常在同一个地方竞争(contention)
  7. redo simplicity
  8. undo complexity
    1. undo的存在可以让会话在不应该看到数据的最新版本号(未事务提交。)时去訪问更旧的版本号(与会话的一致性相符合)
    2. 读一致性:有限的ITL entries,超出的作为undo记录保存(往回倒带~)
    3. 回滚:将产生新的redo。(请对比代码管理系统里的revert操作。revert实际上产生一个新的commit)
      1. 消除回滚成本:全局暂时表

事务与一致性

  1. 让提交尽可能快*,让回滚慢慢来

    1. *而且尽可能频繁?细粒度的提交对VCS而言有助于连续集成,对于DBMS呢?
  2. 事务与undo
    1. undo段:段头、extent map、extent control header
    2. 事务表TRN TBL:,wrap#列?
      1. 事务表中条目,在v$transaction视图里称‘槽’(slot)
    3. x$ktuxe
    4. newing, & 闪回。。。
    5. 单个undo块可包括多个事务的undo记录
  3. 数据块訪问与undo
    1. 本节包括的内容相当重要,但因为涉及大量细节,仅仅能等有时间的时间再细看了
  4. 提交SCN
    1. 提交清除
    2. 延迟块清除:通过“均摊”的方式来‘隐藏’工作量
    3. 事务表回滚
      1. ORA-1555 “快照太旧”
    4. 大对象(LOB)
      1. 仅仅需关心索引的事务和读一致性处理,特例:ORA-22924
  5. 小结
    1. 一个ITL条目:xid: uba: SCN

锁与闩

  1. 锁和pin:FCFS。闩和Mutex(10g+,替换pin):随机抢占策略
  2. 闩:保护共享内存
    1. 可共享
    2. 本质上是一个内存位置和一个test-and-set的CPU原子操作的组合(#see Lock-Free数据结构)
    3. 相当于Linux内核里的spin_lock。spin_lock在单核CPU下不起作用
    4. 活动统计:v$latch_parent v$latch_children
      1. gets、misses、spin_gets、sleeps、sleepN、immediate_gets、immmediate_misses、wait_time
    5. 等待唤醒机制(相当于Linux内核里的信号量?)
    6. library cache latch
      1. 大部分闩锁在11g中取消了(仅仅剩library cache load lock)
  3. 锁:保护对象(锁=排队?)
    1. 基础结构:x$ksqrs(v$resource,标记资源) x$ksqeq(设置锁模式)
    2. v$lock
      1. “锁定”某个对象:增加到等待队列某尾。直到等待队列和转换队列之间没有会话在你前面。这时附加自己到拥有者队列
    3. 死锁
      1. TX/4等待?
    4. 锁模式
      1. NL SS RS SX RX S SSX SRX X
    5. 保护锁的闩锁*
    6. KGL锁(和pin)
    7. 锁和pin=〉11g后逐步被Mutex替代

缓存和复制

  1. 内存管理

    1. 10g ASMM:db_cache_size/shared_pool_size ==> 固定大小的granule
  2. 多个数据块缓存
    1. 8种类型:db_cache_size db_keep_cache_size db_recycle_cache_size db_2k_cache_size(这什么破命名) ...
    2. 更小的chunk
  3. 工作集
    1. x$kcbwds
  4. LRU/TCH算法
    1. 似乎比較重要,待有时间又一次细读
  5. REPL_AUX
    1. --> REPL_MAIN?
  6. 查找数据
    1. pin住缓存区
    2. 逻辑IO
    3. 更新
    4. 加载hash链
    5. 读一致性拷贝
    6. 物理IO
    7. 表扫描

写入和恢复

  1. lgwr

    1. redo sync writes和log file sync
    2. 10g+ 新的commit选项
    3. 重做日志浪费(redo wastage)
    4. 私有重做(private redo threads)
  2. dbwr
    1. 缓冲区头部
    2. 检查点队列
    3. 增量检查点
  3. 写进程的交互
    1. ?相对文件号()/绝对文件号(afn:)
  4. 恢复

解析与优化

  1. 数据字典缓存:v$sgastat
  2. 8i+ cursor_sharing
  3. parse活动和parse call?
  4. 库缓存
  5. 共享池
  6. 解析和优化(略)
  7. executing、locking和pinning

RAC及‘缺陷’

  1. GRD
  2. p178 虚拟IP和SCAN
  3. p183 至少须要从4个实例開始
  4. Master和Shadow
  5. GCS和GES
  6. 缓存融合

附录A 转储与调试

Oracle核心技术 笔记(该书读得不细致,须要找时间再细读~~)的更多相关文章

  1. python笔记(很乱)、打算抽个时间再好好整理

    最近刚开始学python.总结的可能不是很好 print:打印值 input:可以进行等候赋值.进行一个交互 python中 需要两个==才为判断 变量:数字.字母.下划线组成 类型:int整数.st ...

  2. oracle undo 复杂度--oracle核心技术读书笔记四

    一. 概述 undo 保存的是旧数据.比方,你改动了一条记录将A列abc改动为def,那么undo里面保存的就是abc.目的有两个:1. 假设你的事务没有提交,可是已经将A列改动,那么别人读取这条数据 ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. 新炬学院OCM讲师《Oracle核心技术》译作面世

    对于数据库爱好者来讲,Oracle是最值得研究的数据库.学习Oracle数据库时,一本好书的引导和启发是非常必要的,毫无疑问,<Oracle核心技术>就是这样一本好书. <Oracl ...

  5. ORACLE存储过程笔记3

    ORACLE存储过程笔记3 流程控制 1.条件   if expression thenpl/sql or sqlend if;   if expression thenpl/sql or sqlel ...

  6. ORACLE存储过程笔记2

    ORACLE存储过程笔记2 运算符和表达式     关系运算 =等于<>,!=不等于<小于>大于<=小于等于>=大于等于       一般运算   +加-减*乘/除 ...

  7. ORACLE存储过程笔记1

    ORACLE存储过程笔记1 一.基本语法(以及与informix的比较)   create [or replace] procedure procedure_name (varible {IN|OUT ...

  8. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  9. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

随机推荐

  1. 请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。

    题解:观察测试样例,会发现每个子集的选择规律与二进制((2^n) - 1)到 1 的顺序生成的规律是一致的,样例中n=3,2^n-1=7,用二进制表示为111,其中每一位的1表示数组中的三个数都选择. ...

  2. 图论trainning-part-1 G. Stockbroker Grapevine

    G. Stockbroker Grapevine Time Limit: 1000ms Memory Limit: 10000KB 64-bit integer IO format: %lld     ...

  3. 性能测试之五--webservices接口测试

    下面我们进行webservices接口的讲解,包括脚本生成,参数化和关联. 以天气预报的接口为例,接口地址为: http://ws.webxml.com.cn/WebServices/WeatherW ...

  4. 【2018.9.26】K-D Tree详解

    网上对K-D-Tree的讲解不尽清晰,我学了很久都不会写,这里新开一文做一些讲解. 1.K-D-Tree是什么? K-DTree 即 K-Dimensional-Tree,常用来作空间划分及近邻搜索, ...

  5. 【2018.8.10】四连测day4 题解

    T1:给出一棵 $n$ 个节点的无根树,其中 $m$ 个节点是特殊节点,求对于任意 $i ∈ [0, m]$,包含 $i$ 个特殊节点的联通块个数$\mod 998244353$. $1<=n, ...

  6. Lucene 6.5.0 入门Demo

    Lucene 6.5.0 要求jdk 1.8 1.目录结构: 2.数据库环境: private int id; private String name; private float price; pr ...

  7. Objective C语言中nil、Nil、NULL、NSNull的区别

    以下内容是基于搜集整理的网上资料,供参考. nil:指向Objective C语言中对象的空指针,其定义值为(id)0. Nil:指向Objective C语言中类(Class)的空指针,其定义值为( ...

  8. hdu - 1269 迷宫城堡 (强连通裸题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1269 判断一个图是不是强连通,缩点之后判断顶点数是不是为1即可. #include <iostream&g ...

  9. Docker如何部署Python项目

    Docker 部署Python项目 作者:白宁超 2019年5月24日09:09:00 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如 ...

  10. 邁向IT專家成功之路的三十則鐵律 鐵律一:IT人生存之道-柔

    老子在道德經裡頭曾提到:「天下之至柔,馳聘天下之至堅」,又說:「堅強者死之徒,柔弱者生之徒」.其實人在面對世間的萬事萬物都是一樣的,只是當我們學習將這個至理套用在IT的工作職場時,將可以讓我們在這條崎 ...