SGA设置过高问题

本文分析了Oracle数据库启动过程中遇到的共享内存段错误及其原因,并详细介绍了如何通过检查系统内核参数、SGA设置及交换区使用情况来诊断和解决问题。

1、检查alter文件警告信息,如下:

WARNING: EINVAL creating segment of size 内存地址

fix shm parameters in /etc/system or equivalent

则说明系统内核参数设置不合理或与SGA不匹配,检查/proc/sys/kernel/shmmax配置文件

oracle@eGroup2:~> cat /proc/sys/kernel/shmmax
2147483648

确认共享内存段为2G

 

2、检查SGA设置

SQL> show sga

Total System Global Area 4108759040 bytes
Fixed Size      2166128 bytes
Variable Size   2197815952 bytes
Database Buffers  1895825408 bytes
Redo Buffers     12951552 bytes

确认SGA大小为4G,超过shmmax的2G设置,这样将导致oracle为其分配多个共享内存段

 

3、检查交换区

oracle@eGroup2:~> top
top - 08:43:25 up 33 days,  2:08,  2 users,  load average: 0.02, 0.03, 0.00
Tasks: 160 total,   1 running, 156 sleeping,   3 stopped,   0 zombie
Cpu(s):  0.9%us,  0.2%sy,  0.0%ni, 98.4%id,  0.0%wa,  0.1%hi,  0.4%si,  0.0%st
Mem:   8118112k total,  5689536k used,  2428576k free,   397052k buffers
Swap:  2104472k total,      212k used,  2104260k free,  3733452k cached

查看到这里使用了2G的SWAP,而物理内存剩余也还有2G,没有用完,所以不会产生大量交换导致出现异步I/O的问题

若出现物理free空间过低的情况时,则需缩小SGA设置

 

4、再次确认SGA、物理内存调整后的状态

 

 

 

### Oracle SGA 设置的合适大小与最佳实践 在配置 Oracle 数据库时,SGA(System Global Area)的大小设置是一个关键因素。SGA 是 Oracle 数据库的核心内存结构,用于缓存数据块、共享 SQL 语句和其他信息。以下是关于如何合理设置 SGA 大小的最佳实践和建议。 #### 1. SGA 的组成部分 SGA 包含多个子组件,包括但不限于: - **数据库缓冲区缓存 (Database Buffer Cache)**:用于存储从数据文件中读取的数据块。 - **重做日志缓冲区 (Redo Log Buffer)**:用于存储尚未写入重做日志文件的更改。 - **共享池 (Shared Pool)**:用于存储共享 SQL 语句、PL/SQL 程序单元和其他元数据。 - **大池 (Large Pool)**:用于分配较大的内存块,例如 RMAN 操作或并行查询。 - **Java 池 (Java Pool)**:用于存储 Java 字节码和对象。 - **流池 (Streams Pool)**:用于支持 Oracle Streams 功能。 每个子组件的大小都会影响 SGA 的整体性能和效率[^1]。 #### 2. SGA 大小的计算方法 SGA大小需要根据服务器的物理内存容量、数据库的工作负载以及应用程序的需求来确定。以下是一些通用的指导原则: - **32 位系统**:由于 32 位系统的地址空间限制,SGA大小通常不能超过 4GB。建议将 SGA 设置为总物理内存的一半左右,但不超过 4GB[^2]。 - **64 位系统**:对于 64 位系统SGA大小可以显著增加,具体取决于服务器的内存容量和工作负载需求。通常建议将 SGA 设置为总物理内存的 60%-80%[^1]。 #### 3. 参数调整与测试 在调整 SGA 大小时,必须注意以下几点: - **隐藏参数**:一些以 `_` 开头的隐藏参数可能会影响 SGA 的行为。这些参数的修改需要格外小心,并且应在 Oracle 官方文档或社区的支持下进行[^1]。 - **测试环境**:在生产环境中应用任何 SGA 参数变更之前,务必在测试环境中充分验证其效果,以避免潜在问题[^1]。 #### 4. 示例配置 以下是一个示例配置脚本,展示如何设置 SGA 的相关参数: ```sql ALTER SYSTEM SET sga_target=4G SCOPE=SPFILE; ALTER SYSTEM SET db_cache_size=2G SCOPE=SPFILE; ALTER SYSTEM SET shared_pool_size=1G SCOPE=SPFILE; ALTER SYSTEM SET large_pool_size=512M SCOPE=SPFILE; ``` 在上述示例中: - `sga_target` 被设置为 4GB,表示 SGA 的目标大小。 - `db_cache_size` 被设置为 2GB,用于数据库缓冲区缓存。 - `shared_pool_size` 被设置为 1GB,用于共享池。 - `large_pool_size` 被设置为 512MB,用于大池。 #### 5. 监控与优化 为了确保 SGA 配置的合理性,可以通过以下视图监控内存使用情况: - `V$SGA`: 显示当前 SGA 的配置和使用情况。 - `V$SGASTAT`: 提供更详细的 SGA 内存分布信息。 - `V$PGASTAT`: 显示 PGA 和 SGA 的统计信息。 通过分析这些视图中的数据,可以进一步优化 SGA大小和各子组件的分配。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值