Oracle 12cR1中性能优化新特性之全数据库缓冲模式
通常情况下,Oracle会决定哪些数据会留在缓冲区中。当没足够的空间时,数据会被写出内存。此外,为了避免大量读取将有用的信息挤出缓冲区,Oracle对有些操作也许会才去绕过缓冲区的措施。Oracle12cR1 (12.1.0.2)引入了全数据缓冲的概念。如果Oracle认为缓冲区大的足以容纳整个数据库,那么,它将会缓冲所有的数据块。此外,可以强制启用全数据缓冲模式。
1. 强制开启全数据库缓冲模式
不是让Oracle自己决定是否开启全数据库缓冲模式,你可以通过ALTER DATABASE命令强制开启该模式。
要想强制开启该模式,需要先将关闭并将库置于mount状态,否则,在打开的数据库上执行该ALTER DATABASE命令将会报错。
SQL>ALTER DATABASE FORCE FULL DATABASE CACHING;
ALTERDATABASE FORCE FULL DATABASE CACHING
*
ERRORat line 1:
ORA-01126:database must be mounted in this instance and not open in any
instance
SQL>
CONN/ AS SYSDBA
SHUTDOWNIMMEDIATE;
STARTUPMOUNT;
ALTERDATABASE FORCE FULL DATABASE CACHING;
ALTERDATABASE OPEN;
然后,查询V$DATABASE视图就会看到修改结果。
SELECTforce_full_db_caching FROM v$database;
FOR
---
YES
SQL>
2. 强制禁用全数据库缓冲模式
强制禁用全数据库缓冲模式和强制开启类似。
CONN/ AS SYSDBA
SHUTDOWNIMMEDIATE;
STARTUPMOUNT;
ALTERDATABASE NO FORCE FULL DATABASE CACHING;
ALTERDATABASE OPEN;
通过查V$DATABASE视图也可以看到修改后的变化。
SELECTforce_full_db_caching FROM v$database;
FOR
---
NO
SQL>
3. 注意
1) COMPATIBLE参数必须设置为12.0.0或更高。
2) 如果正使用AMM或 ASMM,可能会调整缓冲大小,从而导致缓冲太小而容不下整个数据库。需要合理调整内存参数或DB_CACHE_SIZE参数为稍大点的正确值。
3) 数据对象不会被预先加载到缓冲区,而是在被存取时被加载。
4) 当强制开启全数据库缓冲模式时,被定义为非缓冲的LOB数据也会被缓冲,在常规模式时,这些LOB数据不会被缓冲。
5) 当使用多宿主库选项时,强制开启全数据库缓冲模式会多CDB和所有PDB起作用。
6) 如需恢复控制文件,应先检查全数据库缓冲模式是否开启。
----------------------------------------------------------
《高性能SQL调优精要与案例解析》
blog1:http://www.cnblogs.com/lhdz_bj
blog2:http://blog.itpub.net/8484829
blog3:http://blog.csdn.net/tuning_optmization
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用