读书笔记系列01-《收获、不止Oracle》

最近计划将看过的Oracle书籍依次系统的总结下读书笔记。

这本书是我个人觉得写的最有趣的Oracle书籍,也是我接触Oracle后第一本完全精读的Oracle中文书籍。全书主要讲述了Oracle的基本原理(物理体系结构、逻辑体系结构)、表设计、索引原理、多表连接等内容。该书最大特点是利用诙谐的课堂氛围以及将枯燥的技术与有趣多生活故事做类比,培养了读者正确学习和应用技术的意识,达成目标的前提下,尽可能的少做事才能更高效。今后学习一门技术,甚至是一个知识点,都要思考为什么要学它,它是解决什么问题的。这些道理应用广泛,不止局限于学习Oracle技术。

一、Oracle基本原理

1.1 Oracle物理体系

书中通过类比生活实例,小余一家,爸爸开服装店,妈妈在学校旁边开餐饮店,引出Oracle物理体系,趣味性十足。

1区:PGA、2区:Instance(SGA+后台进程)、3区:Database(各类文件)

通过语句执行过程体会Oracle体系结构:

查询语句(select)执行过程:在1区准备,完成用户连接信息的保存和权限保存,生成一个唯一的hash值,进入2区,首先是到共享池处理,此hash值没有,则需要检查语法语义权限解析生成执行计划,然后进入数据缓冲区查询,如果没有,则数据缓冲区从数据文件中查到并带回数据缓冲区,最终呈现给用户。

修改语句(update, insert, delete)执行过程:查询语句有的过程都有,在数据缓冲区找到要修改的块,修改之前生成前镜像(CR块),修改后提交,LGWR进程将log buffer条目写入redo logfile,而至于DBWR进程何时将修改数据写入磁盘,是不确定的。

undo的作用:事物回滚、一致性读(构造CR块)

redo的作用:对数据库所有操作进行记录,日志写优先原则,数据库快速提交,异常断电也不会数据丢失。

思考题:

1)修改语句(update, insert, delete),哪类语句产生的undo最多?哪类语句产生的redo最多?

参考答案:一般来讲,因为undo记录的是反向操作。

insert的反向操作是delete,undo只需要记录delete行的rowid即可,所以insert产生的undo最少;

delete的反向操作是insert,undo需要记录insert所有字段的值,所以delete产生的undo最多;

update介于二者之间。

注意:undo条目也是被redo记录的。

2)ORA-01555原因和解决方案?

参考答案:原因是Oracle查询要保证一致性读,而当查询语句执行时间较长,很可能后面要查询块的undo信息已经被覆盖,导致无法构造一致性读需要的cr块。oracle会抛出ORA-01555错误。

解决方案:

a. 优化该查询SQL,缩短其执行时间;

b. 增加undo_retention值,并且设置该undo表空间为guarantee(alter tablespace undotbs1 retention guarantee;)。

1.2 Oracle逻辑体系

书中通过类比生活实例,王财主的农场(database),出租给不同养殖户(tablespace),每个养殖户又各自养殖牛、羊、猪(segment)等。王财主心中以8平米为最小核算单元(block),谁的养殖空间不够向王财主申请空间(extent),不管空间多紧张,王财主特别有原则的留了3个农场:系统农场(系统表空间)、临时农场(临时表空间)、回滚农场(回滚表空间),给各个养殖户提供方便。通过这一系列简单易懂的小事情,引出Oracle逻辑体系,让人形象的了解oracle 表空间、段、区、块的概念。

可以建表插入数据,然后通过dba_extents, dba_segments, dba_tablespaces体会逻辑结构。

1.3 学习体系结构的意义

这也是全书的点睛之笔,凡事学完都探讨其意义。

如果只是单纯讲述体系结构,我之前学习的体系结构笔记实际上内容更加详尽:

  • Oracle体系结构总结

  • 1.3.1 本书强调的重点:学习物理体系有什么意义?

    通过一系列问题,诸如数据库内存调整场景

    通过一则速度从单车到飞船的简单优化案例,进一步体会了解物理体系结构的意义。

--需要优化的存储过程:
create or replace procedure proc1
as
begin
for i in 1 .. 100000
loop
execute immediate 'insert into t values ('||i||')';
commit;
end loop;
end;
/ --执行存储过程
drop table t purge;
create table t(x int);
alter system flush shared_pool;
set timing on
exec proc1; --查询解析
select sql_id, sql_text, parse_calls, executions from v$sql where sql_text like '%insert into t values%';

然后进一步从绑定变量、静态改写、批量提交、集合写法、直接路径、并行设置一步步最终体验优化到飞船速度。这里只将重要的优化步骤总结下,具体可以参考原书内容:

--优化手段:使用绑定变量 + 批量提交
create or replace procedure proc3
as
begin
for i in 1 .. 100000
loop
execute immediate 'insert into t values (:n)' using i;
end loop;
commit;
end;
/ --优化手段:集合写法 + 直接路径 + 并行设置 + nologging
create table t nologging parallel 16 as select rownum x from dual connect by level <= 1000000;

虽然是精心构造的测试用例,但是实际优化工作中实际上很多也是由上面的一个或多个技术手段来调整的。

  • 1.3.2 本书强调的重点:学习逻辑体系有什么意义?

    学习了逻辑体系结构,可以清楚ORACLE的tablespace,segment,extent,block等概念。

    在对于已知要存放比较大的对象的表空间,提前合理规划其大小,避免频繁的自动扩展影响性能;

    在对于频繁更新的表,PCTFREE设置要考虑合理增大。对于更新极少甚至只读的表,PCTFREE可以设置为0.

    确认某表是否存在行迁移的方法:
@?/rdbms/admin/utlchain.sql
analyze table t list chained rows into chained_rows;
select count(*) from chained_rows where table_name = 'T';

查询有记录就证明存在行迁移。

二、Oracle表设计

三、Oracle索引原理

四、Oracle多表连接

读书笔记系列01-《收获、不止Oracle》的更多相关文章

  1. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  2. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  3. 《Mastering Opencv ...读书笔记系列》车牌识别(II)

    http://blog.csdn.net/jinshengtao/article/details/17954427   <Mastering Opencv ...读书笔记系列>车牌识别(I ...

  4. 《Mastering Opencv ...读书笔记系列》车牌识别(I)

    http://blog.csdn.net/jinshengtao/article/details/17883075/  <Mastering Opencv ...读书笔记系列>车牌识别(I ...

  5. 《ASP.NET Core In Action》读书笔记系列,这是一个手把手的从零开始的教学系列目录

    最近打算系统学习一下asp.net  core ,苦于没有好的中文书藉,只好找来一本英文的 <ASP.NET Core In Action>学习.我和多数人一样,学习英文会明显慢于中文.希 ...

  6. 《Java 8实战》读书笔记系列——第三部分:高效Java 8编程(四):使用新的日期时间API

    https://www.lilu.org.cn/https://www.lilu.org.cn/ 第十二章:新的日期时间API 在Java 8之前,我们常用的日期时间API是java.util.Dat ...

  7. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

  8. Python--网络编程学习笔记系列01 附实战:udp聊天器

    Python--网络编程学习系列笔记01 网络编程基本目标: 不同的电脑上的软件能够实现数据传输 网络编程基础知识: IP地址: 用来在网络中标记一台电脑  网络号+主机号(按网络号和主机号占位分类A ...

  9. unix network programming(3rd)Vol.1 [第1章]《读书笔记系列》

    文章最开头介绍了 获取时间的C/S 模型的代码, 还用了实现了IPV6的版本 unix 介绍了errno值,以及在多进程/多线程中的问题 多线程中不用全局errno,而是用返回值 处理error 详细 ...

随机推荐

  1. CSS基础布局--居中对齐,左侧定宽右侧自适应

    CSS页面布局是web前端开发的最基本的技能,本文将介绍一些常见的布局方法,涉及到盒子布局,column布局,flex布局等内容.本文中,你可以看到一些水平垂直居中的方法,左侧固定宽度,右侧自适应的一 ...

  2. python selenium2示例 - 生成 HTMLTestRunner 测试报告

    前言 在python selenium2自动化测试过程中,一个合适的报告是必须的,而HTMLTestRunner模块为我们提供了一个很好的报告生成功能. 什么是HTMLTestRunner HTMLT ...

  3. c++设计成员变量可动态调整的动态类结构

    本文主要介绍一下如何使用c++设计成员变量可动态调整的抽象动态类结构.首先介绍一下项目中以前使用的一种类结构:静态类结构 1.静态类结构 很多时候,在项目开发中设计类结构时,我们往往有一种简单.直接的 ...

  4. day001-html知识点总结(二)不常见但很重要的元素汇总

    一..vertical-align:设置垂直对齐方式,主要用于: 1.单元格内容的垂直对齐 2.对于行内块级元素,如<img>,设置行内元素的基线相对于该行内块级元素的所在行的基线对齐,例 ...

  5. Visual Studio中的TabControl控件的用法

    今天遇到了一个自己没遇到过的控件TabControl控件,所以找了点关于它的资料 TabControl属性 DisplayRect:只定该控件客户区的一个矩形  HotTrack:设置当鼠标经过页标签 ...

  6. Xamarin XAML语言教程使用Xamarin Studio创建XAML(二)

    Xamarin XAML语言教程使用Xamarin Studio创建XAML(二) 使用Xamarin Studio创建XAML Xamarin Studio和Visual Studio创建XAML文 ...

  7. 对MySQL数据量日益增长产生的一点小想法

    最近一直在想一个问题 MySQL数据量日益庞大,目前单表总记录数有 300W+,导致sql语句执行的速度变慢,如果一直这样增长下去,总有一天会爆炸的.怎么办??怎么办?? 第一:想到的必然是 添加索引 ...

  8. NDK 线程同步

    使用场景 对底层代码进行 HOOK, 不可避免的要考虑多线程同步问题, 当然也可以写个类似 java 的线程本地变量来隔离内存空间. 死锁分析 恩, 道理其实大家都懂的, 毕竟大学就学了操作系统,理论 ...

  9. es6 module + webpack

    其实在之前本人就看了 es6 里面的一部分内容,当然是阮一峰大神的 ECMAScript 6 入门. 最近闲来无事又来看下,其中 Module 的语法 这章时候,用里面代码跑的时候,理所当然的报错 S ...

  10. Spark源码分析之分区器的作用

    最近因为手抖,在Spark中给自己挖了一个数据倾斜的坑.为了解决这个问题,顺便研究了下Spark分区器的原理,趁着周末加班总结一下~ 先说说数据倾斜 数据倾斜是指Spark中的RDD在计算的时候,每个 ...