这篇文章是关于如何测量“日志文件并行写入”事件的时间。这对于Oracle数据库中任何更改活动的性能调整都很重要,因为使用默认提交设置,提交更改的前台会话将在等待事件“日志文件同步”中等待,该事件是等待日志编写器活动,其中,等待事件“日志文件并行写入”始终是IO所用时间的指示器。

日志文件同步

首先:前台会话通常在提交等待日志编写器将其更改向量写入联机重做日志文件时等待等待事件“日志文件同步”。总是假设会出现“日志文件同步”是错误的。如果日志编写器设法将磁盘上的SCN增加到前台会话的提交SCN或超出该SCN,则不会出现“日志文件同步”等待事件。

我发现没有“日志文件同步”等待事件,因为我人为地降低了提交会话的速度。然而,随着Oracle代码的并行性的改进,甚至随着硬件层降低写延迟(特别是持久内存)的改进,这种情况在不久的将来可能会出现。至少11.2.0.4和更高版本是这样的(可能更早,但这些是我验证过的版本)。

日志文件并行写入

然而,这篇文章是关于在很多情况下导致“日志文件同步”时间的罪魁祸首的事件:它是关于“日志文件并行写入”等待事件,该事件发生在日志编写器中(当日志编写器本身写入时,它可以将其委托给日志编写器工作进程LGnn),这通常由Oracle数据库调谐器进行测量,以验证在前台会话显示高“日志文件同步”等待指示正在等待日志编写器的情况下日志编写器IO延迟。

我在查看logwriter的代码路径,使用intel pin tool s的“调试跟踪”工具,并在Linux、非ASM、Oracle 19.5上使用Tanel Poder的snaper,在logwriter进程上使用开始和结束快照。我将log writer设置为single logwriter模式(“_use_single_logwriter”=true),并执行了redo,这肯定会被logwriter接收。

在那里,我注意到统计数据表明发生了写操作,而没有“日志文件并行写入”等待事件。很奇怪…所以我深入研究了功能发生的情况。这些是我找到的函数:https://gitlab.com/snippets/1926207

重要的是:

–在函数ksfdaio()中提交IO请求:

ksfdaio>ksfdgo>ksfd_skgfqio>skgfqio>skgfr_lio_listio64>io_submit

–并在函数ksfdblock()中读取IO请求结果(“reaped”):

ksfdblock>ksfdpoll>ksfdwtio>skgfrwat>skgfrliopo>io-getevents

但根本不叫等待事件!*

与早期版本相比,这是一个明显的变化,在早期版本中,日志编写器写入始终会产生“日志文件并行写入”等待事件。但这种变化是什么时候发生的?为了回答这个问题,我安装了版本12.1.0.2(没有补丁)来查看代码路径,找到了:https://gitlab.com/snippets/1926211

重要的是:

–调用wait接口:kslwtbctx()

–在函数ksfdgo()中提交IO请求:

ksfd_sbio>ksfdgo>ksfd_skgfqio>skgfqio>skgfr_lio_listio64>io_submit

–并在函数ksfdwtio()中读取IO请求结果(“reaped”):

ksfd_sbio>ksfdwtio>skgfrwat>skgfospo>skgfrliopo>io_getevents

–等待接口结束:kslwtectx()

啊!所以一个明显的变化!那么这种变化是什么时候发生的呢?我安装了12.2.0.1,找到了相同的“等待”代码路径,然后安装了18.3,找到了等待的代码路径。所以变化可能发生在甲骨文19!所以我安装了19.3,再次找到了等待的代码路径!!那是PSU 19.4还是19.5的变化?我安装了19.5,也找到了等待的代码路径。

O.M.G.为什么我在同一版本的两个数据库中看到不同的行为?好吧,我设置了一些未记录的参数,所以我在新安装的数据库中复制了这些参数……它没有改变。

还有什么不同?嗯…一个是多租户数据库,另一个不是…但这肯定不会改变IO代码路径??当然这很容易检查,所以我删除了非CDB数据库并创建了一个CDB数据库,现在它显示了相同的“非等待”代码路径。

因此,显然,在多租户模式下使用oracle数据库会改变IO代码路径行为。我检查了版本中的代码路径,发现这个变化出现在12.2.0.1.0中,所以本质上是在Oracle12.2中(Oracle18和19实际上是Oracle12.2.0.2和Oracle12.2.0.3)。为了澄清这一点:我在12.1.0.2中没有发现这个变化。

这是否意味着等待事件“日志文件并行写入”根本不显示?不,如果io_提交后的调用io_getevents未返回所有提交的io,则它必须等待,此时调用等待接口,然后进入阻塞io_getevents调用,因此实际等待是计时的。此代码片段显示如下:https://gitlab.com/snippets/1926212

这将显示 ksfdblock>ksfdpoll>ksfdwtio>skgfrwat>skgfrliopo>io getevents,返回0(这意味着它在完成队列中找不到任何IOs),然后返回ksfdpoll函数,调用等待接口kslwtbctx,然后再次潜水到io u getevents,但现在处于阻塞模式等待io。

我还重复了对ASM的测试,它显示了完全相同的(非)等待行为。

结束语

对于Oracle版本12.1.0.2直至19.5,等待事件“日志文件并行写入”既包括IO请求的提交(io_submit调用),也包括等待所提交的IO完成(io_getevents调用)。这意味着在这种情况下,事件的等待时间是IO请求的总延迟,包括操作系统处理。

从版本12.2开始,仅在使用多租户选项的情况下进行更改,并且仅在提交的IO在提交后不可用时才显示等待事件“日志文件并行写入”,因此日志记录器进程具有等待他们。如果显示了等待,则事件的时间是从日志记录器过程的角度来看,IO完成的实际等待时间,而不是IO延迟时间。

当然,如果磁盘上具有不同延迟的多个日志组,则此等待事件将等待所有IO完成,这意味着它将乘以所有提交的IO中最慢的IO的时间。

oracle 开并行写入命令,Oracle等待事件“日志文件并行写入”更改相关推荐

  1. oracle数据库latch,关于Oracle数据库latch: cache buffers chains等待事件

    关于Oracle数据库latch: cache buffers chains等待事件 latch: cache buffers chains等待事件的原理 当一个数据块读入到sga中时,该块的块头(b ...

  2. Oracle Study之--resmgr:cpu quantum等待事件

    Oracle Study之--resmgr:cpu quantum等待事件 在AWR Report中出现"resmgr:cpu quantum"等待事件: "resmgr ...

  3. Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置

    Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置 grep [选项]... PATTERN [FILE]... grep -C N,(N代表一个整数)是搜索关键字出现位置,并且 ...

  4. Linux命令--more(查看日志文件内容,排查问题)

    原文网址:Linux命令--more(查看日志文件内容,排查问题)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Linux的more命令的用法. more命令适用于查看比较大的文件,例如:日 ...

  5. oracle中的 expdp命令,Oracle 10G 数据泵中EXPDP命令行选项介绍

    以下的文章主要是浅谈Oracle 10G 数据泵学习纪要中EXPDP命令行选项,我在一个信誉度很好的网站找到一个关于Oracle 10G 数据泵学习纪要中EXPDP命令行选项的资料,拿出来供大家分享. ...

  6. oracle中的set命令,oracle中常用的set命令

    time:2008/2/1 author: skate oracle中常用的set命令 前一阵在做数据库数据的转移,所以就写个shell脚本来自动化完成,用shell脚本生成sql脚本时,就要用到 o ...

  7. 玩转oracle 11g(18):数据库相关日志文件位置

    数据库相关日志文件 10g 相关路径 警告日志 D:\oracle\product\10.2.0\admin\docare\bdump\alert_docare.log 监听日志文件 D:\oracl ...

  8. oracle 日志注册,Oracle日常维护中管理用户以及重做日志文件的方法

    一.管理用户和安全性在db中各种对象以 用户(方案) 的方式组织管理 select distinct object_type from dba_objects; 模式对象,schema ----> ...

  9. python xlwt写入excel_python xlwt模块生成excel文件并写入数据 xlrd读取数据

    python中一般使用 xlwt (excel write)来生成Excel文件(可以控制单元格格式),用 xlrd 来读取Excel文件,用xlrd读取excel是不能对其进行操作的. 1.xlrd ...

最新文章

  1. 计算机基础——原码、反码、补码转换
  2. python数据分析与挖掘 | 挖掘建模
  3. TortoiseSVN使用帮助和下载
  4. 从使用到原理学习Java线程池
  5. ffmpeg编译的静态链接库问题
  6. Windows电脑搜索功能不能用怎么办
  7. 零基础学HCIE难度大吗?
  8. 如何用Python实现股票量化交易?
  9. 小众软件android,应用专题 - 这些小众软件,满足你文艺不甘寂寞的心|微信安卓版7.0内测来啦 - Android 应用 - 生活 - 【最美应用】...
  10. 【cs231n学习笔记(2017)】—— 神经网络激活函数
  11. 回顾我的 2018 读书历程以及个人感悟,让我们一起期待更好的未来(本文耗时 8 个月。。。)
  12. 微信企业号开发—发送消息
  13. html5妇女节游戏,html5开发三八女王节表白神器
  14. 汉字 计算机 坟墓,墓的拼音_墓组词_墓意思(解释)-常用汉字大全
  15. 什么是短信平台api接口?
  16. 资源管理框架(mesos/YARN/coraca/Torca/Omega)选型分析
  17. 2010最新高分大片《盗梦空间》DVD中英双字
  18. JAVA.SE JUnit单元测试 NIO
  19. 远离单词记忆误区,考研单词就该这么背
  20. 安卓获取不到imsi_android 代码获取IMEI,IMSI都为空,怎么解决?

热门文章

  1. Facebook开发实时分析控制面板
  2. 拿什么拯救你,程序新丁?
  3. java 线程等待_代码分析Java中线程的等待与唤醒
  4. java jwks_OIDC中JWK,JWKS的介绍与使用
  5. 多项式拟合怎么确定次数_PyTorch入门4 搭建多项式回归模型
  6. Python零基础入门(四)——Python面向对象编程[学习笔记]
  7. 自动化测试:Selenium8种元素定位+unittest框架设计
  8. chrome vue.js插件文档_前端开发者必备的40个VSCode插件!
  9. swiper 定义放多少张图片_小程序瀑布流组件:支持翻页与图片懒加载
  10. mysql 事件状态enable_mysql事件 - wayhk的个人页面 - OSCHINA - 中文开源技术交流社区...