首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
hashcode
bytecode
substring
perl
chat
int
search
jar
buffer
header
cpython
scala
go
less
dll
jsp
testing
string
cPlusPlus
cSharp
usb
replace
rsa
solr
fetch
python2
case
yaml
web3
byte
controller
copy
python
cookie
express
input
sum
triggers
typescript
tree
lua
bit
datetime
version
utf-8
instance
random
merge
ip
dagger
email
golang
javascript
heap
flutter
cmd
tags
request
export
bash
future
text
ascii
httpclient
join
regex
window
php7
grid
iostream
io
bitmap
httprequest
plugins
const
emoji
c语言
subset
audio
当前位置:
开发笔记
>
编程语言
> 正文
用LGWRWORKER的例子介绍strace分析Oracle数据库行为的方法
作者:因为梦想2013 | 来源:互联网 | 2023-10-17 11:51
可观测性能力是IT运维的强有力的支撑。日志告警、指标是两种在运维中很常用的可观测性指标。
可观测性能力是IT运维的强有力的支撑。日志告警、指标是两种在运维中很常用的可观测性指标。而对于数据库这样复杂的IT组件来说,有时候仅仅依靠日志和指标还是不够的。
跟踪是解决数据库复杂问题的十分常用和有效的方法。今年的openGauss 开发者大会上,华为的黄凯耀分享的案例就是使用了eBPF进行跟踪,最终精准定位了一个比较复杂的性能问题。在跟踪方面,国产数据库与Oracle等传统商用国数据库还有这很大的技术差距。做好跟踪并不容易,让运维人员或者售后服务人员能够很方便的跟踪数据库的某种运行行为可以帮助提升运维,加快BUG定位。只不过加入跟踪后的数据库运行可能会变得不稳定或者触发一些非预期的行为和BUG,因此目前为止,除了Oracle体系化的发布了EVENT接口,让运维人员可以自行通过EVENT设置来改变数据库运行行为,或者监视数据库的内部运行,其他数据库还必须依赖一些外部的跟踪工具,使用起来并不方便。
Oracle提供了十分强大的分析功能,特别是EVENT设置。我刚刚开始学习Oracle不久,就学会了使用event 10046去跟踪SQL语句的执行。这对于我刚刚开始接触Oracle这个黑匣子的说话帮助巨大。在缺乏必要的资料,甚至连一个METALINK账号都没有的时期,学习Oracle数据字典的基本原理,以及数据库启动时的主要动作等,都是通过10046 trace文件完成的。后来也经常使用10046/10053等事件分析,来解决用户的SQL语句性能问题。后来我学习一些Oracle新特性的说话,还是经常会使用event做一些trace。
前两天研究了一下Oracle的LGWR worker新机制,我后来也问了一些客户,在一些系统规模不是很大的场景,好像客户都没有感受到这个新的变化。也有写负载较大的用户遇到了LOG FILE SYNC延时过高的问题,后来通过将LGWR改为原来的写模式解决了问题。于是我昨天写了一篇相关的文章,猜测了一下Oracle实现这个功能的原理。当天下午和一个朋友聊起这个事情,他希望我能够进一步确认一下我的猜测是否靠谱。在网上能够找到的资料极少,于是我只能再次使用起5、6年没用过的跟踪大法来做一个分析。
分析Oracle数据库的后台进程功能有一种十分常用的方法,这个是我从Poder大师那边学来的。结合10046和LINUX的strace,可以比较清晰的分析Oracle后台进程的一些行为。因为10046中会输出某个会话执行过的SQL语句,产生过的各种等待事件,利用这个TRACE上的时间戳,结合strace对于调用堆栈的跟踪,就很容易进行问题定位了。这个方法归纳起来很简单:首先对需要跟踪的后台进程设置8级的10046 TRACE,然后开启压测脚本,同事启用strace对调用堆栈进行跟踪就可以了。我们来看看这个完整的过程。
首先我们找到要跟踪的进程,我们准备跟踪lgwr和lg00。然后分别针对这两个进程设置10046 trace。
在两个窗口中分别通过oradebug设置好之后。我们就可以启用一个压测工具slob去产生一些写负载了。为了减少跟踪的日志量,我们把slob设置为1个进程,并且只启动一个并发。
启动好压测负载后,我们就可以分别在两个窗口中对lgwr/lg00进行strace跟踪了:
对于strace不太熟悉的朋友我可以解释一下,-T -tt是在每个调用前显示时间戳,-s是对于每个调用的数据,最多显示512字节。-p -o我就不解释了,估计地球人都明白。跑上几十秒钟后,我们就可以停止跟踪了,因为大部分的行为都十分类似,没必要跑太久。
我们先来看看lg00的strace跟踪信息,因为我加上了-s参数,因此在trace里可以看到所有写入lg00 trace文件的数据的前面512字节。因此我不需要去查看orcl1_lg00_15626.trc文件了。
上面这段trace的开始是lg00完成了一个日志写入的工作,进入Idle等待状态。随后就收到了写任务,开始写入REDO文件,大家注意看因为使用了异步IO,因此lg00通过io_submit来提交IO。我们往下看,可以发现lg00随后发生了ASM IO for non-blocking poll等待,这是因为向ASM发出了IO。然后lg00产生了我们熟悉的log file parallel write等待。到收到io_getevents为止,异步写完成。于是lg00记录了log file parallel write等待完成。
从日志中我们可以梳理出一个大致的脉络。可以看出在Oracle等待事件的统计时长与实际情况并不完全一致。事实上数据库也没必要十分精确的统计等待时长,只要是一个大致的就足够了。只要误差都是差不多的,对于实际分析来说并没有太大的问题。
我们再来看看lgwr的相关时段的跟踪信息。为了方便查看,我梳理了一个表格,从中可以看出整个过程。
我们先来看lgwr,收到写请求后,找到了一个空闲的worker,然后发出写任务。同时发现所有的worker都处于忙的状态。此时正好没有写任务,于是发出一个本地IPC消息,等待ipc消息回复。
而lg00收到写任务后,首先异步提交了IO,然后产生了一系列预期的写日志的等待。完成后先通知lgwr,然后再给等待着发通知。这个算法是比较合理的,由lg00直接发消息给log file sync等待的会话,而不是通过lgwr,这样会有更高的效率。和我由lgwr发消息,lgwr worker无阻塞写的想法不一致。二者可能在面对不同场景时各有优势,到底哪种更好也不太好判断,也不在我们今天讨论的范围内。今天我们重点要介绍的是跟踪数据库后台进程行为的方法。
oracle
数据库
运维
日志
开发者
sql
文件
linux
并发
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
case
MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ...
[详细]
蜡笔小新 2024-12-26 13:21:38
go
Hadoop入门与核心组件详解
本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ...
[详细]
蜡笔小新 2024-12-26 13:12:48
jsp
通过Web界面管理Linux日志的解决方案
本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ...
[详细]
蜡笔小新 2024-12-24 17:11:38
yaml
Python配置文件读写指南
本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ...
[详细]
蜡笔小新 2024-12-28 08:39:55
go
MySQL索引详解与优化
本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ...
[详细]
蜡笔小新 2024-12-25 19:52:47
jsp
深入理解领域驱动设计及其实践
本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ...
[详细]
蜡笔小新 2024-12-25 18:45:55
jsp
Netflix利用Druid实现高效实时数据分析
本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ...
[详细]
蜡笔小新 2024-12-23 11:10:01
string
PHP 5.2.5 安装与配置指南
本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ...
[详细]
蜡笔小新 2024-12-27 19:05:41
byte
基于KVM的SRIOV直通配置及性能测试
SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ...
[详细]
蜡笔小新 2024-12-25 19:26:39
byte
Python入门指南:从零开始的全面学习路线
本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ...
[详细]
蜡笔小新 2024-12-25 12:54:33
byte
HBase运维工具全解析
本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ...
[详细]
蜡笔小新 2024-12-24 17:00:59
go
技术变现之道:从日常工作中挖掘潜力
本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ...
[详细]
蜡笔小新 2024-12-24 15:21:23
jsp
解决U盘安装系统后无法重启的问题
本文详细探讨了运维新手常遇到的U盘安装系统后无法正常重启的问题,提供了从问题分析到具体解决方案的完整步骤。通过理解Boot Loader的工作原理和正确配置启动项,帮助用户顺利解决问题。 ...
[详细]
蜡笔小新 2024-12-24 13:06:59
jsp
科研单位信息系统中的DevOps实践与优化
本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ...
[详细]
蜡笔小新 2024-12-24 11:46:45
jsp
福克斯新闻数据库配置失误导致1300万条敏感记录泄露
由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ...
[详细]
蜡笔小新 2024-12-22 17:57:10
因为梦想2013
这个家伙很懒,什么也没留下!
Tags | 热门标签
hashcode
bytecode
substring
perl
chat
int
search
jar
buffer
header
cpython
scala
go
less
dll
jsp
testing
string
cPlusPlus
cSharp
usb
replace
rsa
solr
fetch
python2
case
yaml
web3
byte
RankList | 热门文章
1
第六次团队作业总结
2
poj 3352 Road Construction
3
宋词《解语花》译文与赏析
4
电脑启动后黑屏,仅鼠标可见
5
开机自启动的几种方式
6
单元测试:使用mocha和should.js搭建nodejs的单元测试
7
在VSCode中自定义调试控制台名称
8
基于Linux开源VOIP系统LinPhone[四]
9
Python 3 Scrapy 框架执行流程详解
10
MySQL 数据迁移时 .frm 文件报错问题
11
线程同步与线程池管理
12
CentOS 7 防火墙操作指南
13
Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
14
Win8.1系统中Modern应用显示任务栏的技巧
15
如何在微博中启用护眼模式?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有