zoukankan      html  css  js  c++  java
  • oracle中如何把小表钉在内存中

    oracle 8i中db_block_buffer的大小决定buffer cache的大小

    oracle 9i&10g中由db_cache_size的大小来决定

    因为内存空间是有限的,所以oracle采用LRU算法来调度谁来使用内存

    但是因为许多的批处理操作(如全表扫描)可能会导致buffer cache的刷新,

    这会导致将经常使用的数据挤出buffer cache

    oracle在改进LRU算法的同时,采用了另一技术:就是buffer cache的多缓冲池做法

    oracle的db_buffer_pool由三部分组成:

    buffer_pool_defualt

    buffer_pool_keep

    buffer_pool_recycle

     

    如果要把表钉死在内存中,也就是把表钉在keep区。

       相关的命令为:

    alter table ..... storage(buffer_pool keep);

    这句命令把表示表如果缓存的话是缓存在keep区。

    可以通过语句:

    select owner,table_name from dba_tables where buffer_pool='KEEP';查询到改表是放在keep区中的。

    但是不意味着表已经被缓存了,只是说明你可以进去keep pool。

    下面的语句把表缓存:

    alter table  .... cache;

    可以通过

    select  owner,table_name from dba_tables where rtrim(cache)='Y';

    查询到该表已经被缓存了。

    加入到keep区的表不是说不能被移出内存,不过是比较不容易移出内存。

    也可以手工来移出内存,命令如下:

    alter table ... nocache;

  • 相关阅读:
    远程诊断DoIP
    基于linux内核包过滤技术的应用网关
    Boost内存池使用与测试
    C++ 编程规范
    大象——Thinking in UML
    C++ 创建类时常考虑的问题
    SLIP—串行线路上传输数据报的非标准协议
    神秘的程序员——编程的乐趣
    Bad Smell (代码的坏味道)
    模式与软件架构——软件架构的非功能特征
  • 原文地址:https://www.cnblogs.com/taowang2016/p/3284612.html
Copyright © 2011-2022 走看看