暂无图片
为什么限制了Oracle的SGA和PGA,OS仍然会用到SWAP?
我来答
分享
水羽
2022-08-01
为什么限制了Oracle的SGA和PGA,OS仍然会用到SWAP?

OS:Oracle-Linux-6.9

DB:Oracle-11.2.0.4 单实例架构

系统内存:256GB


数据库SGA=75G,PGA=8G


SGA+PGA=75G+8G=83G,约为系统内存(256G)的33%,低于Oracle默认的40%,但在业务高峰期,OS层面仍然出现频繁的SWAP读写:(下图为 vmstat 命令的输出信息)(系统CPU线程数:64)


有点疑惑:该服务器只有Oracle-DB在用,没有部署其它东西,为什么限制了SGA和PGA只占系统内存的33%,却仍然无法避免SWAP读写?是否说明Oracle实际使用内存的大小并不会受SGA和PGA参数值的限制?

如果要通过 lock_sga 和 pre_page_sga 这两个参数来把SGA锁在内存中,需要满足什么条件?比如什么数据库版本和哪个操作系统版本之类的。

我来答
添加附件
收藏
分享
问题补充
5条回答
默认
最新
刘贵宾
2022-08-01
暂无图片 评论
暂无图片 有用 1
打赏 0
暂无图片
布衣
暂无图片
2022-08-01

这是个好问题,我也关注一下

暂无图片 评论
暂无图片 有用 0
打赏 0
刘贵宾
2022-08-01

如果要通过 lock_sga 和 pre_page_sga 这两个参数来把SGA锁在内存中,需要满足什么条件?

操作系统版本

Linux OS - Version: Enterprise Linux 4.2 and later   [Release: RHEL4U2 and later ]
Linux x86
Linux x86-64
Linux Kernel - Version: 4.2

另外需要将max locked memory设置足够的大,或者设为unlimited

暂无图片 评论
暂无图片 有用 1
打赏 1
水羽
题主
2022-08-01
多谢指点!
张sir
2022-08-01

这个问题我以前也关注过,你可以这么做,

1、首先你看下/proc/meminfo,看看是不是开启了大页,以及pagetable占用的内存情况。

2、下载一个smem工具,看看具体哪个进程占用了实际内存。

3、我发现过多次数据库bug,导致进程内存泄漏的情况。

4、有一些长连接,一直挂在数据库上,导致内存不释放。

5、有些数据库有大量的io,这个io会占用内存的缓存,如果你的数据库没有用asm的话,长时间运行的数据库会有这种情况。

6、最好是定期重启操作系统,释放内存。

暂无图片 评论
暂无图片 有用 1
打赏 0
水羽
题主
2022-08-02
多谢指点!受益良多!
肖杰
2022-08-02

你不能光算sga,pga啊 你还需要算每个进程消耗的内存,官网给的计算公式 :
https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-processes.html#GUID-17E572DA-A048-410A-9C81-744D15867345

官网很保守,只算了4M,实际情况中可能需要按5-10M去算,然后配置合理的process

暂无图片 评论
暂无图片 有用 1
打赏 0
水羽
题主
2022-08-02
多谢指点!受益良多!
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏