Linux的daemon进程对Oracle数据库的SGA使用大页内存的处理

简介: Oracle对运行在机器内存超过32G上的数据库推荐使用HugePages 来容纳Oracle数据库的SGA,参见。

大页内存管理在Oracle数据上的应用


Oracle对运行在机器内存超过32G上的数据库推荐使用HugePages 来容纳Oracle数据库的SGA,参见。

Note: 401749.1 - Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration

Note: 361323.1 - HugePages on Linux: What It Is… and What It Is Not…

在linux上配置sga使用hugepage的方法参见: https://blog.csdn.net/weixin_43424368/article/details/104518609

在linux上大页管理使内存的管理单位从4K提高到2M,大大提高了系统的性能,我用swingbench测试的结果是使TPS值大约提高了10%。

配置成功后,数据库启动时在Oracle的alert log中有相应的提示,例如:

************************ Large Pages Information *******************
Per process system memlock (soft) limit = 227 GB
Total Shared Global Region in Large Pages = 190 GB (100%)
Large Pages used by this instance: 97281 (190 GB)
Large Pages unused system wide = 3 (6144 KB)
Large Pages configured system wide = 97284 (190 GB)
Large Page size = 2048 KB
********************************************************************


daemon启动Oracle数据库时SGA无法使用大页管理

在大页管理的配置中需要对Oracle的用户增加memlock的设置,但用daemon启动Oracle的数据库时用以系统服务的方式进行的,并没有配置memlock参数,因此SGA无法使用大页管理,在alert log中有下面的提示:

************************ Large Pages Information *******************
Per process system memlock (soft) limit = 64 KB
Total Shared Global Region in Large Pages = 0 KB (0%)
Large Pages used by this instance: 0 (0 KB)
Large Pages unused system wide = 97284 (190 GB)
Large Pages configured system wide = 97284 (190 GB)
Large Page size = 2048 KB
RECOMMENDATION:
  Total System Global Area size is 190 GB. For optimal performance,
  prior to the next instance restart:
  1. Large pages are automatically locked into physical memory.
 Increase the per process memlock (soft) limit to at least 190 GB to lock
 100% System Global Area's large pages into physical memory
********************************************************************


Linux已经配置了大页而Oracle的SGA没有使用的后果

如果Linux已经配置了大页而Oracle的SGA没有,那么SGA将会放在普通的内存页面,将会造成内存耗尽,实际测试中,Centos和Redhat系统处于自我保护会把Oracle进程杀掉,而Oracle的linux(Unbreakable Enterprise Linux)不会。

[oracle@localhost scott]$ dstat -mt 20
------memory-usage----- ----system----
 used  buff  cach  free|     time     
3721M 8192B 6104M 1693M|02-04 03:47:29
5018M 8192B 6146M  353M|02-04 03:47:49
5232M 8192B 6146M  140M|02-04 03:48:09
5277M 8192B 6146M 94.2M|02-04 03:48:29


解决方案

修改文件/etc/security/limits.conf进行配置对daemon是没有用的,因为这个文件是为通过PAM登录的用户设置资源限制。需要对应修改文件“/etc/init.d/daemon-agent ”,增加一行:


LimitMEMLOCK=unlimited

或者修改/usr/lib/systemd/system/daemon-agent.service


[Service]
LimitMEMLOCK=infinity
LimitNOFILE=65535


修改完,需要systemctl daemon-reload。

启动时在alert log中有下面的提示,注意memlock是unlimited。

************************ Large Pages Information *******************
Per process system memlock (soft) limit = UNLIMITED
Total Shared Global Region in Large Pages = 190 GB (100%)
Large Pages used by this instance: 97281 (190 GB)
Large Pages unused system wide = 3 (6144 KB)
Large Pages configured system wide = 97284 (190 GB)
Large Page size = 2048 KB
********************************************************************


相关文章
|
10天前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
2月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
180 6
|
11天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
29 3
|
11天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
25 3
|
14天前
|
算法 Linux 开发者
深入探究Linux内核中的内存管理机制
本文旨在对Linux操作系统的内存管理机制进行深入分析,探讨其如何通过高效的内存分配和回收策略来优化系统性能。文章将详细介绍Linux内核中内存管理的关键技术点,包括物理内存与虚拟内存的映射、页面置换算法、以及内存碎片的处理方法等。通过对这些技术点的解析,本文旨在为读者提供一个清晰的Linux内存管理框架,帮助理解其在现代计算环境中的重要性和应用。
|
11天前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
21天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
66 3
|
1月前
|
存储 Oracle 关系型数据库
|
20天前
|
存储 缓存 监控
|
20天前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
194 2