暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

缓冲区高速换出(Buffer Cache Churning)

原创 2023-04-30
343

处理方法

  1. 增加 SGA 的 DB_CACHE_SIZE。

    a. 增大 DB_CACHE_SIZE 以避免过多的缓冲区换出,将更多的数据和索引限制在内存中。

     ALTER SYSTEM SET DB_CACHE_SIZE = <new_size> [G|M];
    

    b. 支持多个缓冲池分配过程,以统一管理整个库所需的内存。需要在初始化参数文件中增加以下语句:

     db_cache_size = <new_size>
     db_keep_cache_size = <keep_pool_size>
     db_recycle_cache_size = <recycle_pool_size>
    
  2. 考虑使用 Keep Pool 或 Recycle Pool 来管理不同类型的对象。

    a. 对于经常使用但空间较小的对象,可以将其保留在 Keep Pool 中;对于暂时不被使用、但可能在未来再次使用的对象,可以将其放入 Recycle Pool 中。

     -- 将一个表的缓存设置为:KEEP
     ALTER TABLE table_name CACHE KEEP;
    
     -- 将一个表的缓存设置为:RECYCLE
     ALTER TABLE table_name CACHE RECYCLE;
    

    b. 处理后的对象直接进入相应缓存池,缓解了 SGA 被占用导致大量IO带来的消耗。

  3. 调整应用程序以减少磁盘 I/O。

    a. 减少随机读写、调整访问范围和频率等手段可以减少磁盘 I/O 的消耗。
    b. 对于读取相关数据表,可以进行预加载,也可以对 HOT 块参数单独设置,避免对整个分区加载,最终降低 I/O 负担。

  4. 考虑使用 Automatic Memory Management(AMM)或 Automatic Shared Memory Management(ASMM)自动调整内存分配。

    a. 通过使用 AMM 或 ASMM,数据库系统可以根据需要自动配置和重新配置其内存资源。

     ALTER SYSTEM SET MEMORY_TARGET = <new_size> [G|M];
    

    b. Oracle 数据库实例能根据应用程序数据的工作负载自动调整内存分配。需要在初始化参数文件中增加以下语句:

     memory_target = <new_size>
     sga_target = <sga_size>
     db_cache_size = <cache_size>
     shared_pool_size = <pool_size>
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论