1、expdp导出报错ORA-27090: 无法为异步磁盘 I/O 保留内核资源
[root@xxdb01 dump_dir]# more xxxx_T16_1902.log
;;;
Export: Release 11.2.0.4.0 - Production on 星期二 6月 30 08:25:17 2020
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
;;;
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
启动 "xxdb"."SYS_EXPORT_TABLE_04": xxdb/********@xxdb tables=xxxx_T16_1902 dumpfile=xxxx_T16_1902_%U.dmp parallel=4 directory=dump_dir logfile=xxxx_xxx_xxx.log
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 116.6 GB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
ORA-31693: 表数据对象 "xxdb"."xxxx_xxx_xxx" 无法加载/卸载并且被跳过, 错误如下:
ORA-27090: 无法为异步磁盘 I/O 保留内核资源
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 3
Additional information: 128
Additional information: 1
已成功加载/卸载了主表 "xxdb"."SYS_EXPORT_TABLE_04"
******************************************************************************
xxdb.SYS_EXPORT_TABLE_04 的转储文件集为:
/nas_share2/dump_dir/xxxx_xxx_xxx_01.dmp
/nas_share2/dump_dir/xxxx_xxx_xxx_02.dmp
/nas_share2/dump_dir/xxxx_xxx_xxx_03.dmp
作业 "xxdb"."SYS_EXPORT_TABLE_04" 已经完成, 但是有 1 个错误 (于 星期二 6月 30 08:55:04 2020 elapsed 0 00:29:43 完成)
2、ORA 27090报错搜MOS为异步IO参数设置过小导致
ORA 27090 Unable to Reserve Kernel Resources for Asynchronous Disk I O (Doc ID 579108.1)
CAUSE
The "aio-max-nr" kernel limit is too low.
SOLUTION
The "aio-max-nr" kernel limit should be adjusted according to Oracle recommendations which are available in this document:
Oracle Validated Configuration:
http://linux.oracle.com/pls/apex/f?p=102:2:2007385298933639::NO::P2_VC_ID:426
Also, this parameter should be set as follows:
-------------------------------------
fs.aio-max-nr= 3145728 ---安装配置文档推荐值,最小值1048576
-------------------------------------
#此参数限制并发未完成的异步请求数目,应该设置避免I/O子系统故障。
3、检查当前系统的异步IO请求最大数配置,以及当前异步IO请求数
#几个节点都达到aio-max-nr最大值
[root@xxdb06 ~]# cat /etc/sysctl.conf |grep fs.aio-max-nr
fs.aio-max-nr = 3145728
[root@xxdb07 ~]# cat /etc/sysctl.conf |grep fs.aio-max-nr
fs.aio-max-nr = 3145728
[root@xxdb08 ~]# cat /etc/sysctl.conf |grep fs.aio-max-nr
fs.aio-max-nr = 3145728
#当前异步IO请求数
[root@xxdb01~]# cat /proc/sys/fs/aio-nr
2252160
[root@xxdb02 ~]# cat /proc/sys/fs/aio-nr
3145728
[root@xxdb03 ~]# cat /proc/sys/fs/aio-nr
2909759
[root@xxdb04 ~]# cat /proc/sys/fs/aio-nr
3145728
[root@xxdb05 ~]# cat /proc/sys/fs/aio-nr
3145728
[root@xxdb06 ~]# cat /proc/sys/fs/aio-nr
3145728
[root@xxdb07 ~]# cat /proc/sys/fs/aio-nr
3145728
[root@xxdb08 ~]# cat /proc/sys/fs/aio-nr
897683
4、怎么合理设置aio-max-nr值
What value should kernel parameter AIO-MAX-NR be set to ? (Doc ID 2229798.1)
The minimum value suggested as per http://docs.oracle.com/database/121/LTDQI/toc.htm#BABFIFCGfor aio-max-nr is 1048576 .
the DOCS provide the minimum required for a good install and basic usage.
This is how we calculate aio-max-nr parameter value -
#aio-max-nr计算公式=进程数*4096
aio-max-nr =no of process per DB * no of databases * 4096
After deriving the value using this formula , you should still monitor the /proc/sys/fs/aio-nr value and also monitor I/O loading.
Points to know -
1) Number of processes per database is not background server process number, it's the number of background server process + user process.
2) Parameter aio-max-nr is a limitation of aio-nr, no impact was reported if you set it too high. But we should still monitor /proc/sys/fs/aio-nr value and tune this value.
5、临时处理为调整tns串xxdb中的scanip为aio-nr未达到最大值得节点,最终需调整aio-max-nr值
fs.aio-max-nr=process*4096=2048*4096=8388608
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 2048
vi sysctl.conf
fs.aio-max-nr=8388608
sysctl -p 内核参数生效