memory_target设置不当导致数据库无法启动的问题(r3笔记第38天)
今天在做一个问题排查的时候碰到了另外一个有些“奇怪的”问题。
我们在测试库中已经禁用了SGA自动存储管理,结果在spfile文件里丢掉了shared_pool_size的配置
测试环境的参数类似下面的样子
sga_max_size big integer 12000M
sga_target big integer 0
shared_pool_size big integer 0
db_cache_size big integer 6G
pga_aggregate_target big integer 3147483648
这种配置应该是有问题的,把shared_pool_size的部分给丢掉了。结果查看当前测试库的情况,发现shared_pool多多少少的给了2G。
COMPONENT CURRENT_M MIN_M MAX_M SPECCIFIED_M LAST_OPER LAST_OPER_TYP GRANULE_M
------------------------------ ---------- ---------- ---------- ------------ --------- ------------- ----------
shared pool 2000 992 2000 2000 MANUAL GROW 16
large pool 304 304 512 304 DEFERRED SHRINK 16
java pool 512 512 512 304 STATIC 16
streams pool 0 0 0 0 STATIC 16
DEFAULT buffer cache 6224 6144 6352 6144 MANUAL SHRINK 16
KEEP buffer cache 0 0 0 0 STATIC 16
RECYCLE buffer cache 0 0 0 0 STATIC 16
DEFAULT 2K buffer cache 0 0 0 0 STATIC 16
DEFAULT 4K buffer cache 0 0 0 0 STATIC 16
DEFAULT 8K buffer cache 0 0 0 0 STATIC 16
DEFAULT 16K buffer cache 0 0 0 0 STATIC 16
DEFAULT 32K buffer cache 0 0 0 0 STATIC 16
Shared IO Pool 0 0 0 0 STATIC 16
如果问题到这里,可能就告一段落了。 但是我又认真看了一下,发现还是有问题。SGA有12G左右,分给shared_pool 2G,buffer_cache 6G,加上large_pool,java_pool的还不到9G,剩下的部分到哪去了? 从总体的sga的概览来看 SQL> show sga Total System Global Area 1.1742E+10 bytes Fixed Size 2251264 bytes Variable Size 5200938496 bytes --这个部分还是有很大的差别。按照目前的shared_pool+large_pool+java_pool+stream_pool<3G,剩下的2G可能就是最后的可能,没有分配的内存空间。 Database Buffers 6526337024 bytes Redo Buffers 12193792 bytes 带着这种疑问来查问题,可能你看到很多细节都是潜在的问题。 首先来看进程的情况。结果就发现按照常理进程的owner应该显示是用户名,但是现在却是进程号。 xxxxxx 6545 25419 0 12:44 pts/7 00:00:00 grep smon 3068 21040 1 0 Oct22 ? 00:01:21 ora_smon_TESTCUS1 最后确认了下,原来如果用户名超出8位的时候就会显示为进程号,不是问题。 最后在spfile中先写入shared_pool_size=4G,然后重启数据库的时候,就报错了。 SQL> startup ORA-00838: Specified value of MEMORY_TARGET is too small, needs to be at least 13920M SQL> 从开始查问题的时候就没有注意到这个参数,memory_target是在11g引入的。算是sga自动存储管理的加强版本,能够自动管理sga和pga。 如果大体了解了memory_target和报错的部分,可能一下子就明朗了。 因为当前的Memory_target的值就是12G和sga_max_size是一致的。 这个时候memory_target是12G,而同时pga是3G,那么分配给sga的部分就只有不到9G,这样的情况就相当于设置了sga_max_size=9G 这个时候重新分析下报错信息。我们把shared_pool从2G调整到了4G。这样的话memory_target的大小按照配置应该需要 shared_pool_size(4G)+db_cache(6G)+stream pool(0)+large_pool(300M)+java_pool(300M)+pga(3G)=13600M左右,和报错的部分基本符合。所以到此为止就可以判定是memory_target的设置不当导致了这个问题。 memory_target的设置还是需要重启数据库实例的。重启后查看就没有问题了。 看来很多问题都在一些细节上注意,这个memory_target从一开始就没有注意到,根据客户dba的反馈,他们是直接使用dbca来建的库,可能就是这个时候引入了这个新特性,然后在后期做了buffer size的变更。才发现这个很潜在的问题。
- WCF技术剖析(卷1)之目录
- WCF技术剖析(卷1)之推荐序
- 谈谈基于SQL Server 的Exception Handling[上篇]
- 谈谈WCF中的Data Contract(4):WCF Data Contract Versioning
- 如何在silverlihgt中使用右键
- WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
- silverlight向服务器post数据类
- WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
- 44 Amazing Silverlight 2.0 Screencasts
- CaseStudy(showcase)类库篇-用agTweener来实现动画效果
- CaseStudy(showcase)数据篇-Loading的制作
- CaseStudy(showcase)数据篇-加载图片
- CaseStudy(showcase)数据篇-从XML中获取数据
- CaseStudy(showcase)布局篇-全屏效果
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3分钟短文 | PHP时不时蹦出这串神秘字符,有认识的吗?
- 五分钟看懂 Nginx 负载均衡
- 干掉公式 —— numpy 就该这么学
- 全面解析YOLO V4网络结构
- 刺激!一行代码即可导出所有浏览记录
- 你不知道的 node 爬虫原来这么简单
- 带货直播系统源码中,商品详情页是如何搭建起来的
- 基于飞桨复现CVPR 2020 GhostNet的全程解析
- 【即时通信IM】红包消息如何构建?
- YOLOv4损失函数全面解析
- Pandas进阶修炼120题,给你深度和广度的船新体验
- 5万字、97 张图总结操作系统核心知识点
- C++核心准则CP.100:不要使用无锁编程方式,除非绝对必要
- 神了,Excel的这个操作我今天才知道
- DataFrame(7):DataFrame运算——逻辑运算