实践真知:使用ASM和文件系统的数据库在AIO上有何不同?

简介:


张大朋(Lunar)Oracle 资深技术专家

Lunar 拥有超过十年的 ORACLE SUPPORT 从业经验,曾经服务于ORACLE ACS部门,现就职于 ORACLE Sales Consultant 部门,负责的产品主要是 Exadata,Golden Gate,Database 等。


编辑说明:在Oracle数据库中,很多概念在悄悄的发生变化,而如果缺乏实践和动手验证,你可能离真相会越来越远。从文件系统到ASM,Oracle的异步IO参数也在发生不断变化。


昨天客户的一个重要应用切换到新的系统环境上,今天观察,发现部分异常等待:


从OS的CPU负载来看,定期会出现一个峰值,从ASH中可以看出,这个峰值对应的等待事件跟AWR的完全吻合。

因此,主要怀疑两个东西:

1,应用的SQL和对象的属性(比如table或者index的统计信息,并行度等等……)
2,系统的AIO设置



上面的第一条,已经提交给开发相应的SQL和其他信息;第二条,因为系统以前是11.2 RAC,使用了ASM,而现在是单机文件系统.



因此对比了这两种环境下AIO的异同,结论如下
1,Linux下,ASM数据库和文件系统数据库的AIO设置差别:
----(1). ASM的AIO属性是不受 FILESYSTEMIO_OPTIONS 参数的影响(因为ASM会绕过文件系统buffer),只跟DISK_ASYNCH_IO有关系
----(2). 文件系统的AIO属性跟 FILESYSTEMIO_OPTIONS 和 DISK_ASYNCH_IO 都有关系


2,FILESYSTEMIO_OPTIONS=NONE : Bug 6733627 – Unaccounted Wait Time on “Direct Path” operations with FILESYSTEM_IO_OPTIONS=NONE (Doc ID 6733627.8)

3, db file async I/O submit’相关内容
‘db file async I/O submit’ when FILESYSTEMIO_OPTIONS=NONE (Doc ID 1274737.1) —详细讲述了 ‘db file async I/O submit’ 和 FILESYSTEMIO_OPTIONS=NONE的关系
当文件系统设置了FILESYSTEMIO_OPTIONS=NONE时,会出现“db file async I/O submit”后台等待事件,而正常应该是出现“db file parallel write”
可以通过设置 FILESYSTEMIO_OPTIONS=SETALL,启用AIO,然后在AWR中会出现db file parallel write,而不再是db file async I/O submit

4,FILESYSTEMIO_OPTIONS=DIRECTIO : Wrong FILESYSTEMIO_OPTIONS Settings Can Cause a Corrupted Block to be Returned at the First Read (Doc ID 1918825.1)

5,一般,linux建议设置为 FILESYSTEMIO_OPTIONS=SETALL



具体测试过程如下:

先看看官方文档的描述:

FILESYSTEMIO_OPTIONS
--------------------------------
Property    Description
Parameter type  String
Syntax  FILESYSTEMIO_OPTIONS = { none | setall | directIO | asynch }
Default value   Varies by database version and operating system.
Modifiable  No
Basic   No
 
DISK_ASYNCH_IO
------------------------------
Property    Description
Parameter type  Boolean
Default value   true
Modifiable  No
Range of values true | false
Basic   No

此处是文件系统:filesystemio_options=none disk_asynch_io=true(缺省值),使用strace发现,没有启用AIO:

15:21:06 SYS@ Lunar> show parameter filesystemio_options
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
filesystemio_options                 string      none
15:21:16 SYS@ Lunar> show parameter DISK_ASYNCH_IO
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------
disk_asynch_io                       boolean     TRUE
15:21:30 SYS@ Lunar>

在系统上看,目前并没有启用AIO:

[oracle@Lunar tmp]$ cat /proc/slabinfo | grep kio
kioctx               140    384    320   12    1 : tunables   54   27    8 : slabdata     31     32     22
kiocb                  0      0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0
[oracle@Lunar tmp]$

使用strace对后台进程DBWR进行跟踪,佐证了上述观点,当前文件系统的数据库没有启用AIO:

[oracle@Lunar tmp]$ ps -ef| grep dbw
oracle   16540 30146  0 14:50 pts /3    00:00:00 grep dbw
oracle   20618     1  0 Sep24 ?        00:02:39 ora_dbw0_Lunar
oracle   20620     1  0 Sep24 ?        00:02:55 ora_dbw1_Lunar
oracle   20622     1  0 Sep24 ?        00:02:47 ora_dbw2_Lunar
oracle   20624     1  0 Sep24 ?        00:02:29 ora_dbw3_Lunar
oracle   20626     1  0 Sep24 ?        00:02:48 ora_dbw4_Lunar
oracle   20628     1  0 Sep24 ?        00:02:41 ora_dbw5_Lunar
oracle   20630     1  0 Sep24 ?        00:02:44 ora_dbw6_Lunar
oracle   20632     1  0 Sep24 ?        00:02:55 ora_dbw7_Lunar
oracle   20634     1  0 Sep24 ?        00:02:06 ora_dbw8_Lunar
oracle   20636     1  0 Sep24 ?        00:01:46 ora_dbw9_Lunar
oracle   20638     1  0 Sep24 ?        00:01:56 ora_dbwa_Lunar
oracle   20640     1  0 Sep24 ?        00:01:58 ora_dbwb_Lunar
oracle   20642     1  0 Sep24 ?        00:01:52 ora_dbwc_Lunar
oracle   20644     1  0 Sep24 ?        00:01:57 ora_dbwd_Lunar
oracle   20646     1  0 Sep24 ?        00:01:50 ora_dbwe_Lunar
oracle   20648     1  0 Sep24 ?        00:01:50 ora_dbwf_Lunar



strace中,没有io_submit函数,因为 filesystemio_options = none
如果 filesystemio_options = setall ,那么会出现 io_submit函数。


下面的测试是使用ASM的数据库的参数:

15:24:25 SYS@ Lunardb1> show parameter FILESYSTEMIO_OPTIONS
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- --------------
filesystemio_options                 string      none
15:24:29 SYS@ Lunardb1> show parameter DISK_ASYNCH_IO
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------
disk_asynch_io                       boolean     TRUE
15:24:39 SYS@ Lunardb1>

在系统上看,虽然设置了FILESYSTEMIO_OPTIONS=NONE,但是由于DISK_ASYNCH_IO=TRUE(缺省值),因此,ASM下的数据库依然使用AIO:

[root@Lunardb1 ~] # cat /proc/slabinfo | grep kio
kioctx               238    340    384   10    1 : tunables   54   27    8 : slabdata     34     34      0
kiocb               3656   4845    256   15    1 : tunables  120   60    8 : slabdata    323    323    180
[root@Lunardb1 ~] #
 
[oracle@Lunardb1 ~]$ ps -ef| grep dbw
oracle    82860  82820  0 15:25 pts /1    00:00:00 grep dbw
grid      85795      1  0 Sep25 ?        00:00:36 asm_dbw0_+ASM1
grid      86406      1  0 Sep25 ?        00:01:32 /u01/app/11 .2.0 /grid/jdk/jre//bin/java -server -Xcheck:jni -Xms128M -Xmx384M -Djava.awt.headless= true -Ddisable.checkForUpdate= true -Dstdstream.filesize=100 -Dstdstream.filenumber=10 -DTRACING.ENABLED= false -Doracle.wlm.dbwlmlogger.logging.level=INFO -Dport.rmi=23792 -jar /u01/app/11 .2.0 /grid/oc4j/j2ee/home/oc4j .jar -config /u01/app/11 .2.0 /grid/oc4j/j2ee/home/OC4J_DBWLM_config/server .xml -out /u01/app/11 .2.0 /grid/oc4j/j2ee/home/log/oc4j .out -err /u01/app/11 .2.0 /grid/oc4j/j2ee/home/log/oc4j .err
oracle    87014      1  0 Sep25 ?        00:10:02 ora_dbw0_Lunardb1
oracle    87018      1  0 Sep25 ?        00:11:22 ora_dbw1_Lunardb1
oracle    87022      1  0 Sep25 ?        00:09:28 ora_dbw2_Lunardb1
oracle    87026      1  0 Sep25 ?        00:08:50 ora_dbw3_Lunardb1
oracle    87030      1  0 Sep25 ?        00:09:43 ora_dbw4_Lunardb1
oracle    87041      1  0 Sep25 ?        00:09:47 ora_dbw5_Lunardb1
oracle    87048      1  0 Sep25 ?        00:08:52 ora_dbw6_Lunardb1
oracle    87052      1  0 Sep25 ?        00:08:59 ora_dbw7_Lunardb1
oracle    87056      1  0 Sep25 ?        00:08:26 ora_dbw8_Lunardb1
oracle    87060      1  0 Sep25 ?        00:12:26 ora_dbw9_Lunardb1
oracle    87064      1  0 Sep25 ?        00:09:35 ora_dbwa_Lunardb1
oracle    87068      1  0 Sep25 ?        00:09:25 ora_dbwb_Lunardb1
oracle    87072      1  0 Sep25 ?        00:08:35 ora_dbwc_Lunardb1
oracle    87076      1  0 Sep25 ?        00:09:22 ora_dbwd_Lunardb1
oracle    87080      1  0 Sep25 ?        00:08:16 ora_dbwe_Lunardb1
[oracle@Lunardb1 ~]$

可以看到,使用ASM数据库的dbw0进程,即使FILESYSTEMIO_OPTIONS设置为NONE,只要disk_asynch_io设置为true(缺省值),DBWR也可以使用到AIO:


再看ASM实例的dbw进程,也是用了AIO:


在实践学习中,跟踪工具strace是利器之一。


本文出自数据和云公众号,原文链接


相关文章
|
3月前
|
存储 人工智能 NoSQL
AI大模型应用实践 八:如何通过RAG数据库实现大模型的私有化定制与优化
RAG技术通过融合外部知识库与大模型,实现知识动态更新与私有化定制,解决大模型知识固化、幻觉及数据安全难题。本文详解RAG原理、数据库选型(向量库、图库、知识图谱、混合架构)及应用场景,助力企业高效构建安全、可解释的智能系统。
|
4月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
239 8
|
10月前
|
人工智能 前端开发 JavaScript
代码采纳率从 22% 到 33%,通义灵码辅助数据库智能编码实践
通义灵码本质上是一个AI agent,它已经进行了大量的优化。然而,为了更完美或有效地调用模型的潜在能力,我们在使用时仍需掌握一些技巧。通常,大多数人在使用通义灵码时会直接上手,这是 AI agent 的一个优势,即 zero shot 使用,无需任何上下文即可直接使用通义灵码的能力。
|
6月前
|
人工智能 运维 数据挖掘
瑶池数据库Data+AI驱动的全栈智能实践开放日回顾
阿里云瑶池数据库重磅推出“Data+AI能力家族”,包括DTS AI数据准备、Data Agent系列智能体及DMS MCP统一数据访问服务,重构数据与AI协同边界。通过智能化工具链,覆盖数据全生命周期,提升企业数据开发、分析、治理与运维效率,降低技术门槛,激活数据资产价值,助力企业迈向全栈智能新时代。
|
11月前
|
运维 Kubernetes 网络协议
基于虚拟服务配置的渐进式迁移实践:Istio集群至ASM集群的平滑切换
本文介绍了从Istio+k8s环境迁移到阿里云ASM+ACK环境的渐进式方法,通过配置虚拟服务和入口服务实现新老集群间的服务调用与流量转发,确保业务连续性与平滑迁移
912 132
|
7月前
|
人工智能 运维 数据挖掘
瑶池数据库开放日:全新发布Data+AI能力家族,赋能企业全栈智能实践
近日,阿里云瑶池数据库生态工具产品重磅升级,推出“Data+AI能力家族”,并举办了为期3天的全栈智能实践开放日活动。发布会上首次公开了 “Data Agent for Analytics、Data Agent for Meta、DAS Agent”等瑶池数据库Data Agent系列能力,以工具智能化 × 智能化工具的双引擎重构数据与AI的协同边界,揭秘AI时代数据价值释放的全新路径。
|
关系型数据库 OLAP API
非“典型”向量数据库AnalyticDB PostgreSQL及RAG服务实践
本文介绍了非“典型”向量数据库AnalyticDB PostgreSQL及其RAG(检索增强生成)服务的实践应用。 AnalyticDB PostgreSQL不仅具备强大的数据分析能力,还支持向量查询、全文检索和结构化查询的融合,帮助企业高效构建和管理知识库。
711 19
|
12月前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
350 11
|
10月前
|
数据库