【体系结构】08.数据库⾼速缓冲区(Database Buffer Cache)

数据库缓冲区高速缓存,也称为缓冲区高速缓存,是系统全局区域(SGA)中的存储区域,用于存储从数据⽂件读取的数据块的副本。缓冲区是数据库块大小的内存块。每个缓冲区都有⼀个称为数据库缓冲区地址(DBA)的地址。同时连接到数据库实例的所有用户共享对缓冲区高速缓存的访问。缓冲区高速缓存的目标是优化物理I/O,并将经常访问的块保留在缓冲区高速缓存中,并将不经常访问的块写入磁盘。

Oracle数据库用户进程第⼀次需要特定数据时,它将在数据库缓冲区高速缓存中搜索数据。如果进程发现缓存中已存在的数据(缓存命中),则可以直接从内存中读取数据。如果该进程在缓存中找不到数据(缓存未命中),则它必须在访问数据之前将数据块从磁盘上的数据⽂件复制到缓存中的缓冲区中。通过缓存命中访问数据⽐通过缓存未命中访问数据更快。

高速缓存中的缓冲区由复杂算法管理,该算法使用近少使用(LRU)列表和TouchCount算法的组合。LRU有助于确保近使用的块倾向于保留在内存中,以大程度地减少磁盘访问。

数据库高速缓冲区包括以下内容:

  • 默认池(Defaultpool):是通常缓存块的位置。默认块大小为8KB。除非您⼿动配置单独的池,否则默认池是唯⼀的缓冲池。其他池的可选配置对默认池⽆效。
  • 保留池(Keeppool):适用于经常访问但由于空间不⾜而在默认池中过期的块。保留缓冲池的目的是在内存中保留指定的对象,从而避免I/O操作。
  • 回收池(Recyclepool):用于不经常使用的块。回收池可防⽌指定的对象占用缓存中不必要的空间。
  • 非默认缓冲池(Non-defaultbufferpools):适用于使用2KB,4KB,16KB和32KB非标准块大小的表空间。每个非默认块大小都有其自己的池。Oracle数据库以与默认池相同的方式管理这些池中的块。
  • 数据库智能闪存缓存(Flashcache):使您可以使用闪存设备来增加缓冲区缓存的有效大小,而⽆需添加更多主内存。闪存缓存可以通过将数据库缓存的需频繁访问的数据存储到闪存中而不是从磁盘读取数据来提高数据库性能。当数据库请求数据时,系统⾸先在数据库缓冲区高速缓存中查找。如果找不到数据,则系统将在数据库智能闪存缓存中查找。如果它在那⾥找不到数据,则只会在磁盘存储中查找。您必须在OracleRealApplicationClusters环境中的所有实例上配置闪存缓存,或者不配置任何节点的闪存存储。
  • 最近最少使用列表(LRU):包含指向脏缓冲区和非脏缓冲区的指针。LRU列表有⼀个热端和⼀个冷端。冷缓冲区是近未使用过的缓冲区。热缓冲区经常被访问并且近已经被使用。从概念上讲,只有⼀个LRU,但是对于数据并发,数据库实际上使用了多个LRU。
  • 检查点队列(Checkpointqueue):检查点队列是⼀个链表结构,是由缓冲区头部结构构成;当数据块被修改后,缓冲区通过此链表结构来跟踪数据块的修改。链表的顺序是根据早应用于该数据块的RBA(RedoBlockAddress)地址排序得到的。
  • Flash缓冲区(FlashBufferArea):由DEFAULTFlashLRU链和KEEPFlashLRU链组成。如果没有数据库智能闪存缓存,则当进程尝试访问某个块并且该块在缓冲区缓存中不存在时,该块将⾸先从磁盘读入内存(物理读取)。当内存中缓冲区高速缓存已满时,将根据近少使用(LRU)机制将缓冲区从内存中逐出。使用DatabaseSmartFlashCache,当⼲净的内存中缓冲区过期时,该缓冲区的内容将通过DatabaseWriter进程(DBWn)在后台写入闪存中,并且缓冲区头作为元数据保留在内存中DEFAULT闪存或KEEP闪存LRU列表,具体取决于FLASH_CACHE对象属性的值。KEEP闪存LRU列表用于将缓冲区头保留在单独的列表上,以防⽌常规缓冲区头替换它们。因此,属于指定为KEEP的对象的闪存缓冲区标头倾向于在闪存缓存中保留更⻓时间。如果将FLASH_CACHE对象属性设置为NONE,则系统不会在闪存缓存或内存中保留相应的缓冲区。当再次访问已过期的内存缓冲区时,系统将检查闪存缓存。如果找到了缓冲区,它将从闪存缓存中读回它,这仅花费从磁盘读取的时间的⼀小部分。跨实时应用程序群集(RAC)的闪存缓存缓冲区的⼀致性与缓存融合的维护方式相同。因为闪存高速缓存是扩展高速缓存,并且直接路径I/O完全绕过了缓冲区高速缓存,所以此功能不⽀持直接路径I/O。请注意,系统不会将脏缓冲区放入闪存缓存中,因为它可能必须将缓冲区读取到内存中才能对它们进⾏检查点,因为写入闪存缓存不会计入检查点。
posted @ 2021-07-14 13:41  蟹Bro  阅读(379)  评论(0)    收藏  举报