concepts阅读总结8——内存结构补充+oracle工具+个别进程

1、内存结构:

关于之前SGA,PGA的介绍我就不多说了,在我的博客里有专门的介绍:

http://blog.csdn.net/changyanmanman/article/details/7256255

我们看看各个区域的介绍吧,这是官方的文档,准确性和权威性不言而喻。

2、数据缓存区:

一个新的点,数据缓存区在逻辑上被分成了好几个组,这种分组的内存管理方式减少了多处理器系统中的资源竞争。(共享SQL区也是这样的

数据缓存区内的缓冲区(buffer)通过两个列表来管理:待写列表(write list)最近最少使用列表(LRU)

待写列表中记录的是脏缓冲区(dirty buffer) 即其中的数据已被修改,但是没有被写入磁盘;

 最近最少列表(LRU)记录的是可用的缓冲区(free buffer)还有被锁定的缓冲区(pinned buffer)以及 还没有来得及被移入待写列表的脏缓冲区。

可用缓冲区内的数据无需继续保留,可以为后来的数据继续使用,锁定的缓冲区就是正在被锁定访问操作的数据

当某个 Oracle 进程访问一块缓冲区时,就会将其移动到 LRU 列表的最近使用(most recently used,MRU)端。随着更多被访问的缓冲区移动到 LRU 列表的 MRU 端,较早前被访问过的脏缓冲区就会逐渐向 LRU 列表的 LRU 端移动。

当 Oracle 的用户进程(user process)首次查询某块数据时,她将首先在数据缓存区内进行搜索。如果用户进程在数据缓存区内找到了所需的数据(称为缓存命中(cache hit)),就可以直接从内存中访问数据。如果用户进程不能在数据缓存区中找到所需的数据(称为缓存失效(cache miss)),则需要从磁盘中的数据文件里将相应的数据块复制到缓存中才能进行访问。缓存命中时的数据访问速度远远大于缓存失效时的速度。

用户进程将数据块读入数据缓存区之前首先要准备好可用缓冲区。用户进程从 LRU 列表的 LRU 端开始对其进行搜索。这个搜索过程将一直持续,直到找到可用缓冲区或达到缓存搜索操作的预设限定值为止。

当用户进程在对 LRU 列表的搜索过程中遇到脏缓冲区时,她会先将此类缓冲区移入待写列表,之后再继续搜索。当用户进程找到了可用缓冲区时,就会将数据块从磁盘写入缓冲区,并将此缓冲区移到 LRU 列表的 MRU 端。

如果 Oracle 用户进程对 LRU 列表的搜索操作达到了预设的限定值而仍旧没有找到可用缓冲区,那么进程将停止搜索并通知 DBW0 后台进程将部分脏缓冲区写入磁盘。

LRU算法和全表扫描:

本来我没有往这里想,全表扫描怎么会和lru算法扯上关系呢?顶多是全表扫描了,把数据都存到LRU列表中就是了,(哦,其实有关系,xiangguan)

当用户进程(user process)执行全表扫描(full table scan)时,她会将存储表数据的数据块读入缓冲区,并将这些缓冲区移动到 LRU 列表的 LRU 端(而不是 MRU 端)。这是因为全表扫描得到的数据通常只是暂时需要的,因此这些缓冲区应当被尽快地移出数据缓存区,为其他使用频率更高的数据块腾出空间。

户可以针对每个表而设定全表扫描时缓冲区的使用方式。具体做法是,在创建(create)或修改(alter)表或簇(cluster)时使用 CACHE 子句,设定在对此表进行全表扫描时将其数据块读入 LRU 列表的 MRU 端。用户可以对数据量较小的检索表(lookup table)或数据量较大的静态历史表(static historical table)进行此项设定,以避免访问此类表导致额外的 I/O 操作。

3、oracle工具:

1、data pump 导入导出工具:

用户在 Data Pump 中可以设定部分或全部地迁移数据及元数据。这个功能是通过数据过滤器(data filter)及元数据过滤器(metadata filter)实现的,这两个过滤器可以在导入及导出工具的参数中进行设定。

数据泵导出工具(data pump export ):他的功能是将数据库的数据及源数据导出。导出到一个叫转储文件集(dump file set)的操作系统文件中,这个转储文件集可以被移动到其他数据库系统中,用数据泵导入工具导入到新的数据库中。

转储文件集由一个或者多个磁盘文件组成,这些文件中包含了表数据,数据库对象元数据,控制信息这三个: 这些文件是二进制的,只有在导入到数据库中才能看到。

数据泵导入工具(data pump import):导入工具(Import)还能够直接从源数据库(source database)向目标数据库进行加载,而无需借助于中间文件(intervening file)。这使导出导入工作能够并行进行,最大限度地缩短了数据迁移所需的时间。这项功能被称为网络导入(network import)。

4、个别进程介绍:

作业队列进程(job queue process)的功能是进行批处理(batch processing)。这种进程用于运行用户的作业(job)。这种进程能够提供作业调度服务(scheduler service),在 Oracle 实例中调度 PL/SQL 语句及存储过程。用户只需提供作业的开始时间及调度间隔,作业队列进程就能够按用户的设定调度作业。

作业队列进程可以被动态地管理。这样当用户需要时就能够使用更多的作业队列进程。当一个作业队列进程进入空闲状态(idle)后,其使用的资源将被释放。

动态的作业队列进程可以按指定的时间间隔运行大量的作业。用户的作业是由CJQ 进程交给作业队列进程执行的。具体步骤如下:

  1. 名为 CJQ0 的协调进程(coordinator process)从系统的 JOB$ 表中定期地查询需要运行的作业。被选出的作业将按照时间排序。
  2. CJQ0 进程动态地生成新的作业队列进程(J000 ... J999)来运行作业。
  3. 作业队列进程执行一个由 CJQ 进程选出的作业。每个工作队列进程每次只能执行一个进程。
  4. 当一个工作队列进程执行完一个作业后,就能够接受下一个作业。如果此时系统中已经没有需要被调度的作业了,此进程将进入休眠状态(sleep state);此进程还会定期地苏醒(wake up)等待分配其他作业。如果在预设的时间内没有新的作业,此进程将终止。

进程监控进程(PMON)

当一个用户进程(user process)失败后,进程监控进程(process monitor,PMON)将对其进行恢复。PMON 进程将清除相关的数据缓存区(database buffer cache)并释放被此用户进程使用的资源。例如,PMON 进程将重置活动事务表(active transaction table),释放锁,并从活动进程列表(list of active process)中删除出错进程的 ID。

PMON 进程会周期性地对调度器(dispatcher)和服务进程(server process)进行检查,重新启动停止运行的进程(不包括 Oracle 有意停止的进程)。PMON 进程还负责将实例和调度器进程的信息注册到网络监听器(network listener)。

同 SMON 进程一样,PMON 进程也会定期地检查系统中是否有问题需要处理,当系统内的其他进程需要服务是也能够调用 PMON 进程。



MMON进程负责执行多种和可管理性相关(manageability-related)的后台任务,例如:

  • 当某个测量值(metrics)超过了预设的限定值(threshold value)后提交警告
  • 创建新的 MMON 隶属进程(MMON slave process)来进行快照(snapshot)
  • 捕获最近修改过的 SQL 对象的统计信息
MMNL 进程负责执行轻量级的且频率较高的和可管理性相关的后台任务,例如捕获会话历史信息,测量值计算等。

MMAN 进程负责执行数据库系统的内部任务。

在使用了自动存储管理(Automatic Storage Management)的实例中,RBAL 进程负责协调磁盘组间的负载平衡工作。她可以使多个实例同时访问一个 ASM 磁盘(global open)。最终由 ORBn 进程实际执行数据扩展的负载均衡。实例中可以运行多个 ORBn 进程,分别为 ORB0,ORB1,以此类推。

数据库实例使用 ASM 磁盘组时,还要启动 OSMB 进程。此进程负责和 ASM 实例(Automatic Storage Management instance)通信。

上一篇:基于事件驱动的领域模型实现框架 - 分析框架如何解决各种典型业务逻辑场景


下一篇:concepts阅读总结11 ——数据库安全与数据完整性