如何通过日志或gv$sql_audit,分析OceanBase运行时的异常SQL

本文作者:郑增权,爱可生 DBA 团队成员,OceanBase 和 MySQL 数据库技术爱好者。本文约 2000 字,预计阅读需要 8 分钟。

简介

在 OCP 云平台的 Top SQL 界面中,能观察到异常SQL,但这些SQL并未明确显示具体的报错原因,或者提供了报错原因,但还不够详细。

本文以 SQL 异常重试的案例,通过 日志文件 和 gv$sql_aduit 视图 这两种方法,分析并确定OceanBase运行过程中,出现报错的具体原因。

建议在 PC 端浏本文~

背景

  1. OceanBase 3.X 企业版 MySQL 模式
  2. 某客户在性能压测过程中反馈,在对某张表 UPDATE 时响应缓慢,一直无法执行成功。
  3. gv$sql_aduit 关于此 SQL 相关信息已被清理,且 Top SQL 未提示报错具体原因,只能基于日志文件进行排查。
  4. OCP 云平台查看初始状态如下:

  1. 文中后半部分对此场景进行延伸。
  • 假设 SQL 正处于异常重试状态中,且关联的 gv$sql_audit 视图信息未被清除的情况下,如何展开排查提供思路。

排查过程

1. 导出 Top SQL

列管理 按需勾选需查看的信息(如:SQL ID,重试次数)。

2. 复制 SQL 文本

3. 查找 UPDATE 语句

在对应的服务器上 grep 此 SQL 语句的打印次数:

  • 结果为 1 小时内执行了 505 次,判断针对该行数据的 UPDATE 行为可能存在异常。
  • 日志打印 SQL 次数可能与 Top SQL 不同,大致对应上即可。
  • 一般异常 SQL 会在 observer.log 中打印,正常执行完成的可能不会存在记录。
# grep -i "UPDATE evan.evan_zheng SET name = 'test0409' WHERE id = 1" observer.log.2024040916* | wc -l
505

4. 查找错误位置

以 SQL 语句 和 ret= 作为条件进行检索,看是否存在相关错误码。

  • 若 SQL 文本无法精准匹配,则只复制部分关键字。
  • 可以看到 40126003 等超时相关错误码。
  • 复制一条 trace id 用于检索
# grep -i "UPDATE evan.evan_zheng SET name = 'test0409' WHERE id = 1" observer.log.2024040916* | grep "ret="

5. 查看报错信息

检索 trace_id,查看主要报错信息。

  • 写写冲突:on_wlock_retry、lock_for_write conflict
  • 错误码:6005
  • 更新某行数据失败:failed to update row (xxx)

6. 写写冲突部分日志

#  grep -i "YB420ABA40A1-000615A29EDEEA36-0-0" observer.log.2024040916* | grep "lock_for_write conflict"

点击放大

7. 确认行为

确认此 trace_id 关联的 SQL 存在重试行为。

# grep -i "YB420ABA40A1-000615A29EDEEA36-0-0" observer.log.2024040916* | grep -i "will retry"

8. 错误码含义

错误码 6005:更新操作加锁失败

错误码 6003:等待锁超时

错误码 6212:SQL 语句超时

对于语句超时的情况,首先要确定当前租户下 ob_query_timeout 变量设置,然后根据 trace_id 搜索 observer.log 日志,找到当前语句的 cur_query_start_time

如果 超时时间点 - cur_query_start_time = ob_query_timeout,说明是符合预期的。下面来验证一下。

  1. 查询租户变量 ob_query_timeout 为 10s。

  1. 在 observer.log 中检索此 trace_id 的起始时间。

开始时间:

# grep -i "YB420ABA40A1-000615A29EDEEA36-0-0" observer.log.20240409* | grep -m 1 "cur_query_start_time"

超时时间:

# grep -i "YB420ABA40A1-000615A29EDEEA36-0-0" observer.log.20240409* | grep "timeout_timestamp" | tail -n 1

可以看到超时时间减去开始时间等于 10s,说明此处超时行为符合预期。

问题总结

当执行 SQL UPDATE evan.evan_zheng SET name = 'test0409' WHERE id = 1; 更新操作加锁失败,达到当前租户 ob_query_timeout 变量设置的值(10s)触发 6212 报错(语句超时)回滚语句。

可能造成此问题的原因:

  1. 业务使用了较大的超时时间,且存在一个会话中的未知长事务持有锁,阻塞了其他事务的执行。
  2. 开发人员并发更新同一行数据,并发处理逻辑存在错误。

优化措施

  1. 合理设置超时变量时间。
  2. 合理设置程序代码并发控制逻辑。
  3. 关注长事务告警。

延伸场景

如果 SQL 正在持续重试中,且 gv$sql_audit 视图信息未被清除,可参考如下步骤进行排查。

1. OCP 云平台,复制 SQL ID

2. 基于 SQL ID 查看主要的错误代码

可以看到 40126003 等超时相关错误码。

select/*+ PARALLEL(8)*/trace_id,sid,tenant_name,svr_ip,svr_port,retry_cnt,ret_code,query_sql,usec_to_time(request_time) as start_time
fromgv$sql_audit
wheresql_id = 'D884EA797E73F466819BAE2AE4AC1FE1'and retry_cnt > 1
group byret_code
order byretry_cnt desc;

3. 查看 session_id

select/*+ PARALLEL(8)*/trace_id,sid,tenant_name,svr_ip,svr_port,retry_cnt,ret_code,query_sql,usec_to_time(request_time) as start_time
fromgv$sql_audit
wheresql_id = 'D884EA797E73F466819BAE2AE4AC1FE1'
group bysid
order byrequest_time desc;

4. 查询 table_id

selectdatabase_name,table_id,table_name,tenant_id,tenant_name
fromoceanbase.gv$table
wheretenant_id = 1001and database_name = 'evan'and table_name = 'evan_zheng';

5. 查询锁持有者事务信息

使用 sys 租户执行。

select * from __all_virtual_trans_lock_stat where table_id = '1100611139453778'\G

6. 查询锁等待者事务信息

使用 sys 租户执行。

可以看到此处 session_id 与 gv$sql_audit 查询出来的是一致的(即,异常重试的 SQL 的会话)。

select * from __all_virtual_lock_wait_stat where table_id = '1100611139453778'\G

7. 查询锁持有者 session 的 SQL

selecttrace_id,usec_to_time(request_time),query_sql
fromgv$sql_audit
whereTENANT_ID = 1001AND USER_NAME = 'root'AND SID = '3221616444'
order byrequest_time desc;

8. 查看锁等待者 session 的 SQL

selecttrace_id,usec_to_time(request_time),query_sql
fromgv$sql_audit
whereTENANT_ID = 1001AND USER_NAME = 'root'AND SID = ' 3221618060'
order byrequest_time desc;

可以看到锁持有者的会话和锁等待者的会话都针对表 evan_zheng 中 id=1 的字段进行更新,由于锁持有者开启了手动提交且未进行提交导致锁等待者持续重试 UPDATE 操作。

9. KILL 锁持有者会话

解决方法:经确认风险后,kill 锁持有者会话。

进一步分析可参考前方步骤,结合 observer.log 等信息进行分析。

其他错误码

通过如下几个错误码可以判断 SQL 超时原因(语句超时/事务超时/事务空闲超时):

  • 系统变量 ob_query_timeout: 该变量控制着语句执行时间的上限,语句执行时间超过此值会给应用返回语句超时的错误,错误码为 6212,并回滚语句,通常该值默认为 10s。
  • 系统变量 ob_trx_timeout: 该变量控制着事务超时时间,事务执行时间超过此值会给应用返回事务超时的错误,错误码为 6210,此时需要应用发起 ROLLBACK 语句回滚该事务。
  • 系统变量 ob_trx_idle_timeout: 该变量表示 session上一个事务处于的 IDLE 状态的最长时间,即长时间没有 DML 语句或结束该事务。超过该时间值后,事务会自动回滚。再执行 DML 语句会给应用返回错误码 6224,应用需要发起 ROLLBACK 语句清理 session 状态。

参考资料-OceanBase官方知识库

  1. 《OceanBase 数据库日志解读示例》知识库:OceanBase 数据库日志解读示例
  2. 《OceanBase 数据库事务问题排查指南》OceanBase 数据库事务问题排查指南
  3. 《OceanBase 数据库中的行锁问题排查指南》OceanBase 数据库中的行锁问题排查指南
  4. 《事务控制概述》事务控制概述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/416939.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

上手一个RGBD深度相机:从原理到实践--ROS noetic+Astra S(上):解读深度测距原理和内外参推导

前言 最近在做项目的时候,项目组丢给了我一个深度相机,今天我们来尝试上手一个实体深度相机。 本教程设计基础相机的原理,使用,标定,和读取。(注:本教程默认大家有ROS1基础,故不对程序进行详细…

django外键表查询

Django外键(ForeignKey)操作以及related_name的作用-CSDN博客 django模型中外键操作_django的model的contain外键-CSDN博客 通过基本表可以查外键表 删基本表可以删外键表

Java 7.3 - 分布式 id

分布式 ID 介绍 什么是 ID? ID 就是 数据的唯一标识。 什么是分布式 ID? 分布式 ID 是 分布式系统中的 ID,它不存在于现实生活,只存在于分布式系统中。 分库分表: 一个项目,在上线初期使用的是单机 My…

70V耐压可调OVP阈值的过压保护芯-平芯微PW1600

PW1600 具有前端过电压和过温保护功能。支持 3V 到 60V 的宽输入电压工作范围。过压保护阈值可以外部设置。超快的过压保护响应速度能够确保后级电路的安全。集成了超低导通阻抗的 nFET 开关,确保电路系统应用更好的性能。它可以承受峰值 5A 的电流,以及…

IIS 反向代理模块: URL Rewrite 和 Application Request Routing (ARR)

需要设置iis反向代理的场景其实挺多的。例如websocket、Server Sent Events(SSE) 都需要反向代理。 IIS 实现反向代理功能,必须同时安装 URL Rewrite 和 Application Request Routing (ARR) 两个模块,缺一不可。 URL Rewrite 负责:定义反向…

分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP 含基础BP对比模型

分类预测|基于灰狼GWO优化BP神经网络的数据分类预测Matlab程序GWO-BP 含基础BP对比模型 文章目录 一、基本原理1. 灰狼优化算法(GWO)简介GWO的基本步骤 2. BP神经网络简介**BP网络的基本结构****训练过程** 3. GWO-BP分类预测的结合**结合流程** 4. GWO-…

如何在算家云搭建模型Stable-diffusion-webUI(AI绘画)

一、Stable Diffusion WebUI简介 Stable Diffusion WebUI 是一个网页版的 AI 绘画工具,基于强大的绘画模型Stable Diffusion ,可以实现文生图、图生图等。 二、模型搭建流程 1.选择主机和镜像 (1)进入算家云的“应用社区”&am…

构建全景式智慧文旅生态:EasyCVR视频汇聚平台与AR/VR技术的深度融合实践

在科技日新月异的今天,AR(增强现实)和VR(虚拟现实)技术正以前所未有的速度改变着我们的生活方式和工作模式。而EasyCVR视频汇聚平台,作为一款基于云-边-端一体化架构的视频融合AI智能分析平台,可…

服务器禁用远程(22)

vim /etc/ssh/sshd_config 修改 ListenAddress 0.0.0.0 为ListenAddress localhost

Origin 2024下载安装教程(中文版软件包) 百度网盘分享链接地址

Origin是什么软件? origin主要是绘图、数据分析、数据导入导出的功能。Origin 广泛应用于科学研究、工程技术、数据分析等领域,Origin 是一款功能强大、易于使用的科学绘图和数据分析软件,能够帮助你高效地处理和可视化数据,为你…

【springboot】使用swagger生成接口文档

1. 添加依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version></dependency> 这里我老是添加不上这个依赖&#xff0c;搜索了下发现阿里…

重磅活动!南开大学赵宏教授倾情分享AI挑战下的教育教学新理念与新方法

人工智能是科技发展的前沿领域&#xff0c;也是推动新质生产力形成的关键动力。当前&#xff0c;各个高校正积极探索人工智能对高等教育的改革&#xff0c;以培养适应未来社会发展需求的新型人才。 本次活动旨在传播 AI 挑战下的教育教学新理念与新方法&#xff0c;推动人才培养…

【MySQL】深圳大学数据库实验一

目录 一、实验目的 二、实验要求 三、实验设备 四、建议的实验步骤 4.1 使用SQL语句创建如上两张关系表 4.2 EXERCISES. 1 SIMPLE COMMANDS 4.3 EXERCISES 2 JOINS 4.4 EXERCISES 3 FUNCTIONS 4.5 EXERCISES 4 DATES 五、实验总结 5.1 数据库定义语言&#xff08;DDL…

Java健康养老智慧相伴养老护理小程序系统源码代办陪诊陪护更安心

健康养老&#xff0c;智慧相伴 —— 养老护理小程序&#xff0c;代办陪诊陪护更安心 &#x1f308;【开篇&#xff1a;智慧养老&#xff0c;新时代的温馨守护】&#x1f308; 在这个快节奏的时代&#xff0c;我们总希望能给予家人更多的关爱与陪伴&#xff0c;尤其是家中的长…

物联网技术推动灌区智能化管理

物联网技术&#xff0c;作为信息技术革命的重要组成部分&#xff0c;正深刻地改变着传统行业的运作模式&#xff0c;其中在农业灌溉领域的应用尤为显著&#xff0c;为灌区的智能化管理开辟了新径。这一技术通过将传感器、智能网关、大数据分析与云平台紧密融合&#xff0c;实现…

使用uni-app开发微信小程序

一、前提环境 1.1 &#xff1a;uniapp开发文档&#xff1a;https://uniapp.dcloud.net.cn/quickstart-cli.html 细节都在这一页&#xff0c;这里不过多解释 二、开发工具下载 2.1 微信开发者工具 下载链接&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/dev…

【软考】设计模式之代理模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.代理模式&#xff08;Proxy Pattern&#xff09;。2.意图&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。3.通过提供与对象相同的接口来控制对这个对象的访问。4.是设计模…

是德KEYSIGHT3458A 8.5位万用表Agilent3458a资料介绍

Agilent 3458A、Keysight 3458A、HP 3458A 万用表、8.5 位 特征&#xff1a; 高达 100,000 个读数/秒内部测试设置>340/秒可编程积分时间从 500 纳秒到 1 秒 更快的测试&#xff1a; 更高的测试产量&#xff1a; 更高精度&#xff0c;满足更严格的测试要求高达 8.5 位分辨…

企业财税自动化解决方案如何提升财务效率与准确性

近年来&#xff0c;数字化转型将企业推到了时代的风口浪尖&#xff0c;对于企业而言&#xff0c;只有快速适应互联网时代的变革&#xff0c;学会利用数字信息&#xff0c;才能在竞争激烈的商业环境中脱颖而出。随着技术的不断发展&#xff0c;财务自动化解决方案成为企业实现这…

AUTO TECH 2025 华南展 第十二届广州国际汽车零部件加工技术及汽车模具展览会——探索未来出行的创新动力

AUTO TECH 2025 华南展 第十二届广州国际汽车零部件加工技术及汽车模具展览会——探索未来出行的创新动力 随着全球汽车工业的不断进步和新能源汽车技术的迅猛发展&#xff0c;2025年11月20-22日在广州保利世贸博览馆将迎来一场行业瞩目的盛会——2025 第十二届广州国际汽车零部…