在Linux上,全部SGA大小被限制为2G,有多种方法可以为SGA分配更多的内存,但是最可靠和灵活的方法需要使用到共享内存文件,如在RHEL2.1下的shmfs或RHEL3、4、5下的ramfs,本文描述在Red Hat企业版Linux以及它的克隆版本上创建非常大的高速缓存的方法。
Red Hat企业版Linux(RHEL)2.1
创建一个共享内存文件系统(shmfs)
shmfs是一个内存文件系统,因此它可以与Red Hat Linux AS2.1支持的虚拟内存的最大大小一样大,虽然理论上企业版内核支持超过64GB内存,但目前最大是16GB。
shmfs是root用户使用下面的命令创建的:
mount -t shm shmfs -o size=3g /dev/shm
通过在/etc/fstab中添加下面一行,共享内存文件系统可以被自动挂载:
shmfs /dev/shm shm size=3g 0 0
在上面的例子中,我创建了一个3G大小的shmfs,也是我计划使用的高速缓存的大小,SGA的其他组件放在常规内存中,而不是这个共享内存文件系统中,因此在考虑shmfs的大小时不要将它们包括进来了,比实际需要的大小要稍微大一点,本例中我使用3G shmfs作为高速缓存。
开启大页面支持
在/boot/grub/grub.conf文件中添加bigpages=xMB到相关的内核条目后来开启大页面支持,这里的x象下面这样计算:
总SGA大小(单位G)*1024
然后围绕这个值取整百,因此一个4G大小的SGA,我们做下面的计算:
4*1024=4096=4100
因此/boot/grub/grub.conf文件条目看起来就是:
kernel /vmlinuz-2.4.9-e.40enterprise ro root=/dev/cciss/c0d0p2 bigpages=4100MB
保存后应该重启系统,然后你必须作为root用户执行下面的命令:
echo 2 > /proc/sys/kernel/shm-use-bigpages
你可以直接在/etc/sysctl.conf文件中添加一行让这个值固定下来:
kernel.shm-use-bigpages = 2
Red Hat企业版Linux(RHEL)3、4和5
挂载ramfs文件系统,并确认它对oracle是可用的
umount /dev/shm
mount -t ramfs ramfs /dev/shm
chown oracle:oinstall /dev/shm
将这些命令添加到/etc/rc.local文件中,和RHEL2.1的方法一样,只有高速缓存存储在这个位置。
因为Oracle会为共享池锁住共享内存,我们必须在/etc/security/limits.conf中调整memlock参数,memlock以Kb为单位进行表示的,因此对于一个2G大小的共享池,我们至少需要(2*1024*1024=2097152),如下所示:
oracle soft memlock 2097152
oracle hard memlock 2097152
实际上,最好稍微比这个数值大一点。
设置SHMMAX值
对于32位架构,shmmax值应该设置为物理内存的一半,最大值为4294967295,对于一个有6G内存的服务器,我们可以作为root用户使用下面的命令将这个值设为3G(物理内存的一半):
echo 3221225472 > /proc/sys/kernel/shmmax
另外还可以设置在/etc/sysctl.conf文件中:
kernel.shmmax = 3221225472
你的/etc/sysctl.conf文件看起来应该象下面这样:
kernel.shmmax = 3221225472
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 1000 32000 100 150
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
kernel.shm-use-bigpages = 2
修改/etc/sysctl.conf文件后,使用下面的命令应用而无需重新启动系统:
/sbin/sysctl -p
实例参数
必须修改一些实例参数以允许oracle实例使用共享内存文件系统,在处于运行中的实例上可以使用alter system set命令或离线修改spfile文件操作spfile参数,:
-- Change the parameter value in the spfile directly.
ALTER SYSTEM SET parameter = value SCOPE=spfile
-- Create a pfile with the contents of the current spfile.
CREATE PFILE='/tmp/pfile' FROM SPFILE;
-- Manually manipulate the contents of the pfile.
-- Recreate the spfile from the amended pfile.
CREATE SPFILE FROM PFILE='/tmp/pfile';
下面的参数应该被添加到spfile或pfile中:
use_indirect_data_buffers=true
同时,所有涉及到db_cache_size和db_xK_cache的参数都应该被移除,使用旧版本风格的db_blcok_buffers参数条目代替:
# 3Gig for an 8K db_block_size. ((3 * 1024 * 1024) / 8) = 393216
db_block_buffers = 393216
这意味着使用这种方法时多数据块大小特征将不可用,记住高速缓存仅仅是SGA的一部分。
分享到:
相关推荐
通过上述关键技术的应用,可以在 Linux VM 平台上可靠地运行 Oracle 数据库实例,同时扩展 SGA 的大小以满足更高负载的需求。这些技术不仅解决了传统虚拟内存管理的问题,还提升了系统的整体性能和稳定性。未来,...
在优化oracle的时候,遇到了oracle的SGA大小远远大于linux系统共享 内存的最大值,以至于当用ipcs命令查看的时候,oracle的SGA区被分成了10个段,这大大影响的oracle的反应速度。本文将为大家介绍linux操作系统修改...
红旗Linux(RedFlag Linux),作为全球领先的Linux操作系统提供商,与Oracle等全球最大的数据库厂商合作,推出了RedFlagDCServer4.0,旨在为企业级数据库应用提供强有力的支持。 #### RedFlagDCServer4.0:企业级...
3. 如果调整了数据库SGA大小,新的SGA可能不再适应原有的HugePages配置,此时最好先禁用HugePages,启动新SGA大小的数据库,再运行`hugepages_settings.sh`脚本重新计算。 最后,确认Oracle数据库实例正在运行,...
- `sga_max_size` 和 `sga_target`:设置共享全局区域的最大大小和目标大小。 3. **修改参数值**: - 修改 `db_name` 为 `mynewdb`。 - 注释掉 `db_block_buffers` 和 `shared_pool_size`。 - 修改 `control_...
在AS 2.1中,Oracle SGA最大可以扩展到2.7GB。这需要修改操作系统的基地址、调整SGA限制,并使用特定的命令(如`echo 268435456 > /proc/$pid/mapped_base`和`echo 3000000000 > /proc/sys/kernel/shmmax`)以及...
**说明**:用于设置socket数据发送缓冲区及接收缓冲区的默认值大小与最大大小。 - **建议值**:根据实际需求调整,如`net.core.rmem_default=262144`、`net.core.rmem_max=4194304`、`...
- `sga_target=285212672`: 共享全局区(SGA)的目标大小。 - `undo_management=AUTO`: 自动撤销管理。 - `undo_retention=900`: 撤销数据保留时间。 - `undo_tablespace=UNDOTBS1`: 撤销表空间。 - `user_dump_...
前两天看到一篇Redhat...这个值的设置应该大于SGA_MAX_TARGET或MEMORY_MAX_TARGET的值,因此对于安装Oracle数据库的系统,shmmax的值应该比内存的二分之一大一些。 # grep MemTotal /proc/meminfo # cat /proc/sys/k
- `kernel.sem=250 32000 100 128`:这些参数分别控制信号量集合中的最大信号量数、系统中可允许的最大信号量数、单个semop()调用在一个信号量集合上可以执行的操作数量以及系统信号量集合总数。 - `...
Cache的大小、速度和层次结构是决定CPU性能的关键因素之一。 Buffer Cache与Cache的区别在于,Buffer Cache特指Oracle数据库中的数据缓冲区,主要优化的是磁盘I/O,而Cache则涵盖了从硬件层面到操作系统层面的各种...
4. **kernel.sem**: 这是一个复合参数,用于设置信号量设置,包括semmsl(最大信号量集数量),semmns(系统总的信号量数量),semopm(每个信号量集中最大操作数),以及semmni(系统中信号量集的最大数量)。...
【Oracle 10g在Linux上的安装教程】 在Linux环境下安装Oracle 10g数据库是一项技术性较强的任务,需要对操作系统、硬件配置以及数据库管理有深入的理解。以下是一份详细的安装指南,涵盖了从前期准备到实际安装的每...
- **共享内存段的最大大小 (SHMMAX)**: Oracle 的 SGA(System Global Area)是由共享内存组成的,因此正确设置 SHMMAX 非常重要,否则可能会导致内存分配失败等问题。 ```bash # 查看当前 SHMMAX 值 cat /proc/...
根据工作负载调整初始化参数,如SGA大小、PGA大小、后台进程数等。进行性能监控,根据实际情况进行调优。 13. **备份与恢复**: 设计并实施一个有效的备份策略,包括冷备份、热备份和逻辑备份。了解如何在紧急...