热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

oracle体系结构三部曲之进程结构

oracle体系结构三部曲之进程结构与oracle相关的进程可分:用户进程和oracle进程。oracle进程可分:服务器进程和后台进程。服务器进程可分:专用服务器进程和共享服务器进程。后台进程可分:DBWn,LGWR,CKPT等。...SyntaxHighlighter.all

oracle体系结构三部曲之进程结构
 
与oracle相关的进程可分:用户进程和oracle进程。oracle进程可分:服务器进程和后台进程。服务器进程可分:专用服务器进程和共享服务器进程。后台进程可分:DBWn,LGWR,CKPT等。
 
  和用户进程有关的概念是:连接和会话
  连接和会话是两个不同的概念。一条连接上可以建立0个,1个或多个会话,而且各个会话单独且独立的。一条连接即一个进程。
  比如:
  SQL> set autotrace on
  SQL> select sid from v$session where username=USER;
  www.2cto.com  
       SID
  ----------
       146
       158
       159
  以上这条连接上有三个会话。
  连接:用户进程到实例之间的一条物理路径。
  会话:实例中存在的一个逻辑实体。
  所以,物理上是条连接,逻辑上是个会话。
  这里有两个名字起得不好的命令:
  connect:应该是叫创建会话
  disconnect:结束所有会话。
  用sql*plus,真正要断开连接的命令是:exit
 
  服务器进程就是代表客户会话完成工作的进程。它们是干重活的苦命娃,几乎所有的工作都是由它们来做的,因此占用系统cpu的时间最多。
  1)对sql进行解析和执行
  2)如果所需的数据不在sga中,则server process会去磁盘上将其读到sga的database_buffer_cache中。
  3)把结果返回给应用程序
 
  单个会话查询服务器进程和用户进程的pid:
  SQL>   select a.spid "专用服务器进程",b.process "客户进程"
  from v$process a,v$session b
  where a.addr=b.paddr
  and b.sid=(select sid from v$mystat where rownum=1)  2    3    4  
  5  /
 
  专用服务器进 客户进程
  ------------ ------------
  8313         8304
  www.2cto.com  
  SQL> !ps -p 8313 8304
    PID TTY      STAT   TIME COMMAND
   8304 pts/2    S+     0:00 sqlplus       
   8313 ?        Ss     0:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL
 
  后台进程都来自同一个二进制可执行程序oracle(/u01/app/oracle/product/10.2.0/db_1/bin/),可以从v$bgprocess查询.
  PMON
  1)清理异常连接,如,回滚未提交的事务,释放资源等
  2)监视所有oracle进程,如果进程失败,可能重启进程,也可能终止实例(LGWR失败)
  3)向监听器注册这个实例并与之通信。
  [回滚未提交的事务:oracle server根据server process做动作,server process根据user process做动作。如果user process中断,server process会出现盲等待。这时,PMON就会检查有无server process所对应的user process出现中断,如果有,就回滚那笔事务]
 
  SMON
  1)实例恢复:将online redo log file中保护的数据写回到数据文件
  2)收集空间:合并空闲空间
 
  CKPT
  检查点进程并不像它的名字所暗示的那样真的建立检查点,建立检查点主要是DBWn的任务。CKPT只是发出要求将database_buffer_cache中的脏块写到数据文件,而响应这个号召的人是DBWn。当DBWn完成了它所建立的检查点后(这里的检查点是指DBWn去检查某些redo entry是否写入了online redo log file中,然后再去redo log file保护的数据写入数据文件,这整个过程叫检查点事件),CKPT就会在控制文件和数据文件的文件头中做记录。这两人的关系好比,诸葛亮和关羽,CKPT是诸葛亮,DBWn是关羽,诸葛亮要求攻打祁连山,他发出了这条军令,那么关羽就会带兵去攻打,等占领了祁连山后,再由诸葛亮做后续的一些工作。
  www.2cto.com  
  DBWn
  DBWn行为是为了释放缓冲区,或者对日志过账。负责保持oracle内存数据与磁盘数据的一致性。
  为了提高DBWn的写性能,建议使用支持异步I/O的平台。采用异步I/O,DBWn会收集要写的块,交给os,但他不会等待os将块写到磁盘,而是立马返回,去收集下一批要写的块,当os完成写操作时,他会异步的通知DBWn。另外,DBWn是分散写,LGWR是顺序写,分散写比顺序写慢多了。这也是oracle使用LGWR和重做日志文件的主要原因。dbwn的数量和cpu的数量通常是一样的.
 
  LGWR
  oracle有个快速提交机制,即:当用户提交时,redo entry被server process放入redo log buffer,LGWR很快会把这些日志条目从日志缓冲区写到在线重做日志文件中。但是,被修改的数据并没有立即写入磁盘上的数据文件,而是被延迟了。
  当事务提交时,会被赋予一个SCN,它随着redo entry一起被写入到联机重做日志文件里。  
 
 
作者 linwaterbin

推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了如何使用libpq库与PostgreSQL后端建立连接。通过探讨PQconnectdb()函数的工作原理及其在实际应用中的使用方法,帮助读者理解并掌握建立高效、稳定的数据库连接的关键步骤。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
author-avatar
knight
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有