Oracle 哪个进程将块读取到缓冲区缓存?

Oracle 哪个进程将块读取到缓冲区缓存?,oracle,architecture,Oracle,Architecture,DBWR处理从缓冲区缓存到数据文件的写脏块 文档告诉我们,在将块形成结果集之前,它们会被读取到缓冲区缓存中。但是“是谁读的?如何调用该进程?每个客户端的会话进程都读取数据文件 因此,OS内核打开文件数限制公式包含: #processes * #datafiles 您还可以在Linux上使用lsof轻松检查它。每个客户端的会话进程都读取数据文件 因此,OS内核打开文件数限制公式包含: #processes * #datafiles 您还可以在Linux上使用lsof轻松检查它。来自: Orac

DBWR处理从缓冲区缓存到数据文件的写脏块

文档告诉我们,在将块形成结果集之前,它们会被读取到缓冲区缓存中。但是“是谁读的?如何调用该进程?

每个客户端的会话进程都读取数据文件

因此,OS内核打开文件数限制公式包含:

#processes * #datafiles

您还可以在Linux上使用lsof轻松检查它。

每个客户端的会话进程都读取数据文件

因此,OS内核打开文件数限制公式包含:

#processes * #datafiles
您还可以在Linux上使用
lsof
轻松检查它。

来自:

Oracle数据库创建服务器进程来处理连接到实例的客户端进程的请求。客户端进程始终通过单独的服务器进程与数据库通信

代表数据库应用程序创建的服务器进程可以执行以下一项或多项任务:

  • 解析并运行通过应用程序发出的SQL语句,包括创建和执行查询计划(请参阅“SQL处理的阶段”)

  • 执行PL/SQL代码

  • 将数据块从数据文件读入数据库缓冲区缓存(DBWn后台进程的任务是将修改后的块写回磁盘)

  • 以应用程序可以处理信息的方式返回结果

因此,每个专用或共享服务器进程在从磁盘读取数据时填充缓冲区缓存

写入修改后的块是通过一个公共DBWR后台进程完成的,因此它可以是异步的,也可以合并来自多个会话的更改。您通常不希望应用程序在不必等待的情况下等待(缓慢的)物理磁盘写入;不过,它确实需要等待数据被读取,所以将其作为单独的后台进程并没有多大好处

不过,您没有显式调用该过程,它只是在幕后处理。

来自:

Oracle数据库创建服务器进程来处理连接到实例的客户端进程的请求。客户端进程始终通过单独的服务器进程与数据库通信

代表数据库应用程序创建的服务器进程可以执行以下一项或多项任务:

  • 解析并运行通过应用程序发出的SQL语句,包括创建和执行查询计划(请参阅“SQL处理的阶段”)

  • 执行PL/SQL代码

  • 将数据块从数据文件读入数据库缓冲区缓存(DBWn后台进程的任务是将修改后的块写回磁盘)

  • 以应用程序可以处理信息的方式返回结果

因此,每个专用或共享服务器进程在从磁盘读取数据时填充缓冲区缓存

写入修改后的块是通过一个公共DBWR后台进程完成的,因此它可以是异步的,也可以合并来自多个会话的更改。您通常不希望应用程序在不必等待的情况下等待(缓慢的)物理磁盘写入;不过,它确实需要等待数据被读取,所以将其作为单独的后台进程并没有多大好处


不过,您并没有明确地调用该过程,它只是在幕后处理。

非常感谢,回答得很好。我知道你们并没有明确地调用oracle中的(大多数)流程,但我曾经在一次面试中就这样一个问题失败了……非常感谢,回答得很好。我知道在oracle中,您不会显式调用(大多数)流程,但有一次我在面试中遇到这样一个问题时失败了。。。