您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2025/4/30 16:31:08发布10次查看
与oracle相关的进程可分:用户进程和oracle进程。oracle进程可分:服务器进程和后台进程。服务器进程可分:专用服务器进程和共享
与oracle相关的进程可分:用户进程和oracle进程。oracle进程可分:服务器进程和后台进程。服务器进程可分:专用服务器进程和共享服务器进程。后台进程可分:dbwn,lgwr,ckpt等。
  和用户进程有关的概念是:连接和会话
  连接和会话是两个不同的概念。一条连接上可以建立0个,1个或多个会话,而且各个会话单独且独立的。一条连接即一个进程。
  比如:
  sql> set autotrace on
  sql> select sid from v$session where username=user;
       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
  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是关羽,诸葛亮要求攻打祁连山,他发出了这条军令,那么关羽就会带兵去攻打,等占领了祁连山后,再由诸葛亮做后续的一些工作。
  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一起被写入到联机重做日志文件里。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product