MySQL加非聚簇索引造成core dump及简单分析

本文从5.1.48下的一个bug说起。前提是新特性fast index creation.

 

         1、现象        

5.1.48 (InnoDB plugin 1.0.9)

Session1

Session2

create table tb(a int)engine=innodb;

insert into tb values(1),(2),(3),(4),(5);

 

Begin;

 

select * from tb where a=3;

a

3

 

 

alter table tb add index a(a);

select * from tb where a=3;

ERROR 2013 (HY000): Lost connection to MySQL server during query

 

 

   说明:session1提示lost connection,实际上MySQL已经dump了。

 

2、分析

         这个结果还是比较好理解的。有fast index creation,默认不需要重作表,因此没有表锁。

Session1开始于加索引之前,第一个select语句使用的是全表扫描,第二个select语句执行时,索引已经建好,所以查询时候使用索引a。这在实现上就可能触发诸多雷区(实际上概念上都已经错误,下文描述)。

在这个版本的实现中,由于新建索引导致第二次select时候使用了prebuilt-> search_tuple. 这个结构在事务开始前没有初始化,因此在尝试使用时类型判断错误直接abort。(row0sel.c)

 

3、最新版本的实现

         由于5.1.48在我们线上用的比较普遍,因此特别查了这个版本的实现和原因。在5.1最新版本中已经避免了这个问题;5.5最新版本也避免了,但有趣的是,两个版本的实现机制完全不同。

        

         我们先列出两个版本的效果再讨论。

         5.1.61的效果

5.1.61 (InnoDB plugin 1.0.17)

Session1

Session2

create table tb(a int)engine=innodb;

insert into tb values(1),(2),(3),(4),(5);

 

Begin;

 

select * from tb where a=3;

a

3

 

 

alter table tb add index a(a);

select * from tb where a=3;

ERROR 1412 (HY000): Table definition has changed, please retry transaction

 

 

5.5.19的效果

5.5.19

Session1

Session2

create table tb(a int)engine=innodb;

insert into tb values(1),(2),(3),(4),(5);

 

Begin;

 

select * from tb where a=3;

 

 

alter table tb add index a(a);

lock here

select * from tb where a=3;

a

3

 

 

可以看到,两个版本的实现方法不同。5.1里面通过判断索引生成时间与事务开始时间的差别,提示用户需要重启事务。

5.5则是作了个锁升级,锁住加索引操作。并且这个操作不影响session1的一致性读。(当然很容易想到在session1执行一个更新操作是什么效果)。

 

策略上5.5的实现更符合repeatable-read的概念。

 

4、其他

                   说明下,5.1的其他版本未试验。               

Java后端面试突击指南:三轮复习法攻克八股文、场景题与AI新考点 在软件工程实践中,构建扎实的知识体系是应对复杂技术挑战的基石。其核心原理在于将离散的知识点通过逻辑框架进行有效串联,从而提升问题分析与解决能力。这一过程的技术价值在于,它能帮助开发者在面对海量信息时,快速定位核心,实现高效学习与知识迁移。尤其在面试准备、技术攻坚等应用场景中,结构化的复习策略显得尤为重要。本文聚焦于Java后端技术栈,针对高频出现的面试考点,如并发编程中的线程池原理与JVM性能调优,提供了一套可操作的短期突击方法论。该方法强调功利性学习,通过三轮递进式复习,帮助应试者快速建立有竞争力的知识框 阅读详情

相关推荐

mysql 数据库断电崩溃恢复

前言 嘤。 晚上跑了个循环删除部分数据的程序,因为表很大要删的很多,没有索引不能用where,所以遍历表取出来数据检测后根据id删。早上起来发现半夜断电了,可能因为我这个程序在运行中的时候断电了,mysql启动不起来了。。 参考文献 https://www.cnblogs.com/lnlvinso/p/4596531.html 大致思路 先强制启动,将数据备份出来,然后找到坏表删掉或重装数据库,将数据恢复回去。 启动报错 运行 service mysql start 启动命令报错,查看了一下

兰兰的博客 2999

mysql assertion_[转]解决Mysql InnoDB: Failing assertion: ret || !assert_on_error问题

国庆回来后,发现mysql停止服务了,没办法继续启动了。查看日志,看到:131008 09:56:03 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql131008 9:56:03 [Warning] option 'read_buffer_size': unsigned value 1024 adjust...

weixin_39611820的博客 881

【信息科学与工程学】计算机科学与技术——第七十七篇 系统架构设计02

编号类型模型配方企业资本运作的方法/规则/条件/依据及所有的步骤(​风险处理/异常处理/危机应对关联知识法律法规和裁决依据​​由发起人(通常是知名投资人、投行或产业资本)先设立一个只有现金、无实际业务的特殊目的收购公司(SPAC),通过IPO募集资金并在交易所上市。然后在规定时间内(通常24个月)寻找一家非上市公司进行合并(De-SPAC),使目标公司迅速实现上市,规避传统IPO的复杂流程和不确定性。1.:在开曼或特拉华注册空壳公司,注入少量种子资金。2.

weixin_49199313的博客 316

mysql [ERROR] [MY-013183] [InnoDB] Assertion failure: fil0fil.cc:10754 Status: NOT_KILLED

启动数据库,随后找到mysql数据目录 /var/lib/mysql,将 出现问题的数据库删除,再将innodb_force_recovery修改为0启动数据库。innodb_force_recovery 从0-6以此重启,但是到6可以重启,重启完成后也无法使用。恢复数据库时导致服务器磁盘满了,mysql宕机,重启报错。2.网上搜索很多方面解决办法。1.mysql启动报错。再附一个详细有用的链接。

weixin_44696445的博客 2332

K210开发板学习笔记(三)——STM32+K210+SD卡实现人脸识别(完整K210代码)

更新日记:2022年4月26日 更新了串口通信部分的内容,本文写的略为粗糙,恐有不当之处,希望大家不吝赐教。 人脸识别 一、MaixPy IDE开发 参考博主晨少hc的博文(https://blog.youkuaiyun.com/HuangChen666/article/details/113995079)来实现人脸识别功能,我用的硬件是亚博智能的K210开发板,在配置工程中有几步和这个博主的不一样,需要注意。 所需要的文件有:模型文件),脚本文件,ide需要的bin文件...

Embedded learner的博客 4万+

高效静音黑科技 —— 单相直流无刷电机驱动器

然而,传统的BLDC电机驱动通常依赖于三相架构,电路复杂,成本高昂,且在低功率应用中显得有些“大材小用”。单相直流无刷电机驱动器作为一项高效、静音、经济的技术,正逐渐改变着各个领域的电机驱动方式。其精巧的控制策略、显著的优势以及广阔的应用前景,都预示着这项技术将在未来扮演越来越重要的角色。它相较于传统的三相驱动,显著简化了电路结构,降低了成本,尤其适用于低功率、对静音要求极高的应用场景。通过这些模块的协同工作,单相直流无刷电机驱动器能够实现对电机速度、扭矩的精确控制,并最大程度地降低噪声和振动。

wen8789的博客 1766

Mysql 非正常关闭,启动异常

Mysql 启动异常

qq_15138049的博客 1052

汇川AM402、H3U和上位机C#ModebusTcp通讯

目录一、测试任务二、测试环境三、PLC工程1、组态配置2、ip地址、端口号 3、全局变量定义四、C#端Winform程序创建1创建主界面 2、创建子窗口 3、运行生成,界面效果4、Modebus协议说明5、Modebus操作说明六、测试1、寄存器读测试 2、MW1300寄存器的BIT位3、写寄存器测试4、PLC断电或者断网 七、工程下载连接1、PLC作为ModebusTCP端,端口号都是502,PC端上位机软件作为TcpClient去连接多台PLC。PC端读写PLC寄存器。2、PC端在有的PLC断电、断网的

panjinliang066333的博客 2万+

mysql(一)加快ALTER TABLE操作的速度

很多人对MySQL的问题知道不多,有鉴于此,因为java开发过程中,与数据库的交互还是很多的,本人决定写一系列Mysql相关文章,可能有很多观点都是别人的,本在在此借用,文章全声明为转载。 MySql的ALTER TABLE 操作的性能对大表来说是个大问题。MySQL执行大部分修改表结构操作的方法是用新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表。这样操作肯呢个需要花费

lz710117239的博客 8911

美团mtgsig 3.1.0算法还原:从加密入口到d1生成的完整链路拆解

本文详细拆解了美团mtgsig 3.1.0签名算法的完整逆向过程。通过定位加密入口函数eH,理清a6、a5、a8到d1的生成依赖链,并运用插桩技术,在JSVMP混淆环境下逐步还原了核心参数的生成逻辑,为逆向工程实践提供了清晰的纯算还原方法论。

oo7890的博客 779

uniapp(全端兼容) - 最新详细实现预览pdf文件功能,uniapp安卓苹果app、H5网页、微信小程序、nvue等端打开本地或在线PDF文档进行预览,uniapp预览pdf教程(详细示例代码)

uni-app,pdf,打开预览PDF,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,uniapp预览PDF,App端 实现pdf文件预览,在app端怎么预览pdf,网页h5怎么预览pdf,pdf下载、上传和预览,H5预览pdf文件,小程序预览pdf,nvue平台怎么打开预览pdf呢,除了uni.opendocument还有什么方法打开,预览pdf的插件,pdf预览组件,uni-app实现PDF预览功能,app查看下载pdf文件,如何做pd

✅ 精选推荐文章 1万+

测试服mysql突然崩溃

一.背景 又是一个阳光明媚的周五,天气很好,本来平坦的一天突然出现一阵聒噪。测试和开发纷纷开始抱怨测试服挂了,连不上了,于是我们开始看问题在哪,看服务日志发现,是mysql服务连接超时。 二.排查 于是上mysql所在的服务器查看原因,然后发现mysql挂掉了,输入重启命令后提示以下信息 [root@mysql etc]# service mysqld restart Redirecting to /bin/systemctl restart mysqld.service Job for mysqld.se

Mr1ght的博客 1543

【AI智能体】Claude Code 核心记忆文件 CLAUDE.md实战操作详解

Claude Code 核心记忆文件 CLAUDE.md实战操作详解

congge 5459

Java面试进阶:从八股文到实战场景的深度准备策略

在Java技术领域,掌握核心概念与底层原理是构建扎实技术能力的基础。从Java集合框架、并发编程到JVM内存模型与垃圾回收机制,理解其设计思想与实现原理,是高效解决实际工程问题的前提。这些技术通过优化数据存储、提升程序并发性能、保障系统稳定性,在构建高并发、高可用的分布式系统中发挥着关键价值。尤其在当前面试环境中,面试官更关注候选人将理论知识应用于解决实际问题的能力,例如如何利用ConcurrentHashMap实现线程安全缓存,或通过JVM调优排查线上性能问题。本文聚焦于如何将零散的Java核心知识点,如

weixin_34037173的博客 341

OpenMM | PDBFixer 用于蛋白质预处理

PDBFixer 用于蛋白质预处理

DrugOne 3007

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java面试备战:从死记硬背到构建知识网络与场景化实战

在Java技术领域,扎实的基础知识体系是构建复杂系统的根基。理解JVM内存模型、垃圾回收机制等底层原理,是优化应用性能、排查线上问题的关键。并发编程中的线程池、锁机制等核心概念,直接关系到高并发场景下的系统稳定性与效率。这些技术原理的价值在于,它们能指导开发者设计出更健壮、高性能的分布式系统,例如应对秒杀等高并发场景。本文聚焦于如何将这些基础与并发知识融会贯通,形成有效的知识网络,并应用于真实的面试场景题解答中,帮助求职者摆脱单纯的八股文背诵,提升系统性解决问题的能力。

weixin_34008784的博客 422

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java秋招突击:高频考点与实战策略精讲

在Java后端开发领域,掌握核心原理是构建高性能、高可用系统的基石。理解JVM内存模型、垃圾回收机制、并发编程模型以及数据库事务与索引原理,是每一位开发者必须跨越的技术门槛。这些底层知识不仅决定了代码的执行效率,更直接关系到系统的稳定性和扩展性。从技术价值来看,深入理解Java并发中的AQS同步器框架和synchronized锁升级机制,能够帮助开发者编写出更安全、高效的多线程程序;而精通MySQL的B+树索引结构与事务隔离级别,则是进行数据库性能优化和保证数据一致性的关键。在实际应用场景中,无论是应对高并

weixin_34396103的博客 386

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java最高频八股文速通

final 类:String 类被声明为 final,这意味着它不能被继承,从而防止了通过继承改变其行为。final 字段:String 类中的 value 字段是 final 的,这保证了 String 对象在创建后其内部字符数组不会被改变。没有提供修改方法:String 类没有提供任何可以修改其内容的方法。所有对 String 的操作(如拼接、替换等)都会生成一个新的String 对象。

qq_43751506的博客 6400

147.【2024Java八股-全网最全-10w字】

eg: 学校、院校、经验、年龄、跳槽频率…基本包括16种常见使用场景: 、数据共享分布式、、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.详细讲解16种使用场景: https://blog.youkuaiyun.com/zxl646801924/article/details/123202381用户使用id进行查询文章的时候,首先会查询redis数据库,如果在redis中命中数据,那么redis就向用户返回查询的结果

qq_69683957的博客 1736

面试与压测问题汇总

回答框架(STAR 法则):背景 (S): XX公司业务线众多(金融租赁、保险、营销、物流、发票等),每个迭代需要大量回归测试,手工执行效率低、覆盖不全。任务 (T): 负责设计和开发公司级的 API 自动化测试平台,覆盖多条业务线的接口回归、流程编排和版本对比。基于 Spring Boot + TestNG + llrunner 搭建分层架构设计 Component → Flow → Factory → TestCase 四层架构。

weixin_46921460的博客 555

MySQL中MyISAM和InnoDB对B-Tree索引不同的实现方式

索引是 MySQL数据库很重要的一部分,它对数据表查询性能的好坏起着决定性的作用,对大表尤甚。 作为索引中最为常见的一种类型,B-Tree索引大都采用的是 B+Tree数据结构来存储数据(NDB集群存储引擎内部实际上采用 T-Tree结构存储这种索引)。B-Tree通常也意味着所有的值都是按顺序存储的。 大多数的 MySQL引擎都支持这种索引,而不同的存储引擎以不同的方式来实现 B-Tree索引。

yyyiue的博客 6855

错误分析及解决办法---MySQL server has gone away

应用程序(比如PHP)长时间的执行批量的MYSQL语句。执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理。都容易引起MySQL server has gone away。今天遇到类似的情景,MySQL只是冷冷的说:MySQL server has gone away。大概浏览了一下,主要可能是因为以下几种原因:一种可能是发送的SQ...

weixin_30587025的博客 1284
上一篇: An example about consistent read and next-key lock in InnoDB
下一篇: A new parameter to control updating statistics strategy
iteye_621
博客等级 码龄8年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值