热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

Linux内核参数及Oracle相关参数调整-mysql教程

我们一般在Linux上安装设置Oracle数据库或者在更换或升级硬件的时候都需要配置Linux系统的核心参数,然后才是调整Oracle系统

我们一般在Linux 上安装设置Oracle 数据库或者在更换或升级硬件的时候都需要配置Linux 系统的核心参数, 然后才是调整Oracle 系统

我们一般在Linux 上安装设置Oracle 数据库或者在更换或升级硬件的时候都需要配置Linux 系统的核心参数, 然后才是调整Oracle 系统参数 。

kernel.shmall为物理内存除以pagesize;
kernel.shmmax为物理内存的一半;
fs.file-max为512 乘以 processes (如128个process则为 65536);
net.ipv4.ip_local_port_range/net.core.rmem_default/net.core.rmem_max三个参数设置和官方文档不一样, 这是根据metalink 343431.1 最新要求更改的;
net.ipv4.tcp_rmem/net.ipv4.tcp_wmem两个参数一般情况下无需设置, 除非是在Dataguard/Streams等需很多网络传输情况下;
其它参数根据官方文档要求设置即可.

查看os系统页的大小
#getconf PAGESIZE
4096

1. Linux 系统下的核心参数:

# vi /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

修改以后让参数生效:
# /sbin/sysctl -p

2. Linux 下核心参数调整

kernel.shmmax ----

SHMMAX Available physical memory Defines the maximum allowable size of one shared memory segment. The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory segments which may lead to performance degradation.


Shmmax 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax 设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降 。

一些说法: SHMMAX 仅仅是在共享内存段被创建的时候用来比较的一个数字,当共享内存段被一个进程(Process)创建,操作系统检查是否被要求的共享内存段的值大于shmmax 的值 ,如果是,那么将会抛出一个错误。这个时候系统会创建另外的一个或多个共享内存段满足进程的需求 。一般来说,共享内存段个数和系统性能没有太直接的关系,也不会对性能产生太大的影响。

Steve Adams 在他的小册子中说过,在实例启动以及Server Process 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候 需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常Create Processes(以及Destroy Them),性能方面就不是考虑的问题。

当然Oralce 的建议是希望一个大的共享内存段能容纳整个SGA,这样在任何时候都不会有甚至轻微的性能下降的隐患。

Oracle 安装文档建议 32Bit Linux 系统设置shmmax 为32Bit 最大的限制值(setting shmmax to the 32-bit number limit),也就是4G 。所以一般来说,1-4G 的物理内存,可以直接设置shmmax 为最大物理内存即可,那么SGA 肯定在一个共享内存段中,32Bit Linux 系统物理内存大于4G 的设置为4G 即可 。


总之,一般设置shmmax >=SGA (32Bit 系统是否支持到1.7G 以上SGA 需要注意) 。如果是64Bit 的Linux 操作系统,shmmax 设置为大于SGA_MAX_SIZE 即可。
(仅供参考)

Ipcs -sa 可以看到共享内存段个数

kernel.shmall ----

kernel.shmall 参数是控制共享内存页数 。Linux 共享内存页大小为4KB, 共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是 16GB/4KB=16777216KB/4KB=4194304 (页),也就是64Bit 系统下16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax 参数调整到 16G 了,同时可以修改SGA_MAX_SIZE 和SGA_TARGET 为 12G(您想设置的SGA 最大大小,当然也可以是2G~14G 等,还要协调PGA参数及OS 等其他内存使用,,不能设置太满,比如16G)。

kernel.shmmni ----
shmmni 内核参数是共享内存段的最大数量(注意这个参数不是 shmmin,是shmmni, shmmin 表示内存段最小大小 ) 。shmmni 缺省值 4096 ,一般肯定是够用了 。

3. Oracle 下需要做调整的参数
SGA_MAX_SIZE
SGA_TARGET
DB_CACHE_SIZE


SGA_MAX_SZIE 为实例允许使用的sga 上限,一个静态参数,是不能动态修改的.
SGA_TARGET 为10g 推出的sga 自动管理的参数,动态参数,可以动态修改.


sga_max_size 与 SGA 各组件大小的关系
设置的 sga_max_size 小于实际的SGA 中各个pool 的尺寸总和的大小,那么sga_max_size 的值会被oracle 自动以实际的SGA 的总尺寸代替。如果不设置sga_max_size ,oracle 会自动的以实际的SGA 的总尺寸来设置sga_max_size 的值。
设置 sga_max_size 的值为大于SGA 中各个pool 的尺寸总和的值:但是sga_max_size 的值相对于所有可用的物理内存来说,是一个合理的值。sga_max_size的实际的值和pfile 中的sga_max_size 指定的值是一样的。

在Oracle 10g 中引入了一个非常重要的参数:SGA_TARGET,这也是Oracle 10g的一个新特性。自动共享内存管理(Automatic Shared Memory Management ASMM),控制这一特性的,就仅仅是这个参数SGA_TARGE。设置这个参数后,你就不需要为每个内存区来指定大小了。SGA_TARGET 指定了SGA 可以使用的最大内存大小,而SGA 中各个内存的大小由Oracle 自行控制,不需要人为指定。Oracle 可以随时调节各个区域的大小,使之达到系统性能最佳状态的个最合理大小,并且控制他们之和在SGA_TARGET 指定的值之内。一旦给SGA_TARGET 指定值后(默认为0,即没有启动ASMM),就自动启动了ASMM特性。

10g 下设置 SGA_TARGET 之后启动ASSM 特性之后, 只有以下的这些区的内存大小动态共享起来:
* Buffer cache (DB_CACHE_SIZE)
* Shared pool (SHARED_POOL_SIZE)
* Large pool (LARGE_POOL_SIZE)
* Java pool (JAVA_POOL_SIZE)
* Streams pool (STREAMS_POOL_SIZE)


而SGA 中的其他区域的内存大小仍然是固定不共享的。
它的含义和SGA_MAX_SIZE 的一样,也表示SGA 最大的大小,于是它也就有了一个限制,那就是它的大小不能大于SGA_MAX_SIZE 的大小。Oracle10g 下, SGA_MAX_SIZE 仍然表示SGA 的大小的上限值,而SGA_TARGET 是SGA 的所有组件的大小的最大值之和,即当SGA_TARGET

在11g 中,这个SGA_TARGET 只能设置是等于SGA_MAX_SIZE 的大小了,设置比它小,oracle 会自动帮你调整,设置比它大,那还是出错。现在可以自己想想,oracle对SGA_TARGET 的大小处理在往正确的简单的方向前进中。

SGA_TARGET 带来一个重要的好处就是,能使SGA 的利用率达到最佳,从而节省内存成本。因为ASMM 启动后,Oracle 会自动根据需要调整各个区域的大小,大大减少了某些区域内存紧张,而某些区域又有内存空闲的矛盾情况出现。

linux

推荐阅读
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 近年来,大数据成为互联网世界的新宠儿,被列入阿里巴巴、谷歌等公司的战略规划中,也在政府报告中频繁提及。据《大数据人才报告》显示,目前全国大数据人才仅46万,未来3-5年将出现高达150万的人才缺口。根据领英报告,数据剖析人才供应指数最低,且跳槽速度最快。中国商业结合会数据剖析专业委员会统计显示,未来中国基础性数据剖析人才缺口将高达1400万。目前BAT企业中,60%以上的招聘职位都是针对大数据人才的。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • Linux磁盘的分区、格式化的观察和操作步骤
    本文介绍了如何观察Linux磁盘的分区状态,使用lsblk命令列出系统上的所有磁盘列表,并解释了列表中各个字段的含义。同时,还介绍了使用parted命令列出磁盘的分区表类型和分区信息的方法。在进行磁盘分区操作时,根据分区表类型选择使用fdisk或gdisk命令,并提供了具体的分区步骤。通过本文,读者可以了解到Linux磁盘分区和格式化的基本知识和操作步骤。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
author-avatar
chenyanni1030_430
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有