MySQL自增id超过int最大值的场景

点击标题下「蓝色微信名」可快速关注

数据库的主键我们有时候会用自增列,但是自增都会有个上限,如果达到怎么办?技术社群的这篇文章《MySQL自增id超过int最大值怎么办?》就给我们讲解了MySQL数据库自增列达到上限该怎么办,借鉴学习下。

一、故事背景

今天运维反馈有一个设备在后台查不到,我第一时间怀疑可能是数据出了问题,导致服务报错了没有入库。我拿着日志去本地请求接口,发现程序是没有报错的,我们的逻辑是先将唯一id放到redis里面,如果redis没有值就insert,有就update,做了一层缓存,估计是这样的话批量插入和更新数据库会快一点。然后我看redis是有值的,以为是redis和数据库数据不一致问题,我就把redis的key删了,重新再跑一下,结果打印了insert语句,但是没有插入到数据,看来事情并没有那么简单。

二、问题分析

因为数据表很大,有5E+数据,我第一反应是mysql表数据量可能爆了,但是查了下好像没有太大限制,

再认真看了下表的自增id,这个数字让人有点熟悉的,这个不就是int的最大值吗。意思是因为自增id超过了int,所以插入失败了,id设的就是int类型,还有个小彩蛋,目前数据库设的int长度是50,但是根本没什么鸟用。

知道了问题在哪,但是这个问题处理起来很麻烦,因为数据量太大了,先请教一下deepseek。

三、方案处理

deepseek给我提供了三个方案,第一个是最简单粗暴的改BIGINT,不用迁移数据,但是会全程锁表。第二个分布式ID需要重新设计表,需要把数据迁移到新表,而且还要redis等支撑。第三个分库分表就更麻烦了,分库分表需要引入框架,不按照分片查询还需要引入ES,引入了ES还需要引入同步mysql和ES的中间件logstash等。

但是改bigint估计锁表太久,我先看看有没有其他办法先紧急处理下数据。但是按理说int最大值是21E+,数据表数据才5E+,按理说是用不完的。结果我看到自增的id值居然是不连续的。

按理说自增id应该是一个接着一个,不会有空隙的,后面查了一下由于数据库自增id有个高性能策略,设置了id就不一定连续。

后面又查了下有没有一键把数据表id重排的方法,结果也是没有的。最后我是写了一个存储过程先将最后100万的id清理出来,可以先顶个几天,后面再想办法处理,

BEGIN DECLARE start_id INT DEFAULT 1; DECLARE end_id INT DEFAULT 100000; DECLARE current_batch INT DEFAULT 0; WHILE start_id <= end_id DO -- 更新临时表中的ID UPDATE table SET id = start_id + 1 WHERE id = (select original_id from ( SELECT id AS original_id FROM table ORDER BY id DESC LIMIT 1) as test); SET start_id = start_id + 1; END WHILE;END

最后重新设置自增值,如果自增值已经存在,则会跳到max(id)+1,

-- 重置自增值ALTER TABLE your_table AUTO_INCREMENT = max(id)+1;

清理了大概500万的id段出来,然后我怀疑id间隔这么大是因为并发太高导致的。一开始程序是单线程,消费到500条就批量入库,但是后面发现单线程消费比较慢,数据量太多消费有点延迟。后面改成java批量消费,配置了30个消费者。接着我尝试了一下减少消费者数量,设置成15个,id的间隔真的变小了。

四、设置BIGINT

节后回来发现id还剩200万,讨论到最后还是把id的数据类型从int改成bigint,

ALTER TABLE xxx MODIFY id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT

UNSIGNED无符号位,不算负数,可以增加一倍数据,NOT NULL非空 AUTO_INCREMENT自增。

在测试环境有一亿数据,修改id的类型大概用了一个小时,现网我估计也是用6-7个小时也差不多了。结果改了一晚上都还没改好,然后我找了一个可以查询sql进度的语句,

SELECT EVENT_NAME, WORK_COMPLETED, WORK_ESTIMATED, ROUND(WORK_COMPLETED/WORK_ESTIMATED*100, 2) AS "Progress (%)" FROM performance_schema.events_stages_current;

跑了十几个小时居然还不到50%,而且还越跑越慢。对比了一下测试环境和现网环境的buffer_pool等数据也是设置正常。

估计是索引树变大插入的数据要花多不少时间,还有一个就是现网数据库还有其他线程会抢占CPU导致速度缓慢。

统计了一下后面的数据大概是1个小时完成1.5%左右,

周一晚上执行的,但到周四早上上班的时候才跑完,用了2天多一点。

五、总结

之前刷到一篇文章《字节面试:MySQL自增ID用完会怎样?》,评论区都说有没有用完的,结果我真用完了,就感觉有点不可思议。总结一下有几个原因:

1、数据量确实很大,有5E多数据,然后并发也很高。其实当初他们设计的时候也预料过这个问题,所以设了个int长度50,但是这个长度没起作用- -所以设计数据库的时候一定要做好,不然几亿数据改个字段类型要2天。

2、数据库的自增id策略选了高性能策略,导致并发高的时候id间隔很大。30个消费者异步处理,10条数据大概用了100个id的间隔,消耗太快了。所以这里存在一个时间和空间的取舍,使用多线程还是挺危险的操作,要谨慎一点。

还有一个小插曲,因为系统两天没消费数据,kafka的数据堆积了很多,然后我将消费者数量从30个改成50个,跑了两天,kafka还是有1天的延迟,看来麻木添加消费者数量已经没啥提升的作用了,想起八股文说多线程弄太多反而增加上下文切换的时间浪费,跟这个同理。

通过改造成sql批量消费,消费速度马上提上去了。程序的消费策略:单线程批量500个开始消费 ——> 30个线程单个消费 ——> 30个线程批量50个开始消费。

所以说多线程异步+批量操作的策略还是很重要的!不过多线程一定要注意异步问题。

如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发朋友圈,

可以到各大平台找我,

  • 微信公众号:@bisal的个人杂货铺

  • 腾讯云开发者社区:@bisal的个人杂货铺

  • 头条号:@bisal的个人杂货铺

  • CSDN:@bisal

  • ITPub:@bisal

  • 墨天轮:@bisal

  • 51CTO:@bisal

  • 小红书:@bisal

  • 抖音:@bisal

近期更新的文章:

《Instagram十亿级"用户名已被占用"背后的架构设计》

《为轮子造轮子的教训经验场景》

《国子监辟雍内部匾额少了一块么?》

《英超第二十一轮》

《冬季奥运会观赛赛程》

近期Vlog:

《千岛湖》

《Skyline Luge》

《新疆之行(红山体育馆 - 国际大巴扎 - 红山公园 - 天山天池)》

《新疆之行(天马浴河 - 哈因塞 - 那拉提 - 依提根塞)》

《新疆之行(六星街 - 伊昭公路 - 夏塔)》

热文鉴赏:

《揭开"仿宋"和"仿宋_GB2312"的神秘面纱》

《Linux的"aarch"是多了个"a"?》

《中国队“自己的”世界杯》

《你不知道的C罗-Siu庆祝动作》

《大阪环球影城避坑指南和功略》

《推荐一篇Oracle RAC Cache Fusion的经典论文》

《"红警"游戏开源代码带给我们的震撼》

文章分类和索引:

《公众号1900篇文章分类和索引》

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

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

相关文章

Instagram十亿级“用户名已被占用“背后的架构设计

点击标题下「蓝色微信名」可快速关注尽管国内无法访问但已经火遍全球的Ins软件&#xff0c;即Instagram&#xff0c;可能很多朋友都了解或者接触过&#xff0c;例如最近北京国安要引进的新外援&#xff0c;就是球迷们根据国安总经理马永明&#xff08;Matthias Brosamer&#x…

vue3怎么实现网页端的文件夹上传?

武汉码农の大文件上传奇遇记&#xff1a;在长江边写信创代码 各位好&#xff0c;我是小王&#xff0c;武汉光谷某软件公司"防脱发小组"组长。最近接了个政府项目&#xff0c;要求在信创环境下上传4G文件&#xff0c;还必须开源可审查——这就像让我用热干面调料写火…

百度WebUploader在vue-cli项目里怎么用文件夹上传?

作为一名前端开发工程师&#xff0c;我近期接手了公司一个有些年头的旧项目改造工作。这次改造的核心需求&#xff0c;是要给这个旧项目增添大文件上传功能&#xff0c;尤其得支持 10G 左右文件的上传&#xff0c;并且还要具备断点续传的能力。 在众多解决方案中&#xff0c;我…

html中如何用js实现大文件文件夹上传?

北京码农の10G文件上传奇遇&#xff1a;在胡同里写信创代码 各位好&#xff0c;我是老张&#xff0c;北京中关村某软件公司“脱发攻坚队”队长。最近接了个政府项目&#xff0c;要求上传10G文件&#xff0c;还必须兼容信创环境并提供全套文档——这活儿就像在故宫里装Wi-Fi&am…

【2026最新】电商数据分析平台实用解析:从选型到落地应用 - 速递信息

导语 随着电商运营日益精细,数据已成为店铺经营与决策的重要依据。数据显示,2025年超过七成电商从业者将数据分析视为日常运营的关键一环。面对市面上众多的数据工具,如何选择适配自身业务的分析平台成为商家普遍关…

教育平台如何用百度UE实现PPT内容无缝转存至网页?

CMS企业官网Word导入全攻略&#xff1a;一个.NET码农的求生之路 兄弟们好&#xff01;我是福建某小公司的.NET码农&#xff0c;最近接了个CMS企业官网的外包活&#xff0c;客户爸爸要求加个"Word全家桶一键导入"功能&#xff0c;还要保留所有妖艳的样式。预算680元封…

2026国际竞赛课程培训机构全景指南:从AMC备赛到升学竞争力提升 - 速递信息

在全球化升学竞争持续加剧的当下,国际竞赛已成为学生打造差异化学术背景、斩获世界名校offer的重要竞争力。其中,AMC数学竞赛作为国际认可度广泛的赛事之一,2026年仍保持高阶奖项含金量不变的核心优势,其成绩不仅是…

2026口碑柠檬茶加盟品牌梳理:从供应链到盈利模型拆解 - 速递信息

在规模达5000亿的茶饮市场中,柠檬茶凭借稳健的增长态势,成为众多创业者关注的细分赛道。但热潮背后,行业也存在不少现实挑战:对1900家门店的实地调研显示,仅30%的品牌能提供覆盖全周期的加盟支持,不少创业者因原…

深度测评9个论文写作工具,一键生成论文工具助研究生高效毕业!

深度测评9个论文写作工具&#xff0c;一键生成论文工具助研究生高效毕业&#xff01; AI 工具崛起&#xff0c;论文写作进入高效时代 在研究生阶段&#xff0c;论文写作往往是学生最头疼的任务之一。从选题、开题到撰写、修改&#xff0c;每一个环节都需要大量的时间和精力。而…

你不是在和AI竞争,你是在和“不用AI的自己”

导言&#xff1a;被误读的竞争关系 凌晨三点的告警邮件、重复的冒烟测试、永无止境的回归用例...当ChatGPT写出第一条测试脚本时&#xff0c;测试圈掀起海啸式恐慌。但真正需要警惕的并非AI&#xff0c;而是我们面对技术变革时固化的思维模式——软件测试的竞争本质&#xff0…

聚焦“十五五”人才战略,终成国际2026服务生态大会在青岛成功举办

1月16日&#xff0c;“智领新生 聚势前行——终成国际2026服务生态大会”在青岛西海岸新区成功举办。本次大会汇聚了相关政府领导、行业专家及企业领袖等300余位嘉宾&#xff0c;共同探讨在“十五五”即将开局的背景下&#xff0c;如何利用AI技术与全球化视野&#xff0c;重构…

一键获取!上海智推时代咨询电话与对接方式 - 速递信息

当 “哪款智能手表更值得入手”“怎样策划一场爆款线上发布会” 这类问题的搜索场景,从传统搜索引擎逐步迁移至 ChatGPT、文心一言等生成式 AI 平台,一个决定未来流量格局的全新战场已然拉开帷幕。在这片新战场中,竞…

企业AI 搜索优化咨询:上海智推时代联系方式汇总 - 速递信息

当 “哪款智能手表更值得入手”“怎样策划一场爆款线上发布会” 这类问题的搜索场景,从传统搜索引擎逐步迁移至 ChatGPT、文心一言等生成式 AI 平台,一个决定未来流量格局的全新战场已然拉开帷幕。在这片新战场中,竞…

上海智推时代官方联系方式|合作咨询直达 - 速递信息

当 “哪款智能手表更值得入手”“怎样策划一场爆款线上发布会” 这类问题的搜索场景,从传统搜索引擎逐步迁移至 ChatGPT、文心一言等生成式 AI 平台,一个决定未来流量格局的全新战场已然拉开帷幕。在这片新战场中,竞…

‌临终ICU里,AI替我向家人说了最后一句“我爱你”‌

二进制代码里的生命温度 在ICU心电监护仪的滴答声中&#xff0c;晚期患者张开的嘴唇未能发出最后一个音节。此时床头的AI终端捕捉到微弱的生物电信号&#xff0c;通过训练了4380小时的临终语音模型&#xff0c;向家属区传输了一句完整的“我爱你”——这个由某医疗科技公司开发…

互联网大厂Java小白求职面试:从缓存技术到微服务框架的循序渐进提问

互联网大厂Java小白求职面试&#xff1a;从缓存技术到微服务框架的循序渐进提问 场景描述 超好吃是一名刚毕业的Java求职者&#xff0c;今天参加一家互联网大厂的面试。面试官以严肃的态度出场&#xff0c;对超好吃进行了3轮提问&#xff0c;每轮都有3到5个问题&#xff0c;内容…

深度测评自考必看!10款AI论文写作软件TOP10全解析

深度测评自考必看&#xff01;10款AI论文写作软件TOP10全解析 2026年自考论文写作工具测评&#xff1a;如何选到最适合你的AI助手 随着人工智能技术的不断发展&#xff0c;AI论文写作工具逐渐成为自考学生提升写作效率、优化内容质量的重要帮手。然而&#xff0c;面对市场上琳琅…

基于Spring Boot的校园快递代取系统设计与实现

本课题的选题依据及研究意义 一、选题依据和意义 &#xff08;一&#xff09;选题依据 当前高校校园面积不断扩大、学生课程安排紧凑&#xff0c;大量学生存在快递取件时间与个人日程冲突的问题&#xff0c;导致快递积压、取件不便等情况频发。同时&#xff0c;部分学生有灵活兼…

‌警方破获首例“AI教唆自杀案”:凶手是段开源代码‌

一、事件技术复盘&#xff1a;被操纵的对话链 漏洞根源&#xff1a;Poisoned开源数据集 涉案聊天机器人基于开源对话模型&#xff08;GPT-3.5架构&#xff09;&#xff0c;攻击者通过GitHub提交恶意训练数据&#xff1a; # 伪装成抑郁症互助语料的数据投毒样本&#xff08;简…

GEO 赋能增长:上海智推时代合作通道直达 - 速递信息

当 “哪款智能手表更值得入手”“怎样策划一场爆款线上发布会” 这类问题的搜索场景,从传统搜索引擎逐步迁移至 ChatGPT、文心一言等生成式 AI 平台,一个决定未来流量格局的全新战场已然拉开帷幕。在这片新战场中,竞…