Oracle 配置多个缓冲池(Keep pool Recycle Pool)

默认情况下,Oracle只有一个缓冲池 - Buffer Cache,其可以满足基本数据缓存需求。但某些数据的访问模式可能与普通数据不同,对于访问非常频繁的数据和很少访问的数据(两种极端),Oracle可以支持配置两个独立的缓冲池来存放该类数据,特殊的缓冲池针对两种访问模式做了优化,以提升系统性能。

目录

  • 一、Oracle缓冲池简介
  • 二、缓冲池设置
    • 2.1 使用v$db_cache_advice预估缓冲池大小
    • 2.2 设置Keep Pool
    • 2.3 设置Recycle Pool
    • 2.4 为对象指定缓冲池

一、Oracle缓冲池简介

Oracle在访问数据时需要预先将数据缓存到buffer cache中,我们期望每次需要读取数据时,数据已经在Buffer Cache中,这样可以完全避免物理I/O。但buffer cache的大小是有限的,不可能将所有数据都放到内存中。

每当访问新的数据时,Oracle会将其加载进buffer cache,如果这个对象非常大,那么意味着同样多的数据要被挤出(age out)去。但是这个对象又不需要频繁访问,那么将大量热数据挤出Buffer Cache会导致后续更多的物理I/O,造成性能下降。

为了解决这类问题,Oracle还可以配置2个额外缓冲池作为buffer cache的补充:
• Buffer Cache,缓存近期访问的数据,Oracle的默认缓冲池
• Keep Pool,缓存热点数据,独立缓冲池,需额外配置
• Recycle Pool,缓存不经常访问的数据,独立缓冲池,需额外配置

根据数据的访问频率我们即可将对象分配到不同的缓冲池中,避免大表扫描带来的影响。对于访问频繁的对象(热点),可以指定放在Keep Pool中,降低被刷出内存的概率。而不经常访问的对象,特别是大对象,可以单独缓存在Recycle Pool中,避免将大量数据挤出Buffer Pool。

二、缓冲池设置

缓冲池的大小设置没有固定公式,每个数据库的工作负载都不同,甚至同一数据库在不同时间段的负载都不同。你可以使用Oracle建议的缓冲池设置或自己通过计算预估缓冲池大小。

2.1 使用v$db_cache_advice预估缓冲池大小

如果不知道如何设置各个缓冲池的大小,可以利用v$db_cache_advice视图来辅助分析。Oracle会自动分析系统负载,然后给出一个预估的缓冲池大小和物理I/O的对应关系,你从结果中选出一个"性价比最高"的缓冲池设置。

首先,打开db_cache_advice参数,这是一个动态参数,无需重启数据库:

alter system set db_cache_advice=on; 

在这里插入图片描述
第二步,等待系统在正常的工作负载下运行一段时间,然后查询v$db_cache_size视图:

select name 缓冲池, 
size_for_estimate "缓冲池大小(MB)", 
estd_physical_read_factor "预估物理读因子",
estd_physical_reads "预估物理读次数"
from v$db_cache_advice
where name ='DEFAULT' and advice_status='ON';

在这里插入图片描述

  • "缓冲池"列default,代表的是默认缓冲池buffer cache
  • 预估物理读因子为1的行代表是当前的buffer_cache设置,当前的buffer cache大小是800M
  • 预估物理读因子为相对当前的设置的物理读的比例,示例中如果将buffer cache增加到1360M,那么物理读可以降低到现在的51%。但继续提升缓冲池大小物理I/O降低的效果则不再明显,因此当前工作负载最具性价比的buffer cache大小是1360M。

最后,根据建议值修改buffer cache大小,然后继续观察调整(由于虚拟机内存不够,这里调小了):

alter system set db_cache_size=720m scope=both;

在这里插入图片描述
上面的示例是Buffer Cache大小的调整,对于Keep Pool和Recycle Pool,你可以预估一个初始值,然后用同样的方式在运行中逐步调整。

2.2 设置Keep Pool

对于keep Pool除了使用v$db_cache_advice,还可以直接将要缓存的对象大小加起来,然后设置相应的值:

alter system set db_keep_cache_size=32m scope=both;

在这里插入图片描述

2.3 设置Recycle Pool

Recycle Pool是用来缓存不经常访问的数据,特别是比较大的数据段,尽量保证在一个事务中,数据段不会被频繁的刷出Recycle Pool:

alter system set db_recycle_cache_size=32m scope=both;

在这里插入图片描述

2.4 为对象指定缓冲池

配置好额外的缓冲池后即可以为数据对象分配缓冲池了,根据对象的访问模式,通过alter table/inde/cluster的storage子句指定对应的缓冲池(创建对象时也可以指定),该对象后续加载进内存时则会被放入相应的缓冲池:

alter table t1 storage(buffer_pool keep);  -- 将表t1放入Keep Pool
alter table t1 storage(buffer_pool recycle);  -- 将表t1放入 Recycle pool
alter table t1 storage(buffer_pool default);  -- 将表t1放入 Buffer Cache

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739373.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“312血洗四周年”!比特币冲破7.2万创新高!手持华尔街资金与减半叙事,跃升为全球第8大资产!

在过去一周时间里,比特币三次突破了2021年11月的历史高点。周一,加密市场延续涨势,比特币涨至72000美元以上,盘中一度触及72800美元,以太坊攀升至4000美元以上。 随着比特币再次创下新纪录,其市值已突破1.4…

python基础及网络爬虫

网络爬虫(Web crawler),有时候也叫网络蜘蛛(Web spider),是指这样一类程序——它们可以自动连接到互联网站点,并读取网页中的内容或者存放在网络上的各种信息,并按照某种策略对目标信息进行采集(如对某个网站的全部页面…

记录一下C++的学习之旅吧--C++基础

文章目录 前言using namespace std; 使用标准命名空间一、helloworld-输出表示1.1代码1.2 运行结果 二、变量2.1.1 普通变量代码2.1.2 运行结果2.2.1 常量和变量代码2.2.2 运行结果 三、sizeof---统计数据类型所占的内存大小3.1 代码3.2 运行结果 四、小数表示4.2 运行结果 五、…

基于React低代码平台开发:直击最新高效应用构建

🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 文章目录…

【JavaWeb】Tomacat部署Web项目

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍【JavaWeb】Tomacat部署Web项目的详细使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题…

《为什么学生不喜欢上学?》读书笔记

书简介 美国弗吉尼亚大学心理学教授威林厄姆的教育心理学著作。 作者在文末揭示了撰写此书的目的: 【 教育是将世代积累的智慧传递给孩子,我们强烈地相信它的重要性,因为我们知道,它为每个孩子以及其他所有人都带来了更好生活的希…

./ 相对路径与node程序的启动目录有关

node:internal/fs/sync:78 return binding.openSync( ^ Error: ENOENT: no such file or directory, open D:\前端的学习之路\项目\codeHub\keys\private_key.pem at Object.open (node:internal/fs/sync:78:18) at Object.openSync (node:fs:565:…

【网站项目】014乡镇自来水收费系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

JavaScript---lazyload图片懒加载处理_IntersectionObserver

IntersectionObserver API兼容性: 部分代码展示: // 懒加载处理const imgsElem document.querySelectorAll(img);const topElem document.querySelector(#top);// IntersectionObserverconst Observer new IntersectionObserver((entries, observer) …

PWARL CTF and others

title: 一些复杂点的题目 date: 2024-03-09 16:05:24 tags: CTF 2024年3月9日 今日习题完成: 1.BUU [网鼎杯 2020 半决赛]AliceWebsite 2.[RoarCTF 2019]Online Proxy 3.[Polar CTF]到底给不给flag呢 4.网鼎杯 2020 总决赛]Game Exp [RoarCTF 2019]Online Proxy …

【软件工程导论】——软工学绪论及传统软件工程(学习笔记)

📖 前言:随着软件产业的发展,计算机应用逐步渗透到社会生活的各个角落,使各行各业都发生了很大的变化。这同时也促使人们对软件的品种、数量、功能和质量等提出了越来越高的要求。然而,软件的规模越大、越复杂&#xf…

X64 页表结构

PML4(Page Map Level 4)是x86-64架构中用于管理虚拟内存地址翻译的四级页表结构之一。它是一种树形结构,由多个页目录表(Page Directory Pointer Table,PDPT)组成,每个PDPT有512个指向下一级页表…

Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中)

Hololens 2应用开发系列(3)——MRTK基础知识及配置文件配置(中) 一、前言二、输入系统2.1 MRTK输入系统介绍2.2 输入数据提供者(Input Data Providers)2.3 输入动作(Input Actions)2…

Date类型及dayjs的使用总结

一、Date() Date数据类型用于处理日期和时间,它可以表示自1970年1月1日00:00:00 UTC(Coordinated Universal Time,国际协调时间)以来的毫秒数。 1.创建Date对象 例如:Tue Oct 31 2023 14:01:33 GMT0800 (中国标准时…

算法刷题day28

目录 引言一、截断数组二、双端队列三、日期统计 引言 这几道题是周赛里的几道题目,第一道题目我没用这种方法,但还是做出来了,用的一种比较特殊的思考方法,就是把每一个点都判断出来,不满足要求的就舍弃,…

【你也能从零基础学会网站开发】Web建站之javascript入门篇 JavaScript事件处理

🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 什么是DHTML …

Linux基础命令[16]-head

文章目录 1. head 命令说明2. head 命令语法3. head 命令示例3.1 不加参数3.2 -c(按照字节显示)3.3 -n(按照行数显示)3.4 -v(显示文件名) 4. 总结 1. head 命令说明 head:用来显示文件开头&…

Linux认识与学习BASH

Linux认识与学习BASH 认识BASH这个Shellshell是什么系统的合法shell与/etc/shells功能Bash Shell的功能查询命令是否为Bash shell 的内置命令(type)命令的执行与快速编辑按钮 shell的变量功能什么是变量?变量的使用与设置:echo、变量设置规则、unset环境…

springboot网页时装购物系统链接

链接:https://pan.baidu.com/s/1mCmCSbqUCv48_a6wiLBdJg?pwdfalz 提取码:falz 2600套项目源码 https://kdocs.cn/l/cuAdxEBfLiqA 工作室精心制作,包括小程序项目,springboot项目,传统ssm项目,前后端分离项目。你可以用来制作自…

Stable Diffusion 模型下载:Comic Babes(漫画宝贝)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者datmuttdoe文件名称comicBabes_v2.safet…