什么进程将块读取到缓冲区高速缓存?

What process reads blocks to the buffer cache?

DBWR 进程将缓冲区缓存中的脏块写入数据文件。
文档说明块在形成结果集之前被读取到缓冲区缓存。但是“”会阅读?你怎么称呼这个过程?

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

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

#processes * #datafiles

您也可以在 Linux 上使用 lsof 轻松查看。

来自overview of server processes

Oracle Database creates server processes to handle the requests of client processes connected to the instance. A client process always communicates with a database through a separate server process.

Server processes created on behalf of a database application can perform one or more of the following tasks:

  • Parse and run SQL statements issued through the application, including creating and executing the query plan (see "Stages of SQL Processing")

  • Execute PL/SQL code

  • Read data blocks from data files into the database buffer cache (the DBWn background process has the task of writing modified blocks back to disk)

  • Return results in such a way that the application can process the information

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

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

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