设为首页 加入收藏

TOP

11GConcepts(翻译第十四章)MemoryArchitecture(内存体系结构)(二)
2014-11-24 01:08:03 来源: 作者: 【 】 浏览:102
Tags:11GConcepts 翻译 十四 MemoryArchitecture 内存 体系结构
例子。Run-time 区跟踪当full table scan时,到当前为止总过取回了多少行。

Oracle数据库在执行语句时,第一步就会创建run-time area。对于DML语句,run-time area当SQL语句关闭时被释放。

·persistent area(持续区)

这个区包含绑定变量的值,当一个语句执行后,SQL语句运行时提供给SQL语句的值。只有当cursor关闭时,persistent区才会关闭。

Client 进程负责管理私有SQL区。私有SQL区的分配和回收很大程度依赖应用,然而一个client进程可以分配的private SQL areas是有限的,根据初始化参数OPEN_CURSORS限制。

虽然大多数用于依赖于数据库的自动cursor处理机制,但是Oracle数据库依然提供程序接口供开发人员对cursors更多的控制。基本来说,应用程序应该在不会再次使用这个cursor后,将其关闭,用来释放持续区,将应用用户的内存需要最小化。

SQL Work Areas(SQL工作区)

工作区是PGA中分配的私有内存,服务于内存密集型操作。举个例子,排序(sort)操作会使用 sort area 用来排序一个集合的行。同样的,hash join 操作使用 hash area 会对left input的数据集创建 hash table,而bitmap merge 使用 bitmap merge area来将多个bitmap indexes中扫描的数据进行 merge。

下例显示一个employees表和departments表的join,以及它的查询计划(用来查询的执行计划)

SQL> SELECT *

2 FROM employees e JOIN departments d

3 ON e.department_id=d.department_id

4 ORDER BY last_name;

.

.

.

----------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

----------------------------------------------------------------------------------

| 0| SELECT STATEMENT | | 106 | 9328 | 7 (29)| 00:00:01 |

| 1| SORT ORDER BY | | 106 | 9328 | 7 (29)| 00:00:01 |

|* 2| HASH JOIN | | 106 | 9328 | 6 (17)| 00:00:01 |

| 3| TABLE ACCESS FULL| DEPARTMENTS| 27 | 540 | 2 (0)| 00:00:01 |

| 4| TABLE ACCESS FULL| EMPLOYEES | 107 | 7276 | 3 (0)| 00:00:01 |

----------------------------------------------------------------------------------

在这个例子中run-time area跟踪full table scan 扫描的进展。会话执行了一个hash join 到hash area去匹配两个表中的行。ORDER BY 排序发生在sort area。

如果被操作处理的数据总量没法全部放在work area,那么Oracle数据库会把输入的数据拆分成更小的数据片。在这种情况下,数据库会在内存中处理一部分数据片,而将剩余的写入到临时表空间用来之后处理。

当数据库使用自动PGA内存管理时,数据库会自动调整工作区的大小。你同样可以手工控制和调整work area的大小。

通常,增大工作区可以显著提高一个操作的性能,不过这样会导致更高的内存消耗。最理想的情况,work area的大小足以满足一个SQL中输入的数据以及相关的辅助内存结构。如果不能,响应时间将增加因为一部分输入的数据必须先写到磁盘。在极端情况下,如果work area对比输入的数据来说太小了,那么数据库必须对数据片段执行多次passes over,将极大的影响相应时间。

PGA Usage in Dedicated andShared Server Modes(在专用模式以及共享模式中 PGA的使用)

PGA的内存分配 依赖于数据库是使用独占还是共享连接模式,下标显示了区别

Memory Area

Dedicated Server

Shared Server

会话内存的性质

Private

Shared

持续区的位置

PGA

SGA

Run-time区的位置

PGA

PGA

Overview of the System Global Area(SGA的概述)

SGA是一个可读写的内存区域,和Oracle后台进程一起,组成数据库实例。所有代表用户的服务进程可以从SGA中读取信息。一些进程在操作时可以对SGA进行写。

注意:服务和后台进程不能驻留在SGA中,而是存在于分别的内存空间中

每个数据库实例都有自己的SGA。Oracle数据库在实例启动时自动分配内存,是实例关闭时自动回收内存。当你通过sqlplus或Oracle Enterprise Manager启动一个实例时,SGA的大小将如下面例子这样显示出来:

SQL> STARTUP

ORACLE instance started.

Total System Global Area 368283648bytes

Fixed Size 1300440bytes

Variable Size 343935016bytes

Database Buffers 16777216bytes

Redo Buffers 6270976bytes

Database mounted.

Database opened.

如下图所示,SG包括几个内存组件,内存组件是一些为了满足不同内存分配需求的内存池

除了redo log buffer以外的其他SGA组件分配和释放都是通过一种称之为granules的单位进行的(这个单位包含一部分连续的内存)。Granule大小是根据系统平台以及总的SGA大小来决定。

你可以通过查询V$SGASTAT视图来获取SGA组件的相关信息。

\

你可以通过查询V$SGASTAT视图来获取SGA组件的相关信息。

最重要的SGA组件如下:

·Database Buffer Cache

·Redo Log Buffer

·Shared Pool

·Large Pool

·Java Pool

·Streams Pool

Database Buffer Cache

database buffer cache同样被称为buffercache,这块内存用来存储从数据文件中读取的数据块的拷贝。buffer是buffer管理器临时缓存当前或者最近使用的数据块的主要内存地址。所有用户并发连接到数据库instance,共享的方式访问buffer cache。

Oracle数据库使用buffer cache完成以下目标:

·优化物理I/O

数据库更新在cache中的数据块然后存储 修改动作的元数据到redolog buffer。在commit以后,数据库将redo buffer

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇禁止以操作系统认证方式登录数据库 下一篇全面解析Oracle数据库的系统和对..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: