Oracle 11g体系结构初识笔记
目录
五、数据库的连接模式(更新中)
六、数据库的逻辑结构和物理结构(更新中)
七、数据字典视图(更新中)
八、数据库的初始参数文件规划(更新中)
一、引言
这篇文章适合对于Oracle数据库体系结构全无了解或者了解较少的编程爱好者。
Oracle作为甲骨文公司的一款关系型数据库产品,在数据库领域一直处于领先地位,可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的 适应高吞吐量的数据库解决方案。
而如果想更深入地去理解Oracle数据库,或者想从事Oracle DBA的工作,那么对于Oracle数据库的体系结构要十分了解才行。当然最权威的了解途径就是在Oracle官网中下载Oracle的官方技术文档进行查看。
最近正好了解了以下Oracle数据库的体系结构,内容是我所做的笔记以及一些个人理解,我水平有限,如果有错误,请指正。
以下是Oracle体系结构图,下面也主要是围绕这个图对Oracle体系结构进行浅显的介绍。
二、实例的体系结构
2.1 实例的概念
实例是一组内存结构和后台进程的集合。当我们想要访问数据库时,在数据库服务器端要先启动一个实例(instance),在内存中分配一定的存储空间,并且启动一些必要的后台进程。
2.2 实例的组成
实例的内存结构包括进程全局区(PGA,Process Globel Area)和系统全局区(SGA,System Global Area)。
SGA是实例中最重要的组成部分,一个数据库实例只有一个SGA,并且SGA中的数据可以在多个用户进程之间共享,SGA由若干个缓存和缓冲池组成,主要存储数据字典的信息、重做日志以及经过解析的SQL代码等,通过在参数文件中为各个缓存和缓冲池分别指定大小能够定制SGA的大小。
之前也说过,启动数据库服务器的时候,首先启动一个实例,当用户进程向服务器进程发出请求的时候,服务器进程就将用户要求的数据读到SGA中,用户对数据的所有访问直接再SGA完成。当关闭实例的时候,还没有保存的书写入数据文件中,SGA撤销,所有数据从SGA清除。
值得注意的是SGA是所有用户共享的,只要实例启动,不管是否有用户访问数据库,SGA都存在。
PGA:当用户访问数据库是,实例为用户进程启动一个服务器进程并且分配内存用来保存用户进程的私有信息和控制信息,这个内存区就是PGA。
从概念上我们能够很容易发现PGA不一定存在,只有当数据库有用户连接时,才存在仅仅属于该用户的PGA,所以PGA是用户私有的,用户进程向数据库服务器发出请求时被建立,用户进程结束时PGA自动释放。
下面这张图是随手找的一张Oracle数据库实例构成图:
三、实例的内存结构
3.1 SGA内存结构概述
SGA是由多个缓存和缓冲池组成的,根据存储数据的类型,SGA中主要包含下面几个类型的内存结构:
- 数据库高速缓存;
- 重做日志缓冲区;
- 共享池;
- Java池;
- 大池;
数据库高速缓存是一段用来存放用户最近访问的数据的一段存储区域。当用户访问数据文件中数据时,服务器进程首先查看数据库高速缓存中是否存在用户请求的数据,若存在就直接在数据库高速缓存对数据进行访问,这种数据访问叫做“命中”,和计算机组成原理中的“命中”概念很类似,这样的读操作称为“逻辑读”。如果用户请求的数据不在当前数据库高速缓冲当中,那么服务器进程就要首先将数据文件的数据块读到数据库高速缓冲之中,然后再数据库高速缓存冲对数据进行访问,相对地,这样的数据访问就叫做“未命中”,这样地读操作就称为“物理读”。我们可以发现,不论怎样,对数据的访问都是在数据库高速缓存中进行的。
数据库高速缓存的作用是显而易见的,直接在数据库高速缓存中访问数据要比对在存储在磁盘上的数据文件进行访问要快得多(如果你有相关计算机组成原理知识储备的话能够很容易理解)。所以我们能够想到,既然SGA各个缓存和缓冲池的大小都可以由自己指定,那么增大数据库高速缓存的大小,就能够提高数据命中率,从而就能提高数据库的性能了&