场景问题: VisualVM工具Profiler JDBC不是真实执行的SQL

news2024/9/25 9:39:48

1. 问题

诡异的问题表象: 前端反馈分页接口的Total字段一直为0

使用Visualvm中的 Profiler 注入到应用后,查看JDBC监控得到了分页接口执行的SQL,复制出来执行是55. 此时还没有注意到 IN 的范围中有一个特别的值 'NULL' 🤨

在这里插入图片描述

2. 排查

开始查使用到的Mybatis plus分页插件是不是有bug,debug一轮发现SQL执行的结果就是0 然后才赋值给的IPage对象 😢 这下更奇怪了

重放请求,继续! 往JDBC执行SQL的入口去找,就不信是DataGrip的问题,然后在MySQL的驱动中发现 com.mysql.cj.NativeSession#execSQL 执行的SQL是 SELECT COUNT(*) ... id NOT IN (null, 128, 129) emmm 迷茫🤨

根据MySQL官方文档所描述 operator IN() 可以确认这个 id not in 子句永远会返回null 所以不会有符合条件的数据 count为0。

To comply with the SQL standard, IN() returns NULL not only if the expression on the left hand side is NULL, 
but also if no match is found in the list and one of the expressions in the list is NULL. 

好了,只要在应用代码中加个过滤空问题就解决了🤣

又是一个低级错误导致表象看起来不可思议问题的案例

问题又来了,为什么visualvm中监控到的SQL是 in ( 'NULL' ) 呢 😟

看了下这个项目大部分是Java代码,拉他代码瞅瞅,拉下来发现是古早的ant项目,emmm 在IDE中调试的想法直接放弃,转而从GUI入手, 找到这个界面对应的代码 ProfilerJDBCPanel

但是由于没构建,只能手动搜文件和字符串去找调用关系,总所周知项目中SQL的执行基本都是用PreparedStatement, 传入的只有模板和参数,真实SQL是驱动构建的,visualvm 同样要走这一步。

看了一会发现一个可疑的方法 org.graalvm.visualvm.lib.jfluid.results.jdbc.SQLStatement#getFullSql 。 通过 arthas watch 这个方法后,确认了是这里返回了错误的SQL。😓

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【运维必学】2.零基础搞IT运维之服务器操作系统基础知识储备

微信改版了,现在看到我们全凭缘分,为了不错过【全栈工程师修炼指南】重要内容及福利,大家记得按照上方步骤设置「接收文章推送」哦~ 文章目录: 温馨提示:作者最近开通的知识星球,全栈系列从门到实践教程将会…

QT----写完的程序打包为APK在自己的手机上运行

目录 1、qt安装android组件2、打开qt配置Android 环境3、手机打开开发者模式,打开usb调试,连接电脑4、运行代码 1、qt安装android组件 qtcreater–工具-QTMaintenaceTool-startMaintenaceTool—登陆—添加或修改组件—找到android,安装 若是…

Windows环境MySQL全量备份+增量备份

目录 一、环境准备 1.1.安装MySQL 1.2.添加log-bin日志配置 二、创建测试数据库和表 2.1.创建测试数据库 2.2.创建测试数据表 三、全量备份恢复数据库 3.1.全量备份数据库 3.2全量恢复数据库 四、增量备份恢复数据库 4.1.增量备份数据库 4.2.增量恢复数据库 五、…

抽象步骤条(2.0版本)

vue3 router ele-plus 猜猜看为什么使用组件库&#xff01; 他呀的&#xff01;查看密码要自己写&#xff0c;验证信息也要自己写&#xff0c;所以说会用组件库会轻松一点&#xff0c;&#xff0c;&#xff0c; 代码如下 <template><div class"main"&g…

自动化构建平台(五)之Jenkins初始化配置以及插件安装操作

文章目录 前言一、安装必要插件二、系统参数配置三、全局工具配置总结 前言 上一篇我们介绍了Jenkins的安装和登录等相关操作&#xff0c;今天给大家介绍登录Jenkins后的一些初始化配置和插件安装的操作。因为如果要使用Jenkins来进行代码构建&#xff0c;必须先安装相关的插件…

WebDAV之π-Disk派盘+人生Life

人生Life是一款日程软件,在这款待办的日程软件当中各种功能极为的完善,完全的足够用户在日常当中的使用,你的待办方面的各种内容都能够在软件上面进行规划和填充,通过待办事项来帮助用户提高在日常当中的效率,对于用户来说这款待办事项的软件是绝佳的选择。 π-Disk派盘 …

VScode---php环境搭建

文章目录 1.下载php Dehug;php server2.下载php环境3.配置环境变量5.配置php.ini文件6.设置vscode6.测试遇到的问题 1.下载php Dehug;php server 2.下载php环境 下载地址&#xff1a;https://www.php.net/downloads.php 3.配置环境变量 C:\Users\hacker>php -v PHP 8.3.3 (…

c++编程复习之字符数组:电报文字

电报文字 内存限制&#xff1a;128Mb 时间限制&#xff1a;1000s 提交&#xff1a;138 解决&#xff1a;13 题目描述 输入一行电报文字&#xff0c;将字母变成其下一字母&#xff08;如’aa’变成’bb’……’zz’变成’&#xff41;&#xff41;’其它字符不变&#xff09;。 …

【leetcode】随机链表的复制

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 点击查看题目 思路: struct Node* copyRandomList(struct Node* head) {struct Node* curhead;//1.copy原链…

温湿度传感器SHT21

SHT21是一款基于IIC的温湿度传感器&#xff0c;它的引脚及定义如下&#xff1a; 标准的IIC器件&#xff0c;没有其他多余的引脚&#xff0c;应用框图如下&#xff1a; 温度的测量范围是-40到125℃&#xff0c;湿度测量范围0-100%RH&#xff0c;具体参数及采样精度见下图&#x…

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致 现在有sqlserver和mysql两个库上的表在进行同步&#xff0c;sqlserver上的是源表&#xff0c;mysql上是目标表。 我们就把sqlserver上的数据同步到mysql上 mysql 是没有数据的。 sqlserver的三个表只是创建了…

Java-集合/容器

集合的概念 当我们需要保存一组一样&#xff08;类型相同&#xff09;的元素的时候&#xff0c;我们应该使用一个容器来存储&#xff0c;数组就是这样一个容器。 数组的特点&#xff1a; 数组是一组数据类型相同的元素集合&#xff1b; 创建数组时&#xff0c;必须给定…

Rabbitmq消息丢失-生产者消息丢失(一)

说明&#xff1a;消息生产者在将数据发送到Mq的时候&#xff0c;可能由于网络等原因造成数据投递失败。 消息丢失大致分三种&#xff1a;这里说的是生产者消息丢失&#xff01; 分析原因&#xff1a; 1.有没有一种可能&#xff0c;我刚发送消息&#xff0c;消息还没有到交换…

Matlab|配电网智能软开关(sop)规划模型

目录 1 主要内容 目标函数 2 部分程序 3 程序结果 3.1 sop选址定容优化模型 3.2 对比算例&#xff08;不含sop&#xff09; 4 下载链接 1 主要内容 该程序参考文献《基于改进灵敏度分析的有源配电网智能软开关优化配置》&#xff0c;采用二阶锥算法&#xff0c;以改进的…

Vue3+element-plus复杂表单分组处理

一、为什么表单要分组处理&#xff1f; 方便表单字段的复用&#xff1a;例如&#xff0c;你的表单有十个字段会在很多的表单都会用到&#xff0c;那么表单则需要进行分组进行表单复用&#xff1b;实现不同角色的表单权限控制&#xff1a;例如一个表单有60个字段&#xff0c;角…

STM32 NAND FLASH知识点

1.NAND FLASH的简介 NAND FLASH 的概念是由东芝公司在 1989 年率先提出&#xff0c;它内部采用非线性宏单元模式&#xff0c;为固态大容量内存的实现提供了廉价有效的解决方案。 NAND FLASH 存储器具有容量较大&#xff0c;改写速度快等优点&#xff0c;适用于大量数据的存储&…

【MySQL】事务、锁

目录 事务案例场景模拟实现转账&#xff1a;从张三的账户转账500元到李四的账户SQL示例异常 什么是事务事务的特性&#xff0c;简称ACID 属性实现原理redo logundo log MySQL 中一条 SQL 更新语句的执行过程( InnoDB 存储引擎)事务的提交流程隔离性并发事务产生的问题事务隔离级…

434G数据失窃!亚信安全发布《勒索家族和勒索事件监控报告》

最新态势快速感知 最新一周全球共监测到勒索事件90起&#xff0c;与上周相比数量有所增加。 lockbit3.0仍然是影响最严重的勒索家族&#xff1b;alphv和cactus恶意家族也是两个活动频繁的恶意家族&#xff0c;需要注意防范。 Change Healthcare - Optum - UnitedHealth遭受了…

【Python】外网远程登录访问jupyter notebook+pycharm使用ipython

第一步&#xff1a;创建python虚拟环境 conda create -n py3610 python3.6.10第二步&#xff1a;安装ipython pip install ipython pip install ipython notebook第三步&#xff1a;创建 IPython Notebook 服务器配置文件 # 进入python交互shell&#xff0c;设置密码 >&…

SpringCloud(19)之Skywalking应用上篇

一、Skywalking概述 随着互联网架构的扩张&#xff0c;分布式系统变得日趋复杂&#xff0c;越来越多的组件开始走向分布式化&#xff0c;如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用&#xff0c;这些组件共同构成了繁杂的分布式网络。 思考以下…