1. oracle进程介绍
进程结构:
① 用户进程(用来访问数据库客户端的总称,例如pl/sql,toad等)
② 服务器进程和后台进程(oracle启动的时候会启动这些必须的进程)
2. 连接方式(用户访问数据库方式)
① 本机直接通过sock方式访问IP(实际开发中不可能)。
② 通过tcp方式建立连接,连接到oracle服务器(需要配置tsname.ora文件)。
3. 内存结构
① PGA(程序全局区):其中最重要的是UGA(用户全局区),包括:会话信息、哈希信息。PGA是oracle用户的进程使用的一个内存区域。一个用户进程对应一个PGA,与SGA不同的是,PGA是非共享的,主要用于用户在运行程序时的使用变量空间。
② SGA(系统全局区):包含一个oracle实例的数据和控制信息的共享内存结构。主要用于存储数据库信息的内存区,刚才也提到了,与PGA的区别在于PGA是非共享的,而SGA是共享的。SGA包含了oracle服务器的数据和控制信息。SGA组成:数据高速缓冲区、共享池、重做日志缓冲区、Java池、大型池、流池和锁管理等。下面分别介绍一下几个池。
③ 共享池(shared pool):共享池是由两个与性能相关的部分组成:库缓存和数据字典缓存,共享池的大小是由参数shared_pool_size决定的,共享池用于存储最近执行的sql语句和最近使用的数据定义。其中库缓存:1.存储最近执行的sql和pl/sql的信息。2.共享最常用的语句。3.管理上遵循LRU(最近最少)原则,也就是会把最近最少使用的语句移除内存区。也就是说如果一条sql语句如果好久没有执行的话,那么执行效率就会比经常执行的sql低。库缓存包括两个部分:共享sql区和共享pl/sql区,其大小是由shared pool决定的。数据字典缓存:存储在数据库中最近使用的定义,包括数据文件,表,索引,列,用户,权限和其他数据库对象。在分析阶段,服务器进程查找数据字典验证对象的名字以及是否合法访问(之前的文章中讲过sql执行顺序)。对于DML语句,如果数据字典的信息在缓存中能提高相应时间。
④ 数据高速缓存区:1.暂存从数据文件中获得的数据块的数据映像2.同样遵循LRU原则3.当再次需要操作这些数据时可以直接从内存中获取和更新,语句执行效率大大提高。4.初始化参数,DB_BLOCK_SIZE决定了数据块儿的大小,对于关系db存储的I/O的最小单位。
⑤ 重做日志缓冲区:1、暂存数据库中所有数据块的改变。2、内存管理的方法是FIFO(先进先出)。3、重做日志被用于提供数据恢复功能(rollback)。4.暂存重做日志是为了提高语句的执行速度。
以上的介绍是基于oracle体系架构的一个大体介绍,可能与我们日常开发中关系并不大,不过多了解点儿没坏处,希望大家也多多提出意见,一起进步。下一篇文章,我将分享一些与我们日常开发关系密切的数据库优化的一些东西,希望大家持续关注并分享。
King:156937648




