首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
object
config
blob
import
callback
typescript
command
heap
chat
case
install
scala
php5
datetime
jsp
less
php
timestamp
cPlusPlus
yaml
cSharp
perl
fetch
python3
数组
rsa
timezone
erlang
random
c语言
solr
hashcode
php8
future
keyword
list
substring
stream
grid
express
post
match
lua
md5
ip
bash
buffer
window
dagger
function
hashset
spring
byte
usb
filter
hash
main
vbscript
get
python
loops
email
dockerfile
iostream
schema
python2
metadata
join
char
heatmap
const
audio
web
golang
format
go
range
php7
foreach
当前位置:
开发笔记
>
编程语言
> 正文
用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
并发
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
io
oracle 数据库正常关闭情况下当前日志损坏的恢复(转)
oracle 数据库正常关闭情况下当前日志损坏的恢复(转) ...
[详细]
蜡笔小新 2023-10-17 18:22:55
io
Oracle主从同步、双向同步的配置
(本教程展示了Windows环境的oracle数据库主从同步,Linux环境一样也可以)(把主数据库obpm和从数据库orcl用实际的数据库名给替换掉)(配置主从同步后,再配置双向同步,可 ...
[详细]
蜡笔小新 2023-10-17 18:32:00
php
MySQL笔记_MySQL笔记1|数据库17问17答
本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-10-17 23:53:15
php
oracle恢复失败,RMAN数据库恢复失败解决一例
问题:这是一个从RAC环境的数据库的RAMN备份恢复到一个单机数据库的操作。当恢复数据文件和恢复正常,但在open数据库时出报下面的错误。--rman备 ...
[详细]
蜡笔小新 2023-10-17 21:12:23
php
Oracle 和 mysql的9点区别【MySQL】
数据库|mysql教程oracle,Oracle,money,mysql,coun数据库-mysql教程1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在o ...
[详细]
蜡笔小新 2023-10-17 19:49:32
php
ORACLE空间管理实验5:块管理之ASSM下高水位的影响
数据库|mysql教程ORACLE,空间,管理,实验,ASSM,下高,水位,影响,数据库-mysql教程易语言黑客软件源码,vscode左侧搜索,ubuntu怎么看上一页,ecs搭 ...
[详细]
蜡笔小新 2023-10-17 17:53:14
php
python发送文件传输助手_python 通过 socket 发送文件的实例代码
{moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ...
[详细]
蜡笔小新 2023-10-17 20:20:31
php
数据库技术:Python实现mysql数据库中的SQL文件生成和导入分享
目录1、将mysql数据导出到SQL文件中(数据库存在的情况)2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件1)从 ...
[详细]
蜡笔小新 2023-10-17 20:14:33
install
mysql新版本5.7.17的zip包配置
1.官网下载了mysql-5.7.17-win64.zip包,配置遇到很多麻烦,记录一下;2.解压后放到指定的文件夹,修改mysql-5.7.17的配置文件my-default.i ...
[详细]
蜡笔小新 2023-10-17 20:01:32
c语言
初探PLC 的ST 语言转换成C++ 的方法
自动控制软件绕不开ST(StructureText)语言。它是IEC61131-3标准中唯一的一个高级语言。目前,大多数PLC产品支持ST ...
[详细]
蜡笔小新 2023-10-17 19:30:09
c语言
像跟踪分布式服务调用那样跟踪Go函数调用链 | Gopher Daily (2020.12.07) ʕ◔ϖ◔ʔ
每日一谚:“Acacheisjustamemoryleakyouhaven’tmetyet.”—Mr.RogersGo技术专栏“改善Go语⾔编程质量的50个有效实践” ...
[详细]
蜡笔小新 2023-10-17 19:23:45
php
浅析Mysql数据回滚错误的解决方法_PHP教程
浅析Mysql数据回滚错误的解决方法_PHP教程:MYSQL的事务处理主要有两种方法。1、用begin,rollback,commit来实现begin开始一个事务rollback事 ...
[详细]
蜡笔小新 2023-10-17 19:07:22
install
Django + Ansible 主机管理(有源码)
本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ...
[详细]
蜡笔小新 2023-10-17 18:59:15
install
从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
代码已上传Github+Gitee,文末有地址 书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ...
[详细]
蜡笔小新 2023-10-17 18:25:42
jsp
java开发中常用框架优缺点
一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ...
[详细]
蜡笔小新 2023-10-17 16:19:02
因为梦想2013
这个家伙很懒,什么也没留下!
Tags | 热门标签
object
config
blob
import
callback
typescript
command
heap
chat
case
install
scala
php5
datetime
jsp
less
php
timestamp
cPlusPlus
yaml
cSharp
perl
fetch
python3
数组
rsa
timezone
erlang
random
c语言
RankList | 热门文章
1
web前端|一条“不归路”学习路线
2
Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例
3
pthread_mutex_lock详解程序员
4
WebRTC对Simulcast的支持
5
python 默认参数问题的陷阱
6
mysql新增root账户 并授权其他账户
7
java idea+ssm框架遇到的问题
8
胡扯一点代码实现小技巧啦啦啦~ x
9
开发笔记:数据模型续
10
解决了几个bug(XCode每次都编译所有文件,cocos
11
科技拾遗|成为传奇的哈勃望远镜,曾经居然被当做笑话?
12
计算机网络软考基础知识,软考基础知识专题5:计算机网络知识
13
ANE原生代码的调试(安卓)
14
Visualizing and Understanding Convolutional Networks(ZFNet网络)论文阅读笔记
15
如何学习java,自学还是培训
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有