Oracle 数据库体系结构介绍 Jametong@ dba 童家旺
主题列表 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><l...
如何构建客户端连接 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><...
Oracle 如何执行 Select 语句 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </l...
优化—降低提交到 Oracle 的 SQL 数 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 <...
优化—正式解析前 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><u...
优化 - 语义检查阶段 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul...
优化 - 生成执行计划阶段 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><...
优化 - 提取阶段 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><...
Oracle 如何执行 DML 语句 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li><...
执行 DML 的基本步骤 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><u...
LGWR Flush 的相关条件 <ul><li>When the Redo log buffer is 1/3 filled.  </li></ul><ul><li>1MB Data in the log buffer </li></ul><...
DBWR  写数据文件的相关条件 <ul><li>The Number of dirty buffers reaches to a threshold value.  </li></ul><ul><li>When a process scans...
CKPT  的分类 <ul><li>Full Checkpoint </li></ul><ul><li>Thread Checkpoint </li></ul><ul><li>File Checkpoint </li></ul><ul><li>...
Full Checkpoint <ul><li>Writes block images to the database for all dirty buffers from all instances </li></ul><ul><li>Sta...
Incremental Checkpoint <ul><li>Writes the contents of some dirty buffers to the </li></ul><ul><li>database from CKPT-Q </l...
其他 checkpoint 类型介绍 <ul><li>File Checkpoint </li></ul><ul><ul><li>Alter tablespace XXX offline </li></ul></ul><ul><ul><li>A...
Smon Jobs <ul><li>在 Instance Recovery 的时候 </li></ul><ul><li>回滚任何未回滚的事务 </li></ul><ul><li>释放任何未释放的锁 </li></ul><ul><li>在字典管理...
Pmon Jobs <ul><li>Rolling back the disconnected user process's transactions.  </li></ul><ul><li>Releasing any locks those ...
Upcoming SlideShare
Loading in …5
×

Oracle数据库体系结构简介.ppt

10,187 views

Published on

  • Be the first to comment

Oracle数据库体系结构简介.ppt

  1. 1. Oracle 数据库体系结构介绍 Jametong@ dba 童家旺
  2. 2. 主题列表 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul>
  3. 3. 如何构建客户端连接 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul>
  4. 4. Oracle 如何执行 Select 语句 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul><ul><li>客户端提交 SQL </li></ul><ul><li>SQL 解析 </li></ul><ul><ul><li>验证 SQL 语句的语法 </li></ul></ul><ul><ul><li>通过数据字典验证表与字段的定义 </li></ul></ul><ul><ul><li>取得相应对象的锁 , 确保解析过程 中对象不会发生变更 </li></ul></ul><ul><ul><li>检查相应对象的访问权限 </li></ul></ul><ul><ul><li>决定最佳的执行计划 </li></ul></ul><ul><ul><li>将其保存到 SQL 共享池 </li></ul></ul><ul><li>SQL 执行 </li></ul><ul><li>数据提取 </li></ul>
  5. 5. 优化—降低提交到 Oracle 的 SQL 数 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul><ul><li>客户端提交 SQL </li></ul><ul><li>使用 Oracle 11g 引入的 Client Result Cache 来提高其性能 </li></ul><ul><li>使用 MemCached 来缓存结果集 ( 推荐 ) </li></ul>
  6. 6. 优化—正式解析前 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul><ul><li>SQL 解析 </li></ul><ul><ul><li>验证 SQL 语句的语法 </li></ul></ul><ul><li>通过使用客户端的 Statement Cache 来缓存解析后的游标 </li></ul><ul><li>通过使用绑定变量来降低解析次数 </li></ul><ul><li>通过使用 Oracle 内部 Session_cached_cursors 来缓存客户端的游标 </li></ul>
  7. 7. 优化 - 语义检查阶段 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul><ul><ul><li>通过数据字典验证表与字段的定义 </li></ul></ul><ul><ul><li>取得相应对象的锁 , 确保解析过程 中对象不会发生变更 </li></ul></ul><ul><ul><li>检查相应对象的访问权限 </li></ul></ul><ul><li>使用 Dictionary Cache 来缓存这部分信息 , 以提高查询的效率 </li></ul>
  8. 8. 优化 - 生成执行计划阶段 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul><ul><ul><li>决定最佳的执行计划 </li></ul></ul><ul><li>使用 Dictionary Cache 来缓存对象统计信息 , 以提高查询的效率 </li></ul><ul><li>通过使用绑定变量来降低解析次数 </li></ul><ul><li>缓存解析后的执行计划 </li></ul><ul><li>使用 SQL Profiles/SPM/Hint 来指定如何生成执行计划 </li></ul>
  9. 9. 优化 - 提取阶段 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul><ul><li>数据提取 </li></ul><ul><li>由 Server Process 读取数据块进入 Buffer Cache. </li></ul><ul><li>再将符合条件的记录返回给客户端程序 </li></ul>
  10. 10. Oracle 如何执行 DML 语句 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul>
  11. 11. 执行 DML 的基本步骤 <ul><li>程序如何连接 Oracle </li></ul><ul><ul><li>基本连接结构图 </li></ul></ul><ul><li>Oracle 如何执行 Select 语句 </li></ul><ul><ul><li>客户端提交 SQL </li></ul></ul><ul><ul><li>解析 </li></ul></ul><ul><ul><ul><li>语法检查 </li></ul></ul></ul><ul><ul><ul><li>语义检查 </li></ul></ul></ul><ul><ul><ul><li>生成执行计划 </li></ul></ul></ul><ul><ul><li>执行 </li></ul></ul><ul><ul><li>提取 </li></ul></ul><ul><li>Oracle 如何执行 DML 语句 </li></ul><ul><ul><li>分配事务槽 </li></ul></ul><ul><ul><li>更新数据 </li></ul></ul><ul><ul><ul><li>更新 Undo </li></ul></ul></ul><ul><ul><ul><li>更新数据块 </li></ul></ul></ul><ul><ul><ul><li>写日志 </li></ul></ul></ul><ul><ul><ul><li>写数据块 </li></ul></ul></ul><ul><li>先按照基本的 SQL 执行步骤执行 </li></ul><ul><li>事务开始 , 分配事务槽 </li></ul><ul><li>更新数据 </li></ul><ul><ul><li>生成 Undo 块的 Redo 信息 </li></ul></ul><ul><ul><li>更新 Undo 数据块 </li></ul></ul><ul><ul><li>生成数据块的 Undo 信息 </li></ul></ul><ul><ul><li>更新数据块 </li></ul></ul><ul><li>在满足 LGWR 相关条件的情况下 Flush Redo Buffer </li></ul>
  12. 12. LGWR Flush 的相关条件 <ul><li>When the Redo log buffer is 1/3 filled. </li></ul><ul><li>1MB Data in the log buffer </li></ul><ul><li>When the timeout occurs (for every 3 seconds) </li></ul><ul><li>Before the DBWR writes the dirty blocks to the database files (DBFs). </li></ul><ul><li>When a transaction commits. </li></ul><ul><li>Checkpoint </li></ul>
  13. 13. DBWR 写数据文件的相关条件 <ul><li>The Number of dirty buffers reaches to a threshold value. </li></ul><ul><li>When a process scans a specified number of blocks when scanning for the free buffers and can't find any. </li></ul><ul><li>When timeout occurs (for every 3 seconds). </li></ul><ul><li>When a checkpoint occurs. </li></ul>
  14. 14. CKPT 的分类 <ul><li>Full Checkpoint </li></ul><ul><li>Thread Checkpoint </li></ul><ul><li>File Checkpoint </li></ul><ul><li>Object checkpoint </li></ul><ul><li>Parallel Query Checkpoint </li></ul><ul><li>Incremental Checkpoint </li></ul><ul><li>Log Switch Checkpoint </li></ul>
  15. 15. Full Checkpoint <ul><li>Writes block images to the database for all dirty buffers from all instances </li></ul><ul><li>Statistics updated: </li></ul><ul><ul><li>DBWR checkpoints </li></ul></ul><ul><ul><li>DBWR checkpoint buffers written </li></ul></ul><ul><ul><li>DBWR thread checkpoint buffers written </li></ul></ul><ul><li>Caused by: </li></ul><ul><ul><li>Alter system checkpoint [global] </li></ul></ul><ul><ul><li>Alter database begin backup </li></ul></ul><ul><ul><li>Alter database close </li></ul></ul><ul><ul><li>Shutdown </li></ul></ul><ul><li>Controlfile and datafile headers are updated </li></ul><ul><ul><li>CHECKPOINT_CHANGE# </li></ul></ul>
  16. 16. Incremental Checkpoint <ul><li>Writes the contents of some dirty buffers to the </li></ul><ul><li>database from CKPT-Q </li></ul><ul><li>Block images written in SCN order </li></ul><ul><li>Checkpoint RBA updated in SGA </li></ul><ul><li>Statistics updated: </li></ul><ul><ul><li>DBWR checkpoint buffers written </li></ul></ul><ul><li>Controlfile is updated every 3 seconds by CKPT </li></ul><ul><ul><li>Checkpoint progress record </li></ul></ul>
  17. 17. 其他 checkpoint 类型介绍 <ul><li>File Checkpoint </li></ul><ul><ul><li>Alter tablespace XXX offline </li></ul></ul><ul><ul><li>Alter tablespace XXX begin backup </li></ul></ul><ul><ul><li>Alter tablespace XXX read only </li></ul></ul><ul><li>Parallel Query Checkpoint </li></ul><ul><ul><li>Parallel Query </li></ul></ul><ul><ul><li>Parallel Query component of PDML or PDDL </li></ul></ul><ul><li>Object “Checkpoint” </li></ul><ul><ul><li>Drop table XXX </li></ul></ul><ul><ul><li>Drop table XXX purge </li></ul></ul><ul><ul><li>Truncate table XXX </li></ul></ul><ul><ul><li>Drop index XXX </li></ul></ul>
  18. 18. Smon Jobs <ul><li>在 Instance Recovery 的时候 </li></ul><ul><li>回滚任何未回滚的事务 </li></ul><ul><li>释放任何未释放的锁 </li></ul><ul><li>在字典管理表空间的情况下 , 合并相邻的空闲空间 </li></ul><ul><li>释放系统内的临时对象 (ctas/create index/index rebuild/index rebuild online) </li></ul>
  19. 19. Pmon Jobs <ul><li>Rolling back the disconnected user process's transactions. </li></ul><ul><li>Releasing any locks those are acquired by the disconnected user process. </li></ul><ul><li>Freeing all the resources used by the disconnected user process </li></ul>

×