本帖最后由 QI 于 2019-9-11 17:12 编辑
Oracle RAC数据库调优 查看数据库状态:实例状态和监听状态
第一项:给管理进程提升的空间
首先确定是Oracle管理模式,当前Oracle有两种管理模式:SAG+PGA和memory管理。 memory的优先级高,当memory_target值为0时,才会使用SGA+PGA的方式管理。否则则使用memory内存管理。
使用show parameter memory查看memory_target
此时memory的值为0,可以确认是SGA+PGA管理方式 通过show parameter sga查看SGA大小
通过show parameter pga查看PGA大小
可以看到SGA+PGA大小一共是16G+6G=22G
Oracle系统中,SGA+PGA管理模式是占用内存的空间,所以要保证SGA+PGA小于内存大小,同时为了防止暴增情况,要给swap留下足够的空间。如果SGA+PGA大于内存大小,会引起数据库无法启动。
这里可以看到我们的linux内存是64G,对于调优来说:我们需要将SGA改为内存大小*0.56,将PGA改为内存大小*0.14
虚拟机内存64G,sga_target大小可配置为36G,pga大小可配置为9G;重启数据库生效
关于swap空间大小,参考Oracle官方指导书给的说法: 当Oracle的内存在1G和2G之间时,swap大小写为1.5倍的内存大小; 当Oracle的内存在2G和16G之间时,swap大小写为和内存大小相等; 当Oracle的内存大于16G时,swap大小设置为16G就可以了。
所以这里我的swap空间写为16G大小(16对于swap来说也不多,反正写16准没错)
彩蛋1:
我们来测试一下memory管理的情况:手动将memory_target的大小修改为小于内存大小。
重启数据库(emmmmmm我好像把memory写的太小了,好像至少要22G)
起不来了怎么办呢?还好我搭的RAC环境,可以进入第二个节点修改这个参数。 (如果全挂了或者是单机环境也是有办法的,这里时间原因,我就没写了,有兴趣的可以私聊讨论哈)
果然修改成22G就起来了……
ORACLE 从11g开始引入自动内存管理特性,该特性需要更多的共享内存/dev/shm/,因此如果要使用该特性必须保证共享内存/dev/shm/的值要大于memory_target和memory_max_target。
所以使用memory会用到/dev/shm/中的空间,刚才把memory改变之后,能看到这个目录生成很多块文件。
如果memory_target的值大于/dev/shm/的空间,会导致数据库无法启动。
第二项:关闭透明大页 ,配置大页内存。
Oracle内存是以页的方式进行管理的,当前内存在分页上拥有Huge Pages(大页内存),以及Transparent Huge Pages(透明大页)两种方式。实际上可以将大页内存理解为分页的预分配方式,将透明大页理解为分页的动态分配方式。 Oracle官方文档中说明在RedHat 6及以后的系统版本默认开启透明大页,所以推荐我们在装Oracle之前关闭透明大页的使用,因为透明大页的动态分配方式会影响数据库内存使用性能。
首先查看是否开启了透明大页:cat/sys/kernel/mm/transparent_hugepage/enabled
输出为always,说明正在使用透明大页 使用echo never > /sys/kernel/mm/transparent_hugepage/enabled 将值调整为never,即关闭透明大页。
修改系统的/etc/sysctl.conf文件,新增一行vm.nr_hugepages = SGA(M)/2+100,SGA大小现在为36G : 35*1024/2+100 = 18532
echo vm.nr_hugepages = 18532 >> /etc/sysctl.conf
修改系统的/etc/security/limits.conf 文件,新增两行:60397977 = 内存 * 0.9 (B)
* soft memlock 60397977 * hard memlock 60397977
第三项:优化RedoLOG
如果redo log组大小偏小(256M以下),或redo log组数偏少,需要添加和删除redo log。 RAC集群每个节点至少配置四个redo组。
通过下面命令查询日志组:THREAD#表示节点。
select group# , thread# , status ,bytes/1024/1024 from v$log;
新添加四个组,分别给节点1和节点2,每个组500M。
alter database add logfile thread 1group 5 '+DATA' size 500M; alter database add logfile thread 1group 6 '+DATA' size 500M; alter database add logfile thread 2group 7 '+DATA' size 500M; alter database add logfile thread 2group 8 '+DATA' size 500M;
将组1和组3删掉,也新建500M。因为组2和组4正在使用(CURREN)所以不能删除。
alter database drop logfile group 1; alter database drop logfile group 3; alter database add logfile thread 1group 1 '+DATA' size 500M; alter database add logfile thread 2group 3 '+DATA' size 500M;
更改正在使用的组(两个节点都要写) alter system switch logfile;
alter system checkpoint;
将组2和组4删掉重建
alter database drop logfile group 2; alter database drop logfile group 4; alter database add logfile thread 1group 2 '+DATA' size 500M; alter database add logfile thread 2group 4 '+DATA' size 500M;
脚本如下,按需使用:
alter database add logfile thread 1group 5 '+DATA' size 500M; alter database add logfile thread 1group 6 '+DATA' size 500M; alter database add logfile thread 2group 7 '+DATA' size 500M; alter database add logfile thread 2group 8 '+DATA' size 500M; alter database drop logfile group 1; alter database drop logfile group 3; alterdatabase add logfile thread 1 group 1 '+DATA' size 500M; alterdatabase add logfile thread 2 group 3 '+DATA' size 500M; alter system switch logfile; alter system checkpoint; alter database droplogfile group 2; alterdatabase drop logfile group 4; alterdatabase add logfile thread 1 group 2 '+DATA' size 500M;
alterdatabase add logfile thread 2 group 4 '+DATA' size 500M;
彩蛋2:
在用ssh登陆sqlplus的时候,会将上下和删除编译成字符,且没有上下文可用。 这里给大家提供一个方法:
将rlwrap插件放在系统里,解压安装。
用oracle用户将aliassqlplus='rlwrap sqlplus' 语句写在 .bash_profile 的最后。
将用户切换到root,再切换回oracle进入sqlplus就发现成功啦,简直不要太舒服。 (那个脚本这里上传不了,有需要的也可以私聊我拿)
最后我们整理一下RAC调优的三个步骤。 1、 调整数据库参数也就是SGA和PGA的大小; 2、 关闭系统透明大页并配置大页内存的参数; 所有节点都要调整哦 3、 Redo log日志组调整。 |