Oracle - SGA → data_buffer_cache


1.摘要

           Data_buffer_cache用来保存频繁访问数据的内存缓冲域,以便于oracle用户进程需访问某块数据而首先到data_buffer_cache中寻找能够找到(cache hit),从而大大减少从磁盘读取数据所需要的IO时间(减少物理IO)。


oracle以hash算法快速定位所需命中缓存块clean buffer在 hash chain(hash bucket)上 是否存在;


oracle以write list待写链表快速定位已被修改,但尚未写入磁盘的脏缓存块dirty buffer;


oracle 以LRU list(least recently used)最近最少使用列表,来快速定位可用数据块,包含命中缓存块clean buffer,空闲缓存块free buffer


LRU list 上还包含不可用缓存块pin buffer及未来得及移入write list的脏块


>查看data_buffer_cache大小

SQL> select current_size from v$buffer_pool;(当前分配大小)


CURRENT_SIZE
------------
       16640


SQL> show parameter db%cache_size;(查最低分配值,ASMM下)

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size                    big integer 0
db_2k_cache_size                     big integer 0
db_32k_cache_size                    big integer 0
db_4k_cache_size                     big integer 0
db_8k_cache_size                     big integer 0
db_cache_size                          big integer 0
db_flash_cache_size                  big integer 0
db_keep_cache_size                   big integer 0
db_recycle_cache_size                big integer 0



SQL> show parameter db_block_size;(查默认内存块大小)
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_block_size                        integer     8192


2.DB_buffer_cache四部分结构

   default pool,keep pool,recycle pool,db_nk_cache_size  



3.Default pool

    数据库对象未特别指定时所使用的默认缓冲池,分别以不同的算法处理缓冲区数据,使缓冲数据能尽量长或尽短时间地占用default pool缓冲区。


★工作方式:

     当oracle进程访问一块缓冲区后,会将该缓冲区移动到LRU列表的MRU段(Most recently used),随着更多被访问的缓冲区移动到LRU列表的MRU段,较早前被访问过的缓冲区就会逐渐向 LRU列表的LRU(least recently used)端移动。

     当用户user process执行FTS全表扫描(full table scan)时,数据首次将会从磁盘读入缓冲区,之后将该缓冲区移动到LRU列表的LRU端而非MRU段,以使得这些通过通常只是暂时需要的全表扫描数据所占用的缓冲区能被尽快地移出数据缓冲区,为其他使用频率更高的数据块腾出空间。

       当对小表查询部分数据时,oracle也趋向于执行FTS,若确定该表数据确实需要进行缓冲时,为了避免数据仍按默认规则被放到LRU的LRU端,可使用表的cache特性将该表上的FTS数据指定放到MRU端。

       oracle默认扫描数据为整数据的10%以上为FTS


▲ 查看当前分配的大小


SQL> select component,current_size from v$sga_dynamic_components where component='DEFAULT buffer cache';


COMPONENT                                                        CURRENT_SIZE
---------------------------------------------------------------- ------------
DEFAULT buffer cache                                                335544320


SQL> select name,current_size from v$buffer_pool;


NAME                 CURRENT_SIZE
-------------------- ------------
DEFAULT                       320(M)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值