Oracle 11g体系结构学习(1)

Posted by Harid2013 - Sep - 21 留个言

1、Oracle数据库就是磁盘上的一组文件。可以通过Oracle实例访问数据库。实例就是一组进程加内存结构。

2、用户进程与服务器进程之间使用的网络通信协议是Oracle的专有协议——Oracle Net。

3、客户端层由两个组件组成:用户和用户进程。服务层有三个组件:执行SQL的服务器进程、实例和数据库本身。每个用户都与用户进程交互,每个用户进程都与服务器进程交互,通常要跨局域网。服务器进程与实例交互,实例与数据库交互。

4、使用连接池模型,应用服务器建立相对较少的持久数据库会话。

5、实例组件指的是在启动时初始化的一组操作系统进程和内存结构,而数据库组件指的是用于数据存储和数据库操作的物理文件。

6、有关Oracle Server本身的数据存储在一组特殊的叫做数据字典的表中。

7、在操作系统提供的共享内存段实现的内存结构称为系统全局区(System Global Area , SGA)。SGA在实例启动时分配,在关闭时释放。

8、服务器进程有时称为前台进程(与构成实例的后台进程相对)。与每个服务器进程相关的是一个非共享内存区,即程序全局区(Program Global Area, PGA)。与系统全局区不同,此区是会话专用的。

9、控制文件存储数据库物理结构的详细信息,并且是链接到逻辑结构的起点。当某个实例打开数据库时,它首先要读取控制文件,通过使用控制文件中的信息,实例可以连接到数据库的其余部分及其的数据字典。

SGA

10、缓冲区的更新频率(或COMMIT的数量)与何时写回数据文件没有任何关系。对数据文件执行写操作由数据库写入器后台进程完成。

11、当会话发出COMMIT语句时,会实时执行日志缓冲区写操作。写操作由日志写入器后台进程(LGWR)完成。

12、日志缓冲区最多不必超过数MB,的确,如果将其设置为大于默认值,就会对性能产生极坏的影响。默认值由Oracle服务器确定,而且取决于服务器节点中的CPU数量。大日志缓冲区意味着:在发出COMMIT语句时,需要写入的内容更多,在发出完成提交消息以及会话恢复工作之前,需要耗费更长的时间。如果重做生成是限制数据库性能的因素,唯一的选项是使用RAC。

13、4个重要的共享池组件:库缓存、数据字典缓存、PL/SQL区、SQL查询和PL/SQL函数结果缓存。

14、日志缓冲区的大小固定不变,在启动实例时被设定为固定值。无法对其进行自动管理。共享池的大小是动态的,可以对其进行自动管理。

15、库缓存是内存区域,按其已分析的格式存储最近执行的代码。分析就是将编程人员编写的代码转换为可执行的代码,这是Oracle根据需要执行的一个过程。通过将代码缓存在共享池,可以在不重新分析的情况下重用,极大地提高性能。用于在库缓存中查找SQL的算法基于构建此语句的字符的ASCII值。最不起眼的差别(如:是SELECT,而非select)也意味着语句不匹配,将要再次分析。

16、数据字典缓存有时称为“行缓存”。它存储最近使用的对象定义:表、索引、用户和其它元数据定义的描述。通过将此类定义放在SGA的内存中,以便所有会话可以直接访问它们,而不是被迫从磁盘上的数据字典中重复读取它们,从而提高分析性能。

17、PL/SQL区存储的对象是过程、函数、打包的过程、打包的函数、对象类型定义和触发器。它们全部像源代码那样存储在数据字典中,也使用已编译的格式。当会话调 用存储的PL/SQL对象时,它必须从数据字典读取,为了避免重复读取,将对象缓存到共享池的PL/SQL区。

18、SQL查询和PL/SQL函数结果缓存是11g的新功能。在很多的应用程序中,同一个查询将由同一个会话或多个不同会话执行多次。通过创建结果缓存,Oracle服务器可以将此类查询的结果存储在内存中。在下次发出查询时,服务器可以检索缓存的结果,而不是运行该查询。默认方式下,将禁用SQL查询和PL/SQL函数结果缓存,但如果以编程方式将其启用,那么可以极大地提高性能。

19、过大的共享池也会对性能产生不良影响,因为搜索需要更长的时间。共享池中的内存按照LRU(最近最少使用)算法来分配。共享池的大小是动态的,可以对其进行自动管理。

20、大池是一个可选区域。大池的一个主要用途是供共享的服务器进程使用。并行执行服务器也将使用大池。在缺少大池的情况下,这些进程将使用共享池中的内存。这会导致对共享池的恶性争用。如果使用的是共享服务器或并行服务器,那么始终应该创建大池。设置大池的大小与性能无关。

21、只有当应用程序需要在数据库中运行JAVA存储过程时,才需要JAVA池:此池用作实例化Java对象所需的堆空间。但是,有很多的Oracle选项是用Java编写的,因此,现在将Java池视为标准。注意,Java代码不在Java池中缓存:Java代码在共享池中缓存,与PL/SQL代码的缓存方式相同。如果Java池不够大,那么,由于需要不断地回收空间,性能会因此降级。Java池的大小是动态的,也可以自动管理。

22、流池的大小是动态的,而且可以自动管理。

   声明:本文采用 BY-NC-SA 协议进行授权 | 星期九
   原创文章转载请注明:转自《Oracle 11g体系结构学习(1)

No comments yet.
67 + 7 =  (required)
comment_ad

 NOTICE1: You should type some Chinese word (like “你好”) in your comment to pass the spam-check, thanks for your patience!

 NOTICE2: 请申请gravatar头像(http://en.gravatar.com),木有头像的会显示为“小怪物”头像,将难以通过审核!

分享按钮