有趣的statement stack

用 ABAP Debugger 的 Statement Breakpoint 精准定位动态调用的 Update Function Module 摘要: 排查 SAP 系统中 IN UPDATE TASK 问题时,常因动态函数名调用难以定位更新任务登记点。本文提出通过新 ABAP Debugger 的 Breakpoints at statements 功能,拦截所有 CALL FUNCTION ... IN UPDATE TASK 语句,快速定位登记源代码位置。结合 CRM 案例,分析重复更新问题的根源,并介绍从更新记录反推调用方的交叉验证方法,提升排查效率。 (字数:149) 阅读详情

引子

在使用events_statements_current的过程中发现,同一线程在同一时刻,可能有多条记录,与直观感觉不太一样,于是跟踪了一下内部实现,有了本文。

STATEMENT STACK的定义

STATEMENT STACK 是events_statements_current表被后用于存储当前会话执行语句堆栈的数据结构。

在MySQL8中,相关定义如下:

/** Max size of the statements stack. */
uint statement_stack_max;

/** nested statement lost */
uint nested_statement_lost;

struct PFS_ALIGNED PFS_thread : PFS_connection_slice {
//...
/** Size of @c m_events_statements_stack. */
  uint m_events_statements_count;
  PFS_events_statements *m_statement_stack;
//...
}

其中:

  • m_statement_stack 语句堆栈
  • m_events_statements_count 语句堆栈栈顶指针
  • statement_stack_max 存储允许存储的最大语句数量
  • nested_statement_lost 存储丢失的语句数量

STATEMENT STACK相关小实验

1) 创建测试存储过程

存储过程的功能主要是:人为等待10秒左右

-- 保存为:stat_stack.sql
USE d1;
set sql_mode=oracle;

set global log_bin_trust_function_creators = 1;

DELIMITER $$
CREATE OR REPLACE PROCEDURE p1(a INT DEFAULT 1)
AS
BEGIN
    SELECT a, SLEEP(a);
END$$

CALL p1(10);

2) 启动终端1输入命令:

USE PERFORMANCE_SCHEMA;

-- 确认采集打开
UPDATE setup_consumers SET ENABLED='YES' WHERE name = 'events_statements_current';

-- Query OK, 0 rows affected (0.00 sec)
-- Rows matched: 1  Changed: 1  Warnings: 0

-- 查询当前终端线程ID
SELECT thread_id FROM threads WHERE processlist_id=CONNECTION_ID() \G
-- thread_id: 58
-- 1 row in set (0.00 sec)

-- 查询当前活跃语句,验证环境
SELECT sql_text FROM events_statements_current WHERE thread_id = 58 \G
-- sql_text: SELECT * FROM events_statements_current WHERE thread_id = 58
-- 1 row in set (0.00 sec)

3) 启动终端2输入命令:

USE PERFORMANCE_SCHEMA;

-- 查询当前终端的thread_id
SELECT THREAD_ID FROM THREADS WHERE PROCESS_LIST_ID=CONNECTION_ID() \G

thread_id: 58
1 row in set (0.00 sec)

source stmt_stack.sql
+------+----------+
| a    | SLEEP(a) |
+------+----------+
|    10|        0 |
+------+----------+
1 row in set (10.01 sec)

Query OK, 0 rows affected (10.01 sec)

4) 切换终端1输入命令:

USE PERFORMANCE_SCHEMA;

mysql> SELECT sql_text FROM events_statements_current WHERE thread_id = 58;
+--------------------+
| sql_text           |
+--------------------+
| CALL p1(10)        |
| SELECT a, SLEEP(a) |
+--------------------+
2 rows in set (0.01 sec)

mysql> SELECT sql_text FROM events_statements_current WHERE thread_id = 58;
+-------------+
| sql_text    |
+-------------+
| CALL p1(10) |
+-------------+
1 row in set (0.00 sec)

注意:58是查到的内部线程号

结论:

可以看到:语句以及内嵌语句都被STATEMENT STACK捕获,同一时刻,同个会话,多条语句。

STATEMENT STACK如何更新

计数器增加

pfs_get_thread_statement_locker_v2

计数器减少

pfs_end_statement_v2

限制与扩展说明

  • 默认情况下: statement_stack_max = 10
  • 当语句嵌套层级大于: statement_stack_max 的时候,嵌套的语句就不会记录了,全局变量: nested_statement_lost会被更新
  • 通过语句'show global status like "%performance_schema_nested_statement_lost%";' 可以查询丢失语句的数量

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

捉虫活动详情:https://greatsql.cn/thread-97-1-1.html

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

6440

zynq 7010/020 AMP双核通信-Vitis2023/2024 在platform cpu1设置中添加;注意value中使用空格分开程序思路:比较简单。 阅读详情

相关推荐

电涡流位移测量技术深度解密

电涡流位移传感器凭借非接触测量、高精度(可达纳米级)、强环境适应性(耐高温高压油污)等优势,成为工业精密位移检测的核心技术。其工作原理基于电磁感应:高频磁场在金属靶面感应涡流,通过检测线圈阻抗变化转化为位移信号。应用需注意靶材依赖性(需按实际材料标定)、安装精度及抗干扰措施。广泛应用于磁悬浮轴承、航空发动机、精密制造等领域,实现对微米级位移的可靠监测。

技术工作者 1755

MySQL如何定位未提交事务执行的SQL语句?

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34153893的博客 1298

告别卡顿!用AVPro Video在Unity 2022.3里流畅播放4K视频的保姆级配置流程

本文详细介绍了如何在Unity 2022.3中使用AVPro Video插件实现4K视频的流畅播放。从环境配置、插件选型到核心性能优化技巧,包括解码器设置、内存管理策略和多平台适配方案,帮助开发者彻底解决卡顿问题,提升视频播放体验。

weixin_32349561的博客 318

unreachable statement

今天突然出现一警告,unreachable statement 。 上网查查,发现有java同仁遇过同样的问题, 明白了,对应到我的项目就是, 在die()后已经不会继续执行了。没必要return 0; stackoverflow真是赞。 转载于:https://www.cnblogs.com/John-/p/6984899.html...

dike1074的博客 325

实战篇【2】-H3C防火墙开局基础配置

本篇文章为“H3C防火墙开局基础配置”,主要涵盖配置管理地址、聚合端口、安全区域、安全策略、静态路由、ACL,WEB和SSH远程管理、Console、SNMP、NTP时钟、日志主机等内容,对比交换机配置开局,增加两处配置,安全区域和安全策略。方便调试人员远程管理、调试。

weixin_47402139的博客 1万+

IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略

本文深入解析IP2315高效同步降压充电IC在快充应用中的硬件与软件控制策略,涵盖其核心特性、硬件电阻调节技巧、I2C动态控制方案、散热设计优化及典型问题排查。IP2315支持多种快充协议,如Type-C PD、华为FCP等,适用于便携设备快速充电需求,并通过I2C实现灵活的充电参数设置,提升充电效率与安全性。

weixin_29248313的博客 539

from __future__ import with_statement

from __future__ import with_statement http://docs.python.org/library/__future__http://stackoverflow.com/questions/3791903/which-pyth...

133

避坑指南:STM32定时器测PWM频率占空比时,那些CubeMX没告诉你的细节(蓝桥杯真题衍生)

本文深入解析STM32定时器测量PWM频率和占空比时的关键细节,揭示CubeMX配置中未明确的时钟树原理和输入捕获机制。针对蓝桥杯嵌入式赛题中的常见问题,提供动态调整预分频器、多采样数字滤波等实战解决方案,帮助开发者避免测量误差,提升PWM测量精度和稳定性。

weixin_28692153的博客 339

Loop doesn't see changed value without a print statement

今天逛V2的时候,看到别人发的一个帖子,问到了这样一个问题,然后在stackoverflow上看到了一个非常精彩的回答,特记录一下。问题和答案在这里:https://stackoverflow.com/questions/25425130/loop-doesnt-see-changed-value-without-a-print-statement

wojiushimogui的博客 562

Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码)

本文介绍如何使用Python自动化工具在3分钟内将微信收藏链接批量导出到TXT文件。通过模拟人类操作和OCR技术,脚本高效处理大量链接,显著提升工作效率,并附有完整代码和实战避坑指南。

weixin_29062671的博客 630

深入解析ADC采样电容:从充电误差到LSB精度的关键设计

本文深入解析了ADC采样电容在模数转换中的核心作用,重点探讨了充电时间常数与采样误差的博弈关系。通过推导最小采样时间公式,揭示了精度、速度、源阻抗与内部电容之间的制约关系,并提供了从理论计算到外部驱动电路设计的实战指南,是确保ADC达到LSB精度的关键。

android的专栏 1103

AWS CDK Python入门:从环境搭建到Stack部署实战

基础设施即代码(IaC)正从声明式配置迈向编程式构建,AWS CDK 以 Python 等通用语言重构了云资源编排范式。其核心原理是将 CloudFormation 抽象为可组合、可继承、可测试的 Python 类——Stack 定义部署单元,Construct 封装资源逻辑与安全默认值。这种编程模型显著提升可维护性与团队协作效率,尤其适合需快速验证架构、强化安全合规、并集成 CI/CD 的中大型项目。本文聚焦 CDK 最主流的 Python 使用路径,覆盖环境校验、Stack 编写、Construct 分

weixin_34302798的博客 322

实战|2026美团&大众点评餐饮数据抓取:Playwright/Selenium反爬全攻略

核心结论:2026年美团&大众点评的反爬核心是“多维度风控”,需组合使用“住宅IP+设备指纹伪装+真人行为模拟+动态验证处理”,Playwright是最优工具,Selenium仅作为补充。效率优化:单机爬取速度建议控制在“每小时500-800条”,避免高频请求触发风控;分布式爬取需确保每个节点使用独立住宅IP,且行为轨迹不一致。扩展方向集成WASM解密工具,破解2026年美团的Token加密;用AI识别动态点选验证,提升验证通过率;对接大数据平台,对抓取的餐饮数据进行可视化分析。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2463

ajax insert,sql - Jquery ajax insert statement - Stack Overflow

I am currently trying to work with jquery Ajax but having a little problam and will be glad to receive a little help!.I want to insert data into the database using jquery ajax and a web service.my htm...

weixin_39559071的博客 324

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

离线保存网页:用 SingleFile 把任意页面变成 1 个 HTML 文件

上周三,我想翻一篇两年前收藏的技术长文。点开链接,屏幕只弹出一个冷冰冰的 404。那一刻我意识到:收藏夹里躺着的,可能只是内容存在过的证据。后来我遇到了 SingleFile——一个能把网页完整保存为单个 HTML 文件的浏览器扩展,图片、样式、脚本全部打包进同一份文件,从此离线保存网页不再看网站脸色。 ## 为什么你"另存为"的网页,一打开就废了? 右键"另存为",得到的是一个 HTML 加

gitblog_01121的博客 481

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JDBC Statement vs PreparedStatement – SQL Injection Example

While working with JDBC API for database connectivity, we can use Statement orPreparedStatement to execute queries. These queries can be CRUD operation queries or even DDL queries to create or dro

nobody 1203

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

‘while‘ statement cannot complete without throwing an exception

idea在调试项目的过程中while出现了如下字样 ‘while’ statement cannot complete without throwing an exception 去Stack Overflow 查了一下,有两种解决方法, 在while语句上添加如下注释 : java //noinspection InfiniteLoopStatement 可以在包含无限循环的方法之上添加以下内容以禁止显示警告:@SuppressWarnings("InfiniteLoopStatement")

南山的博客 1万+

android sqlite update,sql - Android SQLite: Update Statement - Stack Overflow

I use this class to handle database.I hope it will help some one in future.Happy coding.public class Database {private static class DBHelper extends SQLiteOpenHelper {/*** Database name*/private stati...

weixin_39998998的博客 194

怎用oradebug生成call stack - Using oradebug to dump call stack

Using “oradebug dump errorstack <dump level>” one can dump the call stack of the process after attaching to a running session. There are 3 values that can be passed as dump level 0 – dump error ...

mygodhome的专栏 317

Sth about Java

集合安全: Vector:就比Arraylist多了个同步化机制(线程安全),因为效率较低; Statck:堆栈类,先进后出; Hashtable:就比Hashmap多了个线程安全; Enumeration:枚举,相当于迭代器; 除了这些之外,其他的都是非线程安全的类和接口。   PreparedStatement和Statement的区别: 1.PreparedStatement

leixiangk的专栏 394

IAR调试使用技巧汇总:数据断点、CallStack、设置堆栈、查看栈使用和栈深度、Memory、Set Next Statement等

目录 1.使用数据断点 2.Set next statement 手动执行到某行代码 3.设置堆栈大小 4.静态查看程序Stack栈使用详情,以及栈深度 5.动态查看程序运行Stack占用情况 6.Call stack查看当前栈空间 7.使用Memory查看程序运行中各种过程数据 8.IAR Map文件解析堆栈信息 9.IAR xx.icf存储资源文件解析 10.IAR各编译文件含义 1.使用数据...

码农-做一个勤奋的人 5883

html中的c choose,html - How to use select option in the c:choose statement - Stack Overflow

I need to hide or show a combo depending on the value of the another combo, find my code below:Nazionetest="${residence_nation.???==106}">ProvinciaProvincia" >I don't know how to use residence_n...

weixin_28911221的博客 151

PostgreSQL日志与审计全解析:从配置到实战排查

在数据库运维中,日志是排查问题、保障数据安全的核心机制。其原理是通过记录数据库系统的运行状态、用户操作和性能指标,为故障诊断、安全审计和性能优化提供关键依据。这一技术价值在于提升系统的可观测性与可靠性,广泛应用于故障恢复、安全合规和性能监控等场景。PostgreSQL作为功能强大的开源关系型数据库,提供了灵活且多维度的日志记录能力,包括标准错误日志、语句执行日志和详细的执行计划日志。通过合理配置log_statement、log_min_duration_statement等参数,并结合pgBadger等专

weixin_30299709的博客 300

如何创建语句级触发器_表级操作监控与日志记录实现

而行级触发器对每一行都触发一次。用 SQL%ROWCOUNT,但它必须在触发器体中立即读取(不能放在函数调用后再查)Oracle 12c+ 支持 DBMS_UTILITY.FORMAT_CALL_STACK,但语句级触发器里拿不到调用 SQL 文本,别白费劲怎么写一个最小可用的语句级审计触发器核心是声明 FOR EACH STATEMENT,并用 AFTER 阶段保证操作已提交(或回滚)完成,日志才落盘。

qq_43270366的博客 214

PostgreSQL Logging: Everything You Need to Know

PostgreSQL logs are a valuable resource for troubleshooting problems, tracking performance, and auditing database activity. Before deploying your application to production, it's necessary to fine-tune the logging configuration to ensure that you're recordi

allway2的博客 249

IDEA调试JUnit4源码实战:深入理解测试生命周期与断点技巧

单元测试是保障软件质量的关键环节,其核心在于验证代码单元在隔离环境下的正确性。JUnit作为Java生态中最主流的测试框架,其内部通过精巧的Runner、Statement等组件构建了一套完整的测试生命周期管理机制。理解这套机制的技术价值在于,开发者不仅能编写测试用例,更能诊断复杂测试问题,例如@Before/@After执行顺序异常、测试规则(Rule)失效等,从而提升测试代码的可靠性与可维护性。在实际的工程实践中,结合IntelliJ IDEA强大的调试功能,如条件断点、字段观察点和非挂起断点,可以高效

weixin_34087307的博客 439
上一篇: MySQL科学计数法展示解惑
下一篇: Debezium的增量快照
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值