lock_sga = true 的问题

本文详细介绍了在AIX、HP-UX、Solaris、Windows等操作系统下,通过设置特定参数实现SGA锁定在物理内存中,减少页面换入换出,提升数据库性能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于几乎所有的操作系统都支持虚拟内存,所以即使我们使用的内存小于物理内存,也不能避免操作系统将SGA 换到虚拟内存(SWAP)。所以我们可以尝试使得SGA 锁定在物理内存中不被换到虚拟内存中,这样减少页面的换入和换出,从而提高性能。但在这里遗憾的是,windows 是无法避免这种情况的。下面我们来参考在不同的几个系统下怎么实现lock_sga

AIX 5L(AIX 4.3.3 以上)
logon aix as root
cd /usr/samples/kernel
./vmtune (信息如下) v_pingshm已经是1
./vmtune -S 1
然后oracle用户修改initSID.ora 中 lock_sga = true
重新启动数据库

HP UNIX
Root身份登陆
Create the file "/etc/privgroup": vi /etc/privgroup
Add line "dba MLOCK" to file
As root, run the command "/etc/setprivgrp -f /etc/privgroup":
$/etc/setprivgrp -f /etc/privgroup
oracle用户修改initSID.ora中lock_sga=true
重新启动数据库

SOLARIS (solaris2.6以上)
8i版本以上数据库默认使用隐藏参数 use_ism = true ,自动锁定SGA于内存中,不用设置lock_sga, 如果设置 lock_sga =true 使用非 root 用户启动数据库将返回错误。

WINDOWS
不能设置lock_sga=true,可以通过设置pre_page_sga=true,使得数据库启动的时候就把所有内存页装载,这样可能起到一定的作用。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20709695/viewspace-708219/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20709695/viewspace-708219/

### 关于内存不足错误的原因分析与解决方案 #### 原因分析 内存不足错误通常发生在应用程序尝试分配超出可用物理或虚拟内存资源的情况下。以下是几种常见场景及其可能原因: 1. **Java Heap Space 错误** 当 Java 应用程序试图分配的对象超出了 JVM 的堆空间大小时,会抛出 `OutOfMemoryError`。这可能是由于初始堆大小过小或者存在内存泄漏引起的[^1]。 2. **PermGen Space 错误** 这种错误主要出现在较旧版本的 JDK 中(如 JDK 7 及更早)。当类加载器无法释放已加载的类定义,并且这些类占用的空间超过了 Permanent Generation 区域的最大容量时,就会发生此错误。解决方法通常是增加 PermGen 空间大小或升级到支持 Metaspace 的新版本 JDK。 3. **CPLEX 内存管理问题** 如果在优化过程中频繁调用 CPLEX 并未清理之前的解池,则可能导致内存逐渐耗尽并最终触发 `Out of memory` 错误。这是因为每次迭代都会向解池中添加新的候选解而未能及时清除无用数据[^2]。 4. **Eclipse 默认 JVM 配置限制** Eclipse 启动时使用的默认最小/最大堆尺寸较小 (-Xms8m -Xmx128m),对于某些复杂项目来说远远不够。因此,在执行高负载操作之前应该适当调整这些参数以避免 OOM 异常[^3]。 5. **Linux 下 Jack 编译工具链中的 OOM** Android 开发环境中如果遇到类似的 “out of memory” 报告,则可以通过修改 jack server 的启动选项来增大其允许使用的 RAM 数量。具体做法包括编辑配置文件以及重新初始化服务进程[^4]。 6. **Oracle 数据库实例启动失败 (Windows)** 对于 Oracle 数据库而言,特别是在 Windows 上运行 32 位操作系统时,可能会因为设置了不合适的 SGA 参数而导致 ORA-27102 错误消息显示缺少足够的连续地址空间锁定整个共享全局区(SGA)[^5]。 #### 解决方案建议 针对以上提到的各种情况分别给出如下应对措施: 1. **扩大 Java 虚拟机堆内存** 修改应用服务器或其他依赖环境变量设置命令行参数 `-Xms<initial_size>` 和 `-Xmx<maximum_size>`, 如下所示: ```bash java -Xms512M -Xmx2G MyApplication ``` 2. **提升 PermGen/Metaspace 容限** 使用以下任一方式扩展永久代存储能力(适用于老版JDK), 或者切换至最新发行版启用元空间替代机制(-XX:MetaspaceSize,-XX:MaxMetaspaceSize): ```bash java -XX:PermSize=256M -XX:MaxPermSize=512M ... ``` 3. **控制 CPLEX 解池规模** 设置合理的解数量上限并通过 API 显式删除不再需要的结果对象从而减少累积消耗. 4. **自定义 Eclipse VM Arguments** 打开 Run Configuration -> Arguments Tab 输入更大的 Xmx 值比如下面这样子: ```text -Xms256m -Xmx1024m ``` 5. **调节 Linux 杰克编译器内存限额** 更新 ~/.jack 文件内容并将相关环境变量导出后再重启杰克守护线程. ```bash export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8g" ./prebuilts/sdk/tools/jack-admin stop-server && \ ./prebuilts/sdk/tools/jack-admin start-server ``` 6. **修正 Oracle 初始化脚本冲突项** 检查 init<SID>.ora 是否含有不当设定 LOCK_SGA=true 结合实际硬件条件合理规划总SGA大小. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值