Buffer Cache---概述

本文介绍了Oracle数据库的Buffer Cache,包括其示意图、内存结构如Hash Bucket、Cache Buffer Chain、Buffer Header、LRU链表等。讨论了Buffer Cache的大小计算,如db_block_size、db_cache_size等参数,并通过SQL查询展示了实际的Buffer Cache大小和管理缓冲区的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Buffer Cache示意图


这个图只是简单的展示出了一些重要的东西,实际要比这复杂。两条重要的链表,LRU链表和CHECKPOINTQ链表。Buffers的状态,Pinned、Clean、Free or unused、Dirty。一些buffer cache的参数,db_block_size: buffer cache的块大小、db_cache_size:buffer cache大小。db_recycle_cache_size:recycle cache 大小。db_keep_cache_size:keep cache大小。

二、Buffer Cache的内存结构

1、Hash Bucket

2、Cache Buffer Chain

3、Buffer Header

4、LRU链表

5、CheckpointQ、ObjectQ、FileQ

三、Hash Bucket 示意图


四、可用的Buffer Cache是多少呢

隐含参数_db_block_hash_buckets(Number of database block hash buckets)确定hash bucket数量。 我的系统是262144(感觉这个这个不太对,一般比db_block_buffers的两倍大一些,这里大的比较多)

隐含参数_db_block_buffers(Number of database blocks cached in memory)确定用户可用的buffer数量。我的是68985

SQL> select 8192*68985 from dual;

8192*68985
----------
 565125120==<用户可用的BUFFER==表的数据>

真正的BUFFER多少大呢?

SQL> show parameter db_cache_size

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_cache_size                        big integer 0

###db_cache_size=0 说明数据库使用的是asmm,db_cache_size看不出buffer cache大小,可以用v$sgainfo视图去查看。

SQL> select * from v$sgainfo where name like '%Buffer%';

NAME                                  BYTES RES
-------------------------------- ---------- ---
Redo Buffers                        7495680 No
Buffer Cache Size                 587202560 Yes

SQL> select 587202560-565125120 from dual;

587202560-565125120
-------------------
           22077440===> (管理BUFFER内存==》BUFFER HEADER,BH)

###多出来的buffer是存放bh的。
###v$sga_dynamic_components,v$sga_resize_ops也可以查询当前buffer多大






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值