memory_target设置不当导致数据库无法启动的问题

简介: 今天在做一个问题排查的时候碰到了另外一个有些“奇怪的”问题。 我们在测试库中已经禁用了SGA自动存储管理,结果在spfile文件里丢掉了shared_pool_size的配置 测试环境的参数类似下面的样子 sga_max_size             ...
今天在做一个问题排查的时候碰到了另外一个有些“奇怪的”问题。
我们在测试库中已经禁用了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
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的变更。才发现这个很潜在的问题。








目录
相关文章
|
10月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
577 3
|
10月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
857 2
|
11月前
|
应用服务中间件 数据库
Tomcat 的数据库连接池设置与应用
Tomcat 的数据库连接池设置与应用
134 3
|
11月前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
11月前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
1446 1
|
SQL 关系型数据库 MySQL
MySQL数据库中给表添加字段并设置备注的脚本编写
通过上述步骤,你可以在MySQL数据库中给表成功添加新字段并为其设置备注。这样的操作对于保持数据库结构的清晰和最新非常重要,同时也帮助团队成员理解数据模型的变化和字段的具体含义。在实际操作中,记得调整脚本以适应具体的数据库和表名称,以及字段的详细规范。
325 8
|
关系型数据库 MySQL 数据库
设置MySQL 创建数据库,默认为UTF-8
设置MySQL 创建数据库,默认为UTF-8
77 0
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
666 1
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
3月前
|
SQL 关系型数据库 MySQL
Go语言数据库编程:使用 `database/sql` 与 MySQL/PostgreSQL
Go语言通过`database/sql`标准库提供统一数据库操作接口,支持MySQL、PostgreSQL等多种数据库。本文介绍了驱动安装、连接数据库、基本增删改查操作、预处理语句、事务处理及错误管理等内容,涵盖实际开发中常用的技巧与注意事项,适合快速掌握Go语言数据库编程基础。
261 62

热门文章

最新文章