Oracle Preinstall 调优参数的学习


背景

学习是一个痛苦并快乐的过程.
之前自己手工安装过很多套Oracle数据库,也总结过很多
但是很多都是比较皮毛的.
最近遇到了一些问题. 才发现. 快餐只能吃饱,要是想学到东西必须精读.
必须多方考证多方学习.

用户相关

所有的应用都不应该使用root用户进行运行.
主要的问题在于两点:
1. root用户的权限太高, 容易误操作.
2. 运行的程序被人攻击, 会导致更加严重的安全问题.
3. 单独的用户便于分析和分组, 避免混淆. 所以建议不同的应用采用不同的用户,方便也安全.

内核参数

fs.file-max=6815744
kernel.sem=250
kernel.shmmni=4096
kernel.shmall=1073741824
kernel.shmmax=4398046511104
kernel.panic_on_oops=1
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
fs.aio-max-nr=1048576 主要修改的是 信号量 250个.
然后共享内存相关的参数 3个
这里重点介绍一些:
1. shmmni 可以理解为是页大小, 可以通过 getconf PAGESIZE 方式来获取. 单位是字节.
2. shmmax 指的是单个共享段的最大大小. 单位是字节.
3. shmall 指的是所有的共享段的综合大小. 注意单位是 page. 与上面两个不一样.
这里需要描述一下关系.
------------ 共享内存段 --------------
键 shmid 拥有者 权限 字节 连接数 状态
0x00000000 32768 oracle 600 12177408 142
0x00000000 65537 oracle 600 13388218368 71
0x00000000 98306 oracle 600 21377024 71
0xbda99060 131075 oracle 600 32768 71

参照Oracle的启动信息

可以看数据库启动时的内存分配情况:
Total System Global Area 1.3422E+10 bytes
Fixed Size 12174808 bytes
Variable Size 4932504104 bytes
Database Buffers 8455716864 bytes
Redo Buffers 21377024 bytes 12177408 是明确的 Fixed size
21377024 是明确的 Redo Buffers 因为我这个是一个测试环境, 没有开启大页, 所以看到内存其实没有完全的占用共享段空间.
一个Oracle进程至少有四个共享段, 前端时 shmmax大于 每一个共享段的内存大小. 对应的shmall 指的是所有共享段的总和大小不能超过这个值
理论上 shmall和 shmmax 其实是互相影响的 取两者较小的值进行影响. 如果 shmall的值小于SGA_TARGET的话 服务器是无法运行.
如果 shmmax的值是单个共享段的大小. 如果只有一个共享段. 那么进程只需要挂载一个共享段就可以了. 不需要多次挂载, 理论上如果共享段内的数据发生变化.
不同进程可以只获取一个IPC通信信息就可以, 只需要监听一个IPC.
如果有100个共享段.可能需要监听多个IPC 通道, 肯定性能会有所损耗.
只有一个共享段理论上性能是最优秀的.

文件打开数和TCP内核参数

适当增大文件打开数和tcp的最大默认值能够避免文件数不足和网络性能劣化. 

security/limits.conf的设置是遵从与内的fs.file-max的 只能比他小. 

tcp的默认值和最大值调大可以提高网络的性能, 避免缓冲池太小,大量小包堆积时影响网络的性能. 

理论上可以减少网卡中断,提高利用率和带宽.

内核启动参数与限制

audit=0 numa=off transparent_hugepage=never
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
oracle hard memlock 134217728
oracle soft memlock 134217728
oracle soft data unlimited
oracle hard data unlimited 启动参数会关闭numa 这个前段时间总结过, 主要是Oracle想避免Linux自作聪明的进行跨节点的处理.
透明大页是为了避免出现某些Oracle的bug . 关于透明大页 主要有如下的内容信息. Disabling Transparent Hugepages.
Refer Oracle Note:1557478.1 Disabling defrag.
Refer Oracle Note:1557478.1 MOS:ID 1557478.1   Because Transparent HugePages are known to cause unexpected node reboots and performance problems with RAC,
Oracle strongly advises to disable the use of Transparent HugePages.
In addition, Transparent Hugepages may cause problems even in a single-instance database environment with unexpected performance problems or delays.
As such, Oracle recommends disabling Transparent HugePages on all Database servers running Oracle.

关于大页设置

除了preinstall 进行的设置
大页内存的设置也较为关键.
还是刚才Oracle数据库的例子, 我将机器的设置为大页模式进行一次重新启动
show parameter SGA
sga_target big integer
12800M
计算大页的数量 因为大页默认是 2MB, 这样的话 大页数量应该就是 6400个. 为了保证能够正确进入SGA
我们建议将 大页设置为 6410个. 浪费十个大页的空间.
# 注意 主要是看free的大页数量. total-free 就是系统使用的大页数量.
vi /etc/sysctl.conf vm.nr_hugepages = 6410
sysctl -p 生效 cat /proc/meminfo 查看效果
HugePages_Total: 6410
HugePages_Free: 6410
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 13127680 kB
DirectMap4k: 313216 kB
DirectMap2M: 14366720 kB
DirectMap1G: 20971520 kB 重启数据库
启动之后验证一下内存的信息:
HugePages_Total: 6410
HugePages_Free: 9
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
Hugetlb: 13127680 kB
DirectMap4k: 321408 kB
DirectMap2M: 14358528 kB
DirectMap1G: 20971520 kB

Oracle数据库验证 需要大页信息的脚本

  • 参考Doc ID 401749.1
#!/bin/bash
echo "
This script is provided by Doc ID 401749.1 from My Oracle Support
# ipcs -m
Press Enter to proceed..."
read
KERN=`uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'`
HPG_SZ=`grep Hugepagesize /proc/meminfo | awk '{print $2}'`
if [ -z "$HPG_SZ" ];then
echo "The hugepages may not be supported in the system where the script is being executed."
exit 1
fi
NUM_PG=0
for SEG_BYTES in `ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"`
do
MIN_PG=`echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q`
if [ $MIN_PG -gt 0 ]; then
NUM_PG=`echo "$NUM_PG+$MIN_PG+1" | bc -q`
fi
done RES_BYTES=`echo "$NUM_PG * $HPG_SZ * 1024" | bc -q`
if [ $RES_BYTES -lt 100000000 ]; then
echo "Sorry! There are not enough total of shared memory segments allocated for
HugePages configuration.
# ipcs -m
of a size that can match an Oracle Database SGA. Please make sure that:
* Oracle Database instance is up and running
* Oracle Database 11g Automatic Memory Management (AMM) is not configured"
exit 1
fi
case $KERN in
'2.4') HUGETLB_POOL=`echo "$NUM_PG*$HPG_SZ/1024" | bc -q`;
echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
'2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'3.8') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'3.10') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'4.1') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'4.14') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
*) echo "Kernel version $KERN is not supported by this script (yet). Exiting." ;;
esac
# End

Oracle Preinstall 调优参数的学习的更多相关文章

  1. Oracle SQL调优记录

    目录 一.前言 二.注意点 三.Oracle执行计划 四.调优记录 @ 一.前言 本博客只记录工作中的一次oracle sql调优记录,因为数据量过多导致的查询缓慢,一方面是因为业务太过繁杂,关联了太 ...

  2. Oracle 系统调优

    一:前言 一:调整初始化参数 1: Oracle 初始化参数分类 2:主要系统调优参数介绍 二:系统全局区 sga 优化 1:调整内存分配 2:调整日志缓冲区 1:查询当前oracle 实例的日志缓冲 ...

  3. JVM调优参数、方法、工具以及案例总结

    这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...

  4. Oracle SQL 调优健康检查脚本

    Oracle SQL 调优健康检查脚本 我们关注数据库系统的性能,进行数据库调优的主要工作就是进行SQL的优化.良好的数据架构设计.配合应用系统中间件和写一手漂亮的SQL,是未来系统上线后不出现致命性 ...

  5. Dubbo性能调优参数及原理

    本文是针对 Dubbo 协议调用的调优指导,详细说明常用调优参数的作用域及源码. Dubbo调用模型 常用性能调优参数 参数名 作用范围 默认值 说明 备注 threads provider 200 ...

  6. Spring Cloud 各组件调优参数

    Spring Cloud整合了各种组件,每个组件往往还有各种参数.本文来详细探讨Spring Cloud各组件的调优参数. Tomcat配置参数 1 server: 2 tomcat: 3 max-c ...

  7. Linux TCP/IP调优参数 /proc/sys/net/目录

    所有的TCP/IP调优参数都位于/proc/sys/net/目录. 例如, 下面是最重要的一些调优参数,后面是它们的含义: /proc/sys/net/core/rmem_default " ...

  8. hadoop作业调优参数整理及原理

    hadoop作业调优参数整理及原理 10/22. 2013 1 Map side tuning参数 1.1 MapTask运行内部原理 当map task开始运算,并产生中间数据时,其产生的中间结果并 ...

  9. JVM性能调优的6大步骤,及关键调优参数详解

    JVM性能调优方法和步骤1.监控GC的状态2.生成堆的dump文件3.分析dump文件4.分析结果,判断是否需要优化5.调整GC类型和内存分配6.不断分析和调整JVM调优参数参考 对JVM内存的系统级 ...

  10. 直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解

    JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对 ...

随机推荐

  1. 高版本jdk的访问私有成员属性的正确姿势

    在jdk17+已经不能直接通过 setAccessible 来访问私有属性了 Field name = access.getClass().getDeclaredField("name&qu ...

  2. MySQL 基础(二)日志

    在操作系统和数据库管理系统中,为了提高数据的容灾性,一般都会通过写入相关日志的方式来记录数据的修改,使得系统受到灾难时能够从之前的数据中恢复过来.MySQL 也提供了日志的机制来提高数据的容灾性,主要 ...

  3. 使用MediaDevices接口实现录屏技术

    摘要:本文将介绍如何使用JavaScript的MediaDevices接口实现录屏功能.我们将通过WebRTC技术捕获用户的屏幕或摄像头画面,并将其编码为MP4视频文件. 在线录屏是指在互联网上进行屏 ...

  4. 干货分享丨从MPG 线程模型,探讨Go语言的并发程序

    摘要:Go 语言的并发特性是其一大亮点,今天我们来带着大家一起看看如何使用 Go 更好地开发并发程序. 我们都知道计算机的核心为 CPU,它是计算机的运算和控制核心,承载了所有的计算任务.最近半个世纪 ...

  5. 实践GoF的23的设计模式:SOLID原则(下)

    摘要:本文将讲述SOLID原则中的接口隔离原则和依赖倒置原则. ​本文分享自华为云社区<实践GoF的23的设计模式:SOLID原则(下)>,作者:元闰子. 在<实践GoF的23种设计 ...

  6. 通用漏洞评分系统 (CVSS)系统入门指南

    通用漏洞评分系统 (CVSS) 是一个公共框架 ,用于评估软件中安全漏洞的严重性.这是一个中立的评分系统,让所有企业能够使用相同的评分框架对各种软件产品(从操作系统.数据库再到 Web 应用程序)的 ...

  7. Kubernetes(K8S) 常用命令

    Docker 常用命令 Docker 常用命令 # 查看API版本 [root@k8smaster ~]# kubectl api-versions # 重启 K8S [root@k8smaster ...

  8. Skywalking 8.1 Docker 服务端部署

    前置条件 Docker 安装 Elasticsearch ### 部署服务端 skywalking-oap-server docker pull apache/skywalking-oap-serve ...

  9. Vue | vuex安装失败解决的方法实例

    Vuex是一个专为Vue.js应用程序开发的状态管理模式 下面这篇文章主要给大家介绍了关于vuex安装失败解决的方法,文中通过图文介绍的非常详细,需要的朋友可以参考下 1.报错信息: npm ERR! ...

  10. #2069:Coin Change(完全背包)

    Problem Description Suppose there are 5 types of coins: 50-cent, 25-cent, 10-cent, 5-cent, and 1-cen ...