当前位置: 首页 > news >正文

MySQL insert ... select 语句锁表导致数据写不进去

问题现象

调用后台接口向表 t1 insert 写入数据时一直等待直到超时,猜测表 t1 被其它事务加锁了没有释放。

问题分析

在发生死锁时,通过执行下面命令查看事务和锁信息:

  • select * from information_schema.INNODB_TRX 用来查看正在运行的事务信息,包括事务的锁信息,只要有运行的事务就有输出内容
mysql> select * from information_schema.INNODB_TRX\G
*************************** 1. row ***************************trx_id: 40549trx_state: RUNNINGtrx_started: 2024-10-11 08:13:30trx_requested_lock_id: NULLtrx_wait_started: NULLtrx_weight: 5trx_mysql_thread_id: 41trx_query: NULLtrx_operation_state: NULLtrx_tables_in_use: 0trx_tables_locked: 2trx_lock_structs: 3trx_lock_memory_bytes: 1136trx_rows_locked: 3trx_rows_modified: 2trx_concurrency_tickets: 0trx_isolation_level: REPEATABLE READtrx_unique_checks: 1trx_foreign_key_checks: 1
trx_last_foreign_key_error: NULLtrx_adaptive_hash_latched: 0trx_adaptive_hash_timeout: 0trx_is_read_only: 0
trx_autocommit_non_locking: 0
1 row in set (0.00 sec)
  • select * from information_schema.INNODB_LOCKS 查询锁信息,只有发生死锁时才会输出内容

    mysql> select * from information_schema.INNODB_LOCKS\G
    *************************** 1. row ***************************lock_id: 40554:938:3:1
    lock_trx_id: 40554lock_mode: Xlock_type: RECORDlock_table: `allen`.`student`lock_index: PRIMARYlock_space: 938lock_page: 3lock_rec: 1lock_data: supremum pseudo-record
    *************************** 2. row ***************************lock_id: 40549:938:3:1
    lock_trx_id: 40549lock_mode: Slock_type: RECORDlock_table: `allen`.`student`lock_index: PRIMARYlock_space: 938lock_page: 3lock_rec: 1lock_data: supremum pseudo-record
    2 rows in set, 1 warning (0.00 sec)
    
  • select * from information_schema.INNODB_LOCK_WAITS 也是在只有死锁时才会输出内容,查询阻塞的事务因为哪个事务没有释放锁导致获取不到锁

    mysql> select * from information_schema.INNODB_LOCK_WAITS\G
    *************************** 1. row ***************************
    requesting_trx_id: 40554
    requested_lock_id: 40554:938:3:1blocking_trx_id: 40549blocking_lock_id: 40549:938:3:1
    1 row in set, 1 warning (0.00 sec)

    上面 3 个命令都只能在 MySQL 8.0之前使用,如果是 MySQL 8.0 及之后的版本,使用下面的命令查询事务锁信息

    先执行 SET GLOBAL innodb_status_output_locks = ON;,再执行show engine innodb status;

mysql> show engine innodb status\G...
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 421571571083608, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421571571082688, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421571571080848, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 421571571079008, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 40571, ACTIVE 5 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 2 lock struct(s), heap size 1136, 1 row lock(s)
MySQL thread id 43, OS thread handle 140096265193216, query id 1332 172.17.0.1 root update
/* ApplicationName=DBeaver 7.3.5 - SQLEditor <Script-15.sql> */ insert into student (num,age,name) values(003,10,'小明')
------- TRX HAS BEEN WAITING 5 SEC FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 938 page no 3 n bits 72 index PRIMARY of table `allen`.`student` trx id 40571 lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 00: len 8; hex 73757072656d756d; asc supremum;;------------------
TABLE LOCK table `allen`.`student` trx id 40571 lock mode IX
RECORD LOCKS space id 938 page no 3 n bits 72 index PRIMARY of table `allen`.`student` trx id 40571 lock_mode X insert intention waiting
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 00: len 8; hex 73757072656d756d; asc supremum;;---TRANSACTION 40566, ACTIVE 10 sec
3 lock struct(s), heap size 1136, 3 row lock(s), undo log entries 2
MySQL thread id 41, OS thread handle 140096265463552, query id 1330 172.17.0.1 root
TABLE LOCK table `allen`.`student` trx id 40566 lock mode IS
RECORD LOCKS space id 938 page no 3 n bits 72 index PRIMARY of table `allen`.`student` trx id 40566 lock mode S
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 00: len 8; hex 73757072656d756d; asc supremum;;

可以看出执行 insert … select 的时候,会对select查询满足条件的行和间隙加共享锁。之所以加锁为了日志和数据的一致性,如果不加锁,可能在insert into t2 select from t1执行过程中对 t1 insert新数据,insert into t1的binlog日志可能早于 insert … select from t1记录,binlog 同步到备库时,就会先执行insert into t1,再执行insert into t2 select from t1,导致备库和主库不一致。

找到执行 insert … select 事务后,发现 insert … select 其实执行的很快,但此事务在执行完 insert … select 语句后面有比较耗时的操作。

问题解决

将执行 insert … select 事务的耗时操作拆分到另一个事务中,不要影响 insert … select 对查询表的锁释放。

相关文章:

MySQL insert ... select 语句锁表导致数据写不进去

问题现象 调用后台接口向表 t1 insert 写入数据时一直等待直到超时&#xff0c;猜测表 t1 被其它事务加锁了没有释放。 问题分析 在发生死锁时&#xff0c;通过执行下面命令查看事务和锁信息&#xff1a; select * from information_schema.INNODB_TRX 用来查看正在运行的事…...

Android摄像头Camera2和Camera1的一些总结

Android 系统对摄像头的同时使用有限制&#xff0c;不能同时使用摄像头进行预览或者录制音视频。 例如&#xff1a;界面上有两个SurfaceView, 这两个SurfaceView不能同时预览或者录制音视频&#xff0c;只能有一个正常工作&#xff08;一个SurfaceView预览前置摄像头&#xff…...

【Linux 从基础到进阶】Linux中的用户认证与授权

Linux中的用户认证与授权 1. 引言 在Linux系统中&#xff0c;**用户认证&#xff08;authentication&#xff09;和授权&#xff08;authorization&#xff09;**是两个核心的安全机制&#xff0c;用来控制系统资源的访问和管理用户操作权限。用户认证确保登录的用户是合法的…...

用户界面设计:视觉美学与交互逻辑的融合

1、什么是用户界面 用户界面&#xff08;UI&#xff09;是人与机器之间沟通的桥梁&#xff0c;同时也是用户体验&#xff08;UX&#xff09;的重要组成部分。用户界面设计包括两个核心要素&#xff1a;视觉设计&#xff08;即产品的外观和感觉&#xff09;和交互设计&#xff…...

ZK集群搭建:详细步骤与注意事项

在大数据和分布式系统日益重要的今天&#xff0c;ZooKeeper&#xff08;简称ZK&#xff09;作为一种分布式协调服务&#xff0c;扮演着举足轻重的角色。它主要用于管理大型分布式系统中的配置信息、命名、同步等。下面将详细介绍如何搭建一个ZooKeeper集群&#xff0c;帮助大家…...

如何将csdn文章导出为pdf

前言 在csdn上浏览文章的时候我发现有的文章支持pdf导出&#xff0c;但是有的文章不支持pdf导出&#xff0c;为了解决能将csdn上所有文章都能以pdf格式导出遂作此文。 正文 先上代码&#xff1a; (function(){use strict;var contentBox $("div.article_content")…...

【艾思科蓝】Imagen:重塑图像生成领域的革命性突破

【连续七届已快稳ei检索】第八届电子信息技术与计算机工程国际学术会议&#xff08;EITCE 2024&#xff09;_艾思科蓝_学术一站式服务平台 更多学术会议请看 学术会议-学术交流征稿-学术会议在线-艾思科蓝 目录 引言 一、Imagen模型的技术原理 1. 模型概述 2. 工作流程 …...

java类和对象(下): 封装 static成员 内部类

前言&#xff1a; 在前期的知识点中&#xff0c;我们学习了java中this函数的使用和相关的概念。这期我们将介绍封装的概念&#xff0c;以及常见内部类的使用&#xff0c;让我们开车吧&#xff01;&#xff01;&#xff01;&#xff01; 本期目录&#xff1a; 6. 封装 7. st…...

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入武汉某软件公司&#xff0c;干了差不多3个星期的功能测试&#xff0c;那年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…...

VIVO算法题——数位之积

记录算法究极无敌菜菜菜鸟的垃圾思维 题目&#xff1a; 现给定任意正整数 n&#xff0c;请寻找并输出最小的正整数 m&#xff08;m>9&#xff09;&#xff0c;使得 m 的各位&#xff08;个位、十位、百位 … …&#xff09;之乘积等于n&#xff0c;若不存在则输出 -1。 菜鸟…...

OPC Router快速打通设备层与influxDB数据通讯

随着时代演化&#xff0c;数据量呈几何倍数增加的情况下出现了时序数据库。时序数据库是基于时间进行存储的数据库&#xff0c;每一条数据中都有一个时间戳&#xff0c;这种数据库特别适合存储那些随着时间变化的数据&#xff0c;通过一些工具处理后&#xff0c;能够分析出数据…...

鸿蒙开发 四十四 ArkTs BuilderParam传递UI(二)

子组件多个BuilderParam&#xff0c;必须通过参数的方式传入&#xff0c;如果界面中有多个界面需要传递&#xff0c;可以定义多个尾随闭包&#xff0c;如图&#xff1a; 在自定义组件中调用&#xff1a; 在使用时候调用是作为参数传递给自定义的组件&#xff0c;参数是界面&…...

同期数分析-留存率

目录 同期数分析 加载数据 单月实现 统计每个月的订单量 求2月份的订单量和用户数量 求2月之前的历史订单量 筛选出2023年2月的新增的用户数 计算2023年2月在后面的留存情况 完整的2023年2月份同期群结果 遍历合并和分析 引入月份列表 遍历 调整成留存率的形式 回…...

Java前后端交互:构建现代Web应用

在现代Web应用开发中&#xff0c;前后端分离是一种常见的架构模式。后端通常负责数据处理和业务逻辑&#xff0c;而前端则负责用户界面和用户体验。Java作为后端开发的强大语言&#xff0c;提供了多种方式与前端进行交互。本文将探讨Java后端与前端交互的几种主要方式&#xff…...

vue3中用axios请求怎么添加cookie

在 Vue 3 中使用 axios 发起请求时&#xff0c;可以通过配置 axios 的请求选项来携带 Cookies。具体来说&#xff0c;确保跨域请求时&#xff0c;设置 withCredentials: true&#xff0c;以便发送和接收 Cookies。 1. Axios 配置携带 Cookie 首先确保你在 axios 请求中设置了…...

informer学习笔记

一、informer讲解 infomer 要解决的三大问题&#xff1a; Attention计算的更快Decoder要一次性输出所有预测堆叠encoder也要更快 1. Attention 在长序列中&#xff0c;并非每一个位置的Attention都重要&#xff0c;对于每一个Q来说&#xff0c;只有一小部分的K与其有较强的…...

Elasticsearch介绍和使用

一、Elasticsearch 强大的搜索和分析能力&#xff1a; Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎。它能够快速地对大量数据进行全文搜索、结构化搜索和复杂的数据分析操作。对于大型数据集&#xff0c;它可以高效地处理各种查询需求&#xff0c;包括关键词搜索…...

【Flutter】基础入门:代码基本结构

通过这个简单的 Flutter 示例程序&#xff0c;我们可以快速了解 Flutter 的代码结构&#xff0c;理解每个部分的作用。 import package:flutter/material.dart; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}…...

如何进行数据库缩容 | OceanBase应用实践

作者&#xff1a;关炳文&#xff0c;爱可生 DBA 团队成员&#xff0c;负责数据库相关技术支持。 本文详细介绍了OceanBase V3.2版的集群中&#xff0c;面对数据文件缩容的场景的一套缩容方案&#xff0c;作为大家的参考。 缩容场景 某银行运行的一套采用1-1-1架构的OceanBase…...

机器学习和深度学习的差别

定义和基本原理 机器学习&#xff1a; 定义&#xff1a;机器学习是一种让计算机自动从数据中学习规律和模式的方法&#xff0c;无需明确编程。它通过构建数学模型&#xff0c;利用已知数据进行训练&#xff0c;然后对新的数据进行预测或决策。基本原理&#xff1a;机器学习算…...

Unity-MCP协议:可嵌入、可协商的AI上下文通信标准

1. 这不是又一个“AI插件”&#xff0c;而是Unity开发工作流的底层重定义你有没有过这样的时刻&#xff1a;在Unity里反复调整Animator Controller的过渡条件&#xff0c;只为让角色转身动画不穿模&#xff1b;写完一段NavMesh寻路逻辑&#xff0c;却要花两小时调试Agent卡在斜…...

ARM PMU外部接口与性能监控寄存器详解

1. ARM性能监控寄存器外部接口深度解析性能监控单元(PMU)是现代处理器架构中用于硬件性能分析的核心模块&#xff0c;它通过一组可编程计数器实时捕获处理器微架构层面的各类事件。在ARMv8/v9架构中&#xff0c;PMU不仅可以通过系统寄存器访问&#xff0c;还提供了标准化的外部…...

双稳健机器学习:用正交性与交叉拟合解决因果推断中的ML偏差

1. 项目概述&#xff1a;当机器学习遇见因果推断的“干扰”难题在实证研究的日常工作中&#xff0c;我们常常面临一个核心矛盾&#xff1a;我们真正关心的&#xff0c;往往只是一个或几个关键参数——比如一项政策对就业率的平均影响&#xff08;平均处理效应&#xff0c;ATE&a…...

CPU架构启发的智能仓储布局优化实践

1. 仓库布局优化的核心挑战与创新机遇在物流仓储领域&#xff0c;拣货环节通常占据运营成本的55%-65%&#xff0c;而其中约50%的时间消耗在无效行走路径上。传统矩形仓库布局虽然易于规划和施工&#xff0c;但其正交的通道设计导致拣货员需要频繁进行90度转向&#xff0c;这种&…...

HiveWE终极指南:快速掌握魔兽争霸III现代化地图编辑器

HiveWE终极指南&#xff1a;快速掌握魔兽争霸III现代化地图编辑器 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 还在为传统魔兽争霸III地图编辑器缓慢的加载速度和复杂的操作界面而烦恼吗&#xff1f;Hiv…...

统信UOS浏览器书签同步难题?一招搞定所有新用户默认书签配置

统信UOS浏览器书签批量配置&#xff1a;系统管理员的高效部署指南在企业或教育机构的IT运维工作中&#xff0c;统信UOS作为国产操作系统的代表&#xff0c;其浏览器书签的统一管理常常成为系统管理员面临的挑战。想象一下&#xff0c;每当有新员工入职或学生入学&#xff0c;都…...

3个实用场景教你轻松解锁网易云音乐NCM加密文件:ncmdumpGUI完整指南

3个实用场景教你轻松解锁网易云音乐NCM加密文件&#xff1a;ncmdumpGUI完整指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾经下载了网易云音乐的…...

从数据到模型:手把手教你预处理MPIIFaceGaze和EyeDiap数据集(Python实战)

从数据到模型&#xff1a;手把手教你预处理MPIIFaceGaze和EyeDiap数据集&#xff08;Python实战&#xff09;当你第一次打开MPIIFaceGaze或EyeDiap数据集的压缩包时&#xff0c;那种面对杂乱文件夹和神秘.mat文件的迷茫感&#xff0c;我太熟悉了。作为计算机视觉工程师&#xf…...

Unity项目实战:用TriLib插件动态加载FBX模型,5分钟搞定外部资源读取

Unity项目实战&#xff1a;用TriLib插件高效加载外部FBX模型的完整指南在VR展示、产品配置器等需要动态加载用户上传模型的场景中&#xff0c;如何快速实现外部FBX文件的读取是许多Unity开发者面临的挑战。传统的手动导入方式不仅效率低下&#xff0c;更无法满足运行时动态加载…...

Unity中MMD初音资源导入与动画落地全流程指南

1. 这不是普通模型包&#xff1a;初音跳舞资源在Unity中的真实价值定位“Unity初音跳舞精品模型动画资源分享”——看到这个标题&#xff0c;很多刚接触Unity的美术向开发者第一反应是&#xff1a;“哇&#xff0c;能直接放进项目里做Demo了&#xff01;”但我在带三个独立游戏…...