oracle I/O 从属进程

I/O 从属进程

  I/O从属进程用于为不支持异步I/O的系统或设备模拟异步I/O.例如,磁带设备(相当慢)就不支持异步I/O.通过使用I/O 从属进程,可以让磁带机模仿通常只为磁盘驱动器提供的功能。就好像支持真正的异步I/O 一样,写设备的进程(调用者)会收集大量数据,并交由写入器写出。数据成功地写出时,写入器(此时写入器是I/O 从属进程,而不是操作系统)会通知原来的调用者,调用者则会从要写的数据列表中删除这批数据。

  采用这种方式,可以得到更高的吞吐量,这是因为会由I/O 从属进程来等待慢速的设备,而原来的调用进程得以脱身,可以做其他重要的工作来收集下一次要写的数据。

  I/O 从属进程在Oracle 中有两个用途。DBWn 和LGWR 可以利用I/O 从属进程来模拟异步I/O,另外RMAN写磁带时也可能利用I/O 从属进程。

  有两个参数控制着I/O 从属进程的使用:

  BACKUP_TAPE_IO_SLAVES:这个参数指定RMAN 是否使用I/O 从属进程将数据备份、复制或恢复到磁带上。由于这个参数是围绕着磁带设备设计的,而且磁带设备一次只能由一个进程访问,所以这个参数是一个布尔值,而不是所用从属进程的个数(这可能出乎你的意料)。RMAN 会为所用的物理设备启动多个必要的从属进程。BACKUP_TAPE_IO_SLAVES = TRUE 时,则使用一个I/O 从属进程从磁带设备读写。如果这个参数为FALSE(默认值),就不会使用I/O从属进程完成备份。相反,完成备份的专用服务器进程会直接访问磁带设备。

  DBWR_IO_SLAVES:这个参数指定了DBW0 进程所用I/O 从属进程的个数。DBW0 进程及其从属进程总是将缓冲区缓存中的脏块写至磁盘。这个值默认为0,表示不使用I/O 从属进程。注意,如果将这个参数设置为一个非0 的值,LGWR 和ARCH 也会使用其自己的I/O 从属进程,LGWR 和ARCH 最多允许4 个I/O 从属进程。

  DBWR I/O 从属进程的名字是I1nn,LGWRI/O 从属进程的名字是I2nn,这里nn 是一个数。

  并行查询从属进程

  Oracle7.1.6 引入了并行查询功能。这个功能是指:对于SELECT、CREATE TABLE、CREATE INDEX、UPDATE 等SQL 语句,创建一个执行计划,其中包含可以同时完成的多个(子)执行计划。将每个执行计划的输出合并在一起构成一个更大的结果。其目标是仅用少量的时间来完成操作,这只是串行完成同一操作所需时间的一小部分。

  例如,假设有一个相当大的表,分布在10 个不同的文件上。你配置有16 个CPU,并且需要在这个表上执行一个即席查询。另一种方法是:可以将这个查询计划分解为32 个小部分,并充分地利用机器;而不是只使用一个进程串行地读取和处理所有数据。相比之下,前一种做法要好得多。

  使用并行查询时,会看到名为Pnnn 的进程,这些就是并行查询从属进程。处理一条并行语句时,服务器进程则称为并行查询协调器(parallelquery coordinator)。操作系统上服务器进程的名字并不会改变,但是阅读有关并行查询的文档时,如果提到了协调器进程,你应该知道这就是原来的服务器进程

你可能感兴趣的:(oracle)