zoukankan      html  css  js  c++  java
  • (转) 【oracle调优】优化全表扫---cache整张表或索引

    情景分析: 

         1)某查询必须要走全表扫描

         2)该查询执行的频率相当高

         3)对执行时间的要求也相当苛刻的话

         4)数据库的IO比较吃紧

         5)数据库的内存比较宽松

         6)该表的大小没有大到离谱

    以上情况下,可以使用“把整张表放到内存里”的方式进行优化

    操作方法:

    --缓存abs_assetreturnschedule 表
    alter table abs_assetreturnschedule storage(buffer_pool keep);
    
    --缓存索引 PK_ASSETIDRETURN
    alter index PK_ASSETIDRETURN storage(buffer_pool keep) ;
    
    --查看keep区
    select table_name from user_tables where buffer_pool='KEEP';
    
    --清除缓存
    alter table abs_assetreturnschedule nocache;

    原理解析:

    主要oracle的buffer pool分为三个区,default、recycle和keep。

    三个区可以分别设置大小,通过spfile文件里的参数

    db_cache_size

    db_keep_cache_size

    db_recycle_cache_size

    如果没有对表放置的buffer pool区进行指定,则会放置在default区。Default区也是三个区里面最大的。

    Default区跟keep区的置换算法是相同的,都是lru(近期最少使用)算法,但是由于把特定表放在keep区,则没有其他表对该表进行竞争,除了那些也被放置在keep区的表或索引。那么keep区的对象也就因为竞争小的缘故能够更稳定的留存在内存里面。

  • 相关阅读:
    oracle锁表查询,资源占用,连接会话,低效SQL等性能检查
    oracle临时表
    oracle列转行
    oracle数据库查询重复记录
    查找mysql的cnf文件位置
    Nginx反向代理,负载均衡,redis session共享,keepalived高可用
    Linux 软件安装
    Linux上网设置
    c#学习内容
    PHP八大设计模式
  • 原文地址:https://www.cnblogs.com/tzhyy/p/9641510.html
Copyright © 2011-2022 走看看