`
izuoyan
  • 浏览: 9260113 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

数据缓存区的管理

 
阅读更多

数据缓存区,database buffer cache,分为脏缓存区(dirty buffer)和可用缓存区(free buffer),分别使用的是待写列表和最近最少使用(LRU- least recent used)列表管理。

<!--more-->


脏缓存区保存的是已经修改但是还未写入到磁盘的数据;
可用缓存区分为可用区和锁定区,可用区是干净无数据的,锁定区表示目前正在被使用;
当一个新进程访问一个数据,例如发出了一条select语句,那么oracle首先在缓存区搜索是否已经有存在所需要的数据,如果找到了那么就可以直接在内存访问数据,这个动作就中cache hit;
如果没用找到,那么需要从磁盘对应的数据文件中读入缓存中,这个动作叫做 cache miss,这个步骤涉及到了I/0操作;
从数据文件读入缓存区之前,需要先找到对应的空间来存放,oracle一直搜索缓存区(从LRU开始搜索),直到找到可用缓存区或者达到缓存区搜索操作的预设限定值为止,
在这个搜索过程中,遇到了一些脏数据,将会将它们移到待写列表,然后继续搜索,当找到可用缓存区后,进程将数据块从磁盘写入缓存区,并将此缓存区移到LRU列表的MRU端(most recent used);
如果一直都搜索不到可用区域,将激活DBW0进程去执行数据块写动作,将脏数据写入磁盘,以便腾出足够的空间给下次缓存区操作使用。
这既是一个大概的过程吧。

针对全表扫描的动作,和上述有所不同,全表(full scan)的读入的数据,oracle认为这是暂时、临时需要的数据,因此从磁盘读入的时候将被放到LRU列表的LRU端,以便最快的被移除LRU。

-The End-

分享到:
评论

相关推荐

    数据高速缓存区命中率

    本文档将深入探讨数据高速缓存区(Buffer Cache)的管理与优化策略,以提升其命中率。 ### Buffer Cache原理 Buffer Cache在数据库系统中扮演着存储最近访问过的数据块的角色,以便于未来的请求能够快速地从内存中...

    return_buf.zip_return_循环缓存_数据 缓存_数据缓存

    在"return_buf.zip_return_循环缓存_数据缓存_数据缓存"的描述中,提到“数据写进循环缓存区,模拟数据被取走,打印出来为空”,这可能是指一个实际操作过程:数据被写入循环缓存后,通过某种机制(如读取、消费)...

    缓存区

    【缓存区】是计算机系统中的一个重要概念,它在提高数据访问速度和优化系统性能方面起着关键作用。缓存的基本原理是利用局部性原理,将频繁访问或即将访问的数据暂时存储在高速、接近处理器的地方,以便快速获取,...

    flash高速缓存管理

    串行FLASH数据缓冲区的管理 对于串行FLASH芯片的存取操作,内核能够通过直接对芯片的读写来实现,但是较慢的芯片响应速度会使用读写响应时间加长,吞吐率降低。因此,内核通过保持一个称为数据缓冲区高速缓冲的内部...

    串行FLASH数据缓冲区的管理(程序)

    串行Flash的数据缓冲区管理涉及到以下几个关键概念: 1. **缓冲区大小**:缓冲区的大小应根据实际应用的需求来设定,以平衡存储效率与内存占用。一般而言,缓冲区越大,连续读取数据的速度越快,但也会消耗更多RAM...

    JavaScript缓存区分析

    JavaScript缓存区分析是Web开发中的一个重要概念,尤其是在性能优化和大数据处理方面。在这个话题中,我们将深入探讨JavaScript如何管理内存,以及如何利用缓存机制提高应用程序的运行效率。 首先,我们要理解...

    串行FLASH数据缓冲区的管理

    因此,内核通过保持一个称为数据缓冲区高速缓冲的内部数据缓冲区来减小对芯片的存取频度。高速缓冲含有最近被使用过的串行Flash的数据。 当从芯片中读数据的时候,内核试图先从高速缓冲中读取。如果数据已经在该高速...

    c++ 实验课作业,Vector 缓存所有数据

    在这个“c++ 实验课作业”中,学生们被要求利用`std::vector`来缓存数据,并通过虚函数将其保存到文件中。这个任务旨在深化对C++面向对象编程的理解,特别是关于动态数组、容器管理和继承的概念。 首先,让我们深入...

    使用缓存管理传递数据 - 杨奉武 - 博客园1

    在ESP32 SDK中,数据传输往往涉及到网络通信,例如TCP/IP协议,这时候就需要利用到TCP/IP协议栈的缓冲区管理机制。 例如,当ESP32作为TCP客户端或服务器时,需要接收或发送数据包。TCP/IP协议栈会使用内部缓存来暂...

    缓冲区管理(数据最快插入方式)

    缓冲区管理涉及到如何高效地在内存中存储和管理数据,以便于快速访问和更新。在这个C编写的数据插入系统中,它采用B+树作为数据结构,以优化数据的插入效率。下面将详细解释缓冲区管理和B+树的相关知识点。 **缓冲...

    乒乓缓存和消息分发C代码实现_缓存_数据传输_

    乒乓缓存(Ping-Pong Buffer)是一种在计算机编程中用于优化数据传输和处理的技术,尤其在实时系统或者需要高效内存管理的场景下被广泛应用。它通过利用两个或多个交替使用的缓冲区来避免数据读写过程中的等待时间,...

    Labview实现串口通信与CRC校验并解析缓冲区数据

    4. **串口读写VI**:读取和写入串口,使用缓冲区管理来处理数据流。 5. **数据解析VI**:解析接收到的Modbus响应,提取并显示寄存器或线圈的值。 6. **用户界面**:展示配置选项、发送和接收数据的界面,以及可能的...

    STM32串口循环队列中断缓存程序

    这种设计确保了即使在数据快速到达时,也能有效地存储和管理数据。 2. **中断服务函数(ISR)**:STM32的UART中断服务函数会在接收到新的数据字符或特定事件(如帧错误、溢出错误等)时被调用。在这个函数中,接收...

    串口中断方式缓存收发例程

    队列收发是一种常见的数据管理策略,它利用FIFO(先进先出)的原则来存储和处理数据。在接收端,接收到的数据被添加到接收队列的末尾;而在发送端,数据从发送队列的头部取出并发送。这样,当串口正在处理一个数据包...

    缓存统一处理法

    - 环形缓冲区:通过`gucServerCmdIn`和`gucServerCmdOut`两个指针来表示缓存区中的读写位置,形成一个环形的缓存结构。 - 队列管理:合理地管理队列的读写状态,避免队列溢出或者读空的情况发生。 需要注意的是,...

    停车场管理系统完整版(SpringBoot,Maven,Mybatis,Mysql数据,Redis缓存)

    5. Redis缓存:Redis是一个高性能的键值对存储系统,常被用于缓存数据以提升系统性能。在本系统中,Redis可以存放频繁访问的数据,如热门停车位信息,减少对数据库的直接查询,从而提高系统响应速度。 系统实现的...

    基于数据访问计数的NAND闪存缓存管理算法.docx

    《基于数据访问计数的NAND闪存缓存管理算法》 在现代电子设备中,NAND闪存因其小巧、高速、耐用等特性,已成为嵌入式系统存储介质的首选。随着存储技术的发展,NAND闪存的容量不断提升,价格逐渐降低,逐步取代磁盘...

    数据存储管理技术的更新换代.pdf

    数据存储管理技术的更新换代 ...数据存储管理技术的更新换代对数据密集型计算和缓存区的影响非常关键,因此 replacement Algorithm 的质量和系统实现对数据存储管理技术的更新换代起着非常关键的作用。

    运用libevent的缓存示例

    总结来说,本示例展示了如何利用libevent的`evbuffer`来实现一个简单的数据缓存。通过libevent的事件驱动特性,我们可以轻松地监控缓存状态,及时响应数据的读写请求,从而提高程序的响应速度和整体性能。在实际项目...

    Linux0.11 文件系统源代码分析—数据块管理源代码分析

    本分析将深入探讨这一关键领域的源代码,特别是缓冲区管理和块设备操作。 **一、课设题目** 本次分析的重点在于理解Linux 0.11中的文件系统数据块管理,尤其是缓冲区的管理和块设备的交互机制。通过对源代码的解析...

Global site tag (gtag.js) - Google Analytics