作为一个DBA或性能测试工程师,做性能分析的时候,对进程/线程情况分析也是很重要的,毕竟根据客户端进程,后台进程,服务进程情况来分析是否存在连接池设置方面的问题。
下面在这里我就简单介绍一下,关于Oracle的进程结构,希望对做性能测试的人员或DBA有所帮助。
Oracle进程分类:
理论上讲分3类:分别是用户进程,服务进程,后台进程,其实我们可以认为是一类,原因,服务进程,后台进程都是为后台客户端连接服务器服务的,统一为后台进程。 而用户进程为了连接Oracle服务器,在客户端上的进程。
用户进程:指Orcale客户端进程,是SQL plus,Toad等工具连接Oracle服务端的工具所产生的进程。
服务进程:主要负责和客户端连接的进程,不细说啦。
后台进程:为用户进程分配资源及提供数据库服务,是主要的进程。
包括1. DBWn ,全称Database Writer是把SGA中的Buffer Cache 修改过的内容写到系统磁盘文件(Data files)这里的n代表多个,例如DBW1,DBW2...等,Oracle9i支持20个,设置DBW的个数,与数据库性能有很大关系的,做性能分析要关注。
2.PMON(Proces Monitor监控后台进程,检查存在问题的进程并进行产生新的台进程进替换工作)
3.CKPT全称Checkpoint,在数据文件写检查点,在控制文件写控制信息等操作。
4.LGWR全称Log Writer ,是把Redo Log Buffer 写入Redo Log files,什么情况下写Redo Log文件呢?当用户使用Commit提交数据时或Redo Log Buffer 超过1MB时,Redo Log Buffer 已用Buffer 超过总Buffer 的三分之一等情况。)
5.SMON全称System Monitor,检查处理DBWn,LGWR工作处理情况,处理宕机未释放资源,事物失败,空间不连续等情况。
6.ARCn全称Archived,归档文件操作,在实际的生产中一般都运行在Archivel Log模式下)
以上是主要进程,次要进程还有LMDn,QMNn,CJQ0,LMON,RECO,Dnnn,LMS,Snnn,LCKn,Pnnn等,这里不详细说啦。
Tips:ps-ef | grep oracle查看在Linux操作系统下的进程情况。
Oracle处理sql过程:
用户通过User Process进程(sql plus ,Toad等工具)连接Oracle服务器(Server Process)
以下,以更新语句为例,安全检查(当前连接用户的权限)通过然后解析原子操作(SQL语句分解,执行计划,绑定变量等),先在SGA的BufferCache 检查是否存在该更新语句。
如果不存在去磁盘DB文件读到Buffer Cache 中,然后更新,如存在执行在Buffer Cache 处理。
Database逻辑结构图:
上图简述:
Oracle 的 Blocks 是操作系统的文件系统Blocks整数倍,如Oracle的一个Blocks等于一个操作系统的文件系统Blocks或Oracle 的 一个Blocks等于两个操作系统的文件系统Blocks。一般Oracle的Blocks大小是8K,Blocks Size 磁盘I/O有一定影响,做性能分析的时候,也一定要关注。
一推连续的Blocks组成Extent ,很多Extent 组成Segment,一个或多个Segment 组成Tablesspace ,一个或多个Tablesspace组成DataBase 。Tablesspace可以属于多个DataBase。