首页 > 数据库 >Oracle Preinstall 调优参数的学习

Oracle Preinstall 调优参数的学习

时间:2023-10-24 20:55:34浏览次数:36  
标签:大页 Preinstall echo oracle 调优 PG Oracle HugePages

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

标签:大页,Preinstall,echo,oracle,调优,PG,Oracle,HugePages
From: https://www.cnblogs.com/jinanxiaolaohu/p/17785726.html

相关文章

  • OracleADDM自动诊断监视工具介绍
     一.ADDM概述 ADDM(AutomaticDatabaseDiagnosticMonitor)是植入Oracle数据库的一个自诊断引擎.ADDM通过检查和分析AWR获取的数据来判断Oracle数据库中可能的问题.   在Oracle9i及之前,DBA们已经拥有了很多很好用的性能分析工具,比如,tkprof、sql_trace、statspack、......
  • OracleCBO与RBO
    Oracle的优化器有两种优化方式: 基于规则的优化方式:Rule-BasedOptimization(RBO)基于成本或者统计信息的优化方式(Cost-BasedOptimization:CBO)     RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引......
  • Oracle数据报ora-01109错误解决方法
    Oracle数据库报ORA-01109错误的解决方法:题目:解决方式:1、先把数据库实例shutdownimmediate关闭;2、把报错的数据文件进行脱机处理;执行alterdatabasedatafile'错误文件位置'offline;3、再次执行alterdatabaseopen或者startup,即可正常运行数据库; ......
  • Oracle常用命令收藏
    查看数据库名SELECTt.NAMEFROMV$DATABASEt;查看实例名SELECTt.INSTANCE_NAMEFROMV$INSTANCEt;查看SIDselectt.INSTANCEfromv$threadt;查看域名selectt.VALUEfromv$parametertwheret.name='db_domain';查看服务名selectt.VALUEfromv$parametertw......
  • oracle-数据库备份
    热备份数据库备份就是将数据库的内容全部复制出来保存到计算机的另一个位置或者其他存储设备上。数据库备份分为物理备份和逻辑备份。使用export/import的方式对数据进行导入导出操作。冷备份脱机备份称为冷备份,使用管理员身份的用户使用shutdown命令关闭数据库的服务,之后复......
  • oracle-存储过程
    存储过程通俗的理解就是就是一个执行过程,调用的时候给他所需要的需求就会对数据库进行操作,相当于我们自己手写Sql,只不过有了存储过程只要调用一下传给他参数他就会帮我们写,比较方便,灵活的运用存储过程会让我们开发很方便 创建存储过程create[orreplace]procedure......
  • oracle-视图
    视图视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成的。视图是oracle又一个数据对象,其主要作用是简化操作,提高安......
  • oracle打开/关闭归档日志ARCHIVELOG
    1.使用SQLPlus登录用户名:sqlplus密码:assysdba 2.查询数据库是否是归档模式:查询结果为“ARCHIVELOG”表示数据库为归档模式SELECTlog_modeFROMv$database;3.关闭数据库shutdownimmediate;4.启动数据库mount模式startupmount;5.启动归档日志alte......
  • oracle数据库启停
    使用oracle登录//停止1.ps-ef|grepsmon2.exportORACLE_SID=cbsdba(这是实例名字)3.sqlplus/assysdba 4.shutdown immediate;//启动1.ps-ef|grepsmon2.exportORACLE_SID=cbsdba3.sqlplus/assysdba 4.startup;5.alter pluggabledatabaseallopen;......
  • Oracle中通过组内排序实现行转列(三)
    1纵表平铺1.1原数据 1.2平铺结果:每个班级按照年龄从小到大平铺为一行select*from(selectrt.class,row_number()over(partitionbyrt.classorderbyrt.age)row_num,rt.sno,rt.snamefromrank_tes......