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

多租户下的系统业务开发过程探讨俚

一、背景与问题缘起MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释因业务实际需要存储大数值关联字段。表的核心特性为Java 多线程密集读写业务请求持续高频初始执行原生ALTER TABLE语句时出现两大核心问题72 万行测试表执行耗时 203 秒线性推算 2000 万行表耗时超 1.5 小时生产执行时触发表锁、查询失效严重影响业务正常运行。本次实操的核心挑战集中在MySQL 5.6 版本未支持高版本的表结构元数据原地修改优化、大表全量数据拷贝的 IO 资源占用、高频读写场景下的资源竞争、MDL 锁等待导致的锁表风险需通过针对性方案实现无锁、无业务感知、高效的字段新增。二、核心问题根源剖析2.1 MySQL 5.6 Online DDL 的先天局限MySQL 5.6 虽引入 InnoDB Online DDL 特性解决了传统 DDL 锁表阻塞业务的问题但未支持高版本5.7/8.0的元数据原地修改优化—— 新增任何类型字段均需全表拷贝数据而拷贝过程会占用大量磁盘 IO这是大表 DDL 执行慢的核心根源。尤其对于 2000 万行表全表拷贝的 IO 开销成为性能瓶颈72 万行小表测试耗时 203 秒的核心原因也在于此。2.2 显式默认值对 DDL 的优化作用MySQL 5.6 对原生数值类型TINYINT/INT/BIGINT 简单常量默认值如 0的 DDL 操作有轻量级优化无默认值时需全表拷贝 逐行初始化字段值而显式指定默认值后会优化为全表拷贝 批量赋值默认值减少 60% 以上的 IO 开销且该优化对数值类型的适配性远优于 VARCHAR 类型BIGINT 比 VARCHAR 的执行效率更高、资源占用更低。2.3 锁表的真正元凶MDL 锁等待与长事务阻塞执行ALTER TABLE时出现的表锁、查询失效并非 DDL 本身锁表而是 MySQL 5.6 的 MDL元数据锁机制导致DDL 执行前需获取表的MDL 排他锁X 锁而普通读写操作会持有MDL 共享锁S 锁X 锁与任何锁互斥若执行 DDL 时表上存在未提交长事务、慢查询、空闲长连接持有 S 锁未释放DDL 会进入Waiting for table metadata lock状态MySQL 5.6 的 MDL 锁等待为阻塞式且无超时机制后续所有读写请求包括新的 SELECT都会排队阻塞表现为 “表被锁、查询失效”。2.4 耗时非线性的核心原因72 万行表 203 秒的测试结果无法线性推算 2000 万行表耗时因 MySQL 5.6 执行优化后的 DDL 时单位行耗时会随数据量增大而降低大表支持批量块拷贝能充分发挥磁盘连续 IO 优势减少寻道时间大表处理过程中InnoDB 缓冲池缓存命中率更高减少物理 IO 次数小表数据分散存在部分随机 IO调度和 IO 开销相对更高。三、适配 MySQL 5.6 的最优 DDL 语句针对 2000 万行表、BIGINT 类型、默认值 0 的需求结合 MySQL 5.6 的优化特性确定最优 DDL 语句显式指定所有属性以最大化触发优化ALTER TABLE 表名ADD COLUMN 字段名 BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释;语句关键属性说明BIGINT(19)原生数值类型取值范围覆盖超大整数-9223372036854775808~922337203685477580719 为显示宽度匹配有符号最大位数不限制实际取值NOT NULL DEFAULT 0核心优化点简单常量默认值触发 MySQL 5.6 批量赋值优化非空设置避免 NULL 值简化业务代码空值判断显式注释提升表结构可读性便于后续维护。若需新增 VARCHAR 类型字段需显式指定DEFAULT 触发优化ALTER TABLE 表名ADD COLUMN 字段名 VARCHAR(50) DEFAULT COMMENT 注释;四、生产环境无锁落地全流程方案4.1 执行前准备清锁源 低峰期 参数调优核心避坑4.1.1 选择极致低峰期执行建议优先选择凌晨 2:00-4:00或其他业务低峰期减少活跃事务降低 MDL 锁等待概率。4.1.2 强制清理锁源必做避免 MDL 锁等待执行 DDL 前踢掉空闲长连接、终止长事务 / 慢查询释放所有未提交的 S 锁复制代码-- 1. 临时缩短长连接超时时间踢掉空闲连接SET GLOBAL wait_timeout 10;SET GLOBAL interactive_timeout 10;SELECT SLEEP(15); -- 等待15秒让连接自动断开-- 2. 恢复长连接超时默认值8小时SET GLOBAL wait_timeout 28800;SET GLOBAL interactive_timeout 28800;-- 3. 主动终止目标表上的慢查询/长事务替换库名、表名SELECT CONCAT(KILL , id, ;)FROM INFORMATION_SCHEMA.PROCESSLISTWHERE db 数据库名AND info LIKE %表名%AND Time 30AND Command IN (Query, Sleep);-- 执行上述查询生成的KILL语句释放S锁复制代码4.1.3 临时 MySQL 参数调优提速 减少资源竞争可选动态调整参数无需重启DDL 完成后恢复核心优化 DDL 执行效率和 IO 利用率复制代码-- 调大DDL专用缓冲区提升批量拷贝效率默认1M调至16MSET GLOBAL innodb_ddl_buffer_size 16*1024*1024;-- 减少写操作IO开销避免新的长事务SET GLOBAL innodb_flush_log_at_trx_commit 2;-- 调大读写缓冲区缓解缓存竞争SET GLOBAL innodb_read_buffer_size 16*1024*1024;SET GLOBAL innodb_write_buffer_size 8*1024*1024;复制代码4.2 执行中实时监控 状态判断 资源管控4.2.1 核心状态判断确认 MDL 锁获取成功通过SHOW FULL PROCESSLIST;查看 DDL 进程状态脱离锁表风险期的核心标志风险状态State Waiting for table metadata lock未获取 MDL 锁阻塞后续所有读写正常状态State executing 或 State copying to tmp tableMDL 锁已成功获取DDL 无锁执行中二者为 MySQL 5.6 命名差异等效无锁。精准过滤 DDL 进程的查询语句避免翻找SELECT id, command, state, info, timeFROM INFORMATION_SCHEMA.PROCESSLISTWHERE info LIKE %表名%AND command ALTER TABLE;4.2.2 实时资源监控无需持续盯守1 分钟查看 1 次核心指标避免资源耗尽# 监控磁盘IO核心%util为关键指标控制在≤80%iostat -x 1# 监控MySQL的CPU/内存占用top -p pidof mysqld-- 查看InnoDB DDL执行状态确认增量日志同步正常SHOW ENGINE INNODB STATUS\G;4.2.3 读写量突增的应对方案可选若执行期间业务读写量增加IO 利用率 90%无需中断 DDL中断会导致之前的工作白费通过轻量操作缓解资源竞争-- 临时关闭自适应刷新减少后台IOSET GLOBAL innodb_adaptive_flushing OFF;-- 若业务支持临时动态限流Java业务侧开关将QPS限制在日常60%-70%4.3 执行后恢复配置 全维度验证必做4.3.1 恢复 MySQL 默认配置将临时调整的参数恢复默认保证数据库长期运行的性能和数据安全性复制代码-- 恢复DDL缓冲区SET GLOBAL innodb_ddl_buffer_size 1*1024*1024;-- 恢复日志刷盘安全级别保证宕机不丢数据核心SET GLOBAL innodb_flush_log_at_trx_commit 1;-- 恢复读写缓冲区SET GLOBAL innodb_read_buffer_size 1*1024*1024;SET GLOBAL innodb_write_buffer_size 8*1024;-- 恢复自适应刷新SET GLOBAL innodb_adaptive_flushing ON;复制代码4.3.2 DDL 执行成功的全维度验证表结构验证确认新字段属性完全符合预期DESC 表名; -- 快速查看字段属性SHOW CREATE TABLE 表名; -- 精准确认完整定义数据验证确认新字段默认值赋值正常无空值SELECT id, 新增字段名 FROM 表名LIMIT 20; -- 随机查询默认值SELECT COUNT(*) FROM 表名 WHERE 新增字段名 IS NOT NULL; -- 全量验证非空读写验证模拟业务操作确认读写正常UPDATE 表名 SET 新增字段名2 WHERE idxxx; -- 模拟更新INSERT INTO 表名 (id, 新增字段名) VALUES (xxx, 3); -- 模拟插入业务验证观察 Java 多线程业务日志确认无超时、报错、事务回滚等异常。五、关键问题与解决方案汇总核心问题 解决方案 关键要点DDL 执行慢全表拷贝 显式指定简单默认值触发 MySQL 5.6 批量赋值优化 数值类型优化效果优于 VARCHARBIGINT (19) DEFAULT 0 最优线性推算耗时偏差大 无需推算2000 万行表 SSD 磁盘 5-8 分钟机械硬盘 12-18 分钟 大表批量拷贝、缓存命中率高、连续 IO 优势降低单位行耗时MDL 锁等待导致锁表 低峰期执行 清理锁源踢长连接、终止长事务 执行前必做避免 DDL 进入 Waiting for table metadata lock 状态高频读写场景资源竞争 临时参数调优 轻量限流可选 仅引发 IO/CPU 竞争无锁表风险业务延迟轻微波动执行期间读写量突增 监控资源指标 临时降低 IO 刷盘频率 无需中断 DDLMySQL 会自动适配资源优先保障业务DDL 状态判断困难 通过 SHOW FULL PROCESSLIST 查看 State 列 executing/copying to tmp table 为正常无锁状态六、避坑指南绝对禁止的操作禁止在业务高峰期 / 中峰期执行 DDL即使做了调优高峰期 IO 已接近瓶颈会导致业务延迟大幅增加触发超时重试禁止新增 “非空无默认值” 字段MySQL 5.6 会全表逐行初始化2000 万行表耗时数小时且占用大量资源禁止 DDL 等待 MDL 锁时无动于衷MySQL 5.6 MDL 锁无超时需手动终止持锁进程否则会无限阻塞后续所有操作禁止修改 MySQL 参数后不恢复尤其是innodb_flush_log_at_trx_commit2会降低数据持久性宕机可能丢失数据禁止在 DDL 执行中手动中断进程中断会导致之前的拷贝工作白费重新执行需再次获取 MDL 锁耗时翻倍禁止忽略表结构验证DDL 进程消失后必须通过 DESC/SHOW CREATE TABLE 确认字段属性避免定义缺失。七、延伸优化长期解决方案本次实操为 MySQL 5.6 环境的临时最优解若业务侧允许升级至 MySQL 5.7/8.0是处理大表 DDL 的终极方案高版本支持表结构元数据原地修改新增数值类型 / VARCHAR 类型允许空 / 简单默认值字段时仅修改元数据无需全表拷贝2000 万行表耗时毫秒级MDL 锁机制优化支持锁超时、排队机制优化减少锁表概率整体性能提升查询优化、并发控制、锁机制均优于 5.6高频读写表的整体性能提升 30%-50%生态更完善支持 JSON 类型、窗口函数、并行复制等新特性满足业务后续发展需求。升级注意事项升级前全量备份数据库选择低峰期执行主从切换可实现业务无感知升级5.7/8.0 与 5.6 兼容性极高普通业务代码无需修改。八、总结本次 MySQL 5.6 2000 万行高频读写表新增字段的实操核心围绕 **“利用版本特性做优化、规避 MDL 锁机制坑、平衡资源竞争与业务稳定性”展开最终实现了无锁、无业务感知、高效 ** 的落地核心结论如下MySQL 5.6 虽无高版本的元数据原地修改优化但通过显式指定简单默认值可大幅降低 DDL 执行时间是 2000 万行表的最优临时方案锁表的核心根源并非 DDL 本身而是MDL 锁等待 长事务阻塞执行前清理锁源是避坑关键Online DDL 的无锁特性仅存在于MDL 锁获取成功后executing/copying to tmp table 状态此阶段脱离锁表风险后续仅存在资源竞争高频读写场景下执行 DDL无需暂停业务仅需低峰期执行 临时参数调优业务延迟仅为毫秒级→十毫秒级完全无感知赘渭炮炕

相关文章:

多租户下的系统业务开发过程探讨俚

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...

程序员副业变现:技术人的财富自由指南

CSDN程序员副业图谱技术文章大纲程序员副业现状分析当前程序员副业需求背景主流副业类型及收益模式技术能力与副业匹配度分析技术变现核心路径开源项目商业化技术博客与专栏写作在线课程与知识付费外包开发与远程协作副业技术栈工具链内容创作工具(Markdown/Notion&…...

GitHub 悄悄起飞的开源项目,想让 AI 接管你的电脑纪

我为什么会发出这个疑问呢?是因为我研究Web开发中的一个问题时,HTTP请求体在 Filter(过滤器)处被读取了之后,在 Controller(控制层)就读不到值了,使用 RequestBody 的时候。 无论是字…...

大模型之Linux服务器部署大模型敝

一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...

CLIP-GmP-ViT-L-14图文匹配测试工具效果深度评测:在互联网内容生态中的应用潜力

CLIP-GmP-ViT-L-14图文匹配测试工具效果深度评测:在互联网内容生态中的应用潜力 最近在测试一些多模态模型时,我花了不少时间研究CLIP-GmP-ViT-L-14这个工具。它本质上是一个图文匹配模型,简单说就是能判断一张图片和一段文字描述是不是“一…...

GLM-4.1V-9B-Base视觉能力深度评测:从图标识别到复杂图表理解

GLM-4.1V-9B-Base视觉能力深度评测:从图标识别到复杂图表理解 1. 开篇:当AI开始"看懂"图表 想象一下,你随手拍了一张公司季度报表的截图发给AI,它不仅能准确识别出里面的柱状图、折线图,还能告诉你哪个产品…...

Stable Yogi Leather-Dress-Collection实际案例:动漫角色皮衣换装前后对比图集

Stable Yogi Leather-Dress-Collection实际案例:动漫角色皮衣换装前后对比图集 1. 引言:当动漫角色穿上皮衣,效果有多惊艳? 想象一下,你最喜欢的动漫角色,突然换上了一身酷炫的皮衣,会是什么样…...

S2-Pro数据库课程设计辅助:从ER图到智能SQL生成全流程

S2-Pro数据库课程设计辅助:从ER图到智能SQL生成全流程 1. 课程设计的痛点与解决方案 每到学期末,计算机专业的学生们都会面临一个共同的挑战——数据库课程设计。从需求分析到ER图绘制,再到SQL语句编写,整个过程既考验专业能力又…...

Wan2.2-I2V-A14B助力前端设计:将UI静态稿转化为交互动效演示视频

Wan2.2-I2V-A14B助力前端设计:将UI静态稿转化为交互动效演示视频 1. 设计师的新痛点:静态设计稿的沟通困境 最近和几位UI设计师朋友聊天,发现他们普遍面临一个头疼的问题:每次做完设计稿,都要花大量时间向产品经理或…...

别再踩坑了!SQL Server数据类型那点事儿,看懂这篇少背三个锅型

从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...

intv_ai_mk11镜像免配置:开箱即用网页界面+独立venv环境部署解析

intv_ai_mk11镜像免配置:开箱即用网页界面独立venv环境部署解析 1. 镜像概述与核心价值 intv_ai_mk11是一个基于Llama架构的中等规模文本生成模型,专为快速部署和便捷使用而设计。这个镜像的最大特点是实现了"开箱即用"的体验,用…...

解锁地理空间智能:用TorchGeo构建遥感深度学习应用

1. 地理空间智能与深度学习的碰撞 第一次接触遥感图像分析时,我被那些五彩斑斓的多光谱图像搞得晕头转向。卫星传回的原始数据就像一堆打乱的拼图——不同时间拍摄的图片分辨率各异,光谱波段数量从几个到上百个不等,还有各种奇怪的坐标系。直…...

Python的__complex__方法支持复数运算扩展与数值类型

Python中的复数运算与__complex__方法扩展 在科学计算和工程领域,复数运算是不可或缺的工具。Python通过内置的complex类型和特殊方法__complex__,为开发者提供了灵活的复数处理能力。理解这一机制不仅能优化数值计算,还能扩展自定义类型的复…...

CSS面试题2

文章目录一、CSS 选择器及其优先级伪元素作用伪类的作用伪类与伪元素区别二、CSS 属性的继承性1. 无继承性的属性2. 有继承性的属性三、Display 属性详解1. 常用属性值及其作用2. block、inline 与 inline-block 的区别四、隐藏元素的方法对比五、 CSS3 新特性与动画1. CSS3 新…...

一键部署语音情感识别AI:Emotion2Vec+ Large镜像开箱即用教程

一键部署语音情感识别AI:Emotion2Vec Large镜像开箱即用教程 1. 快速了解Emotion2Vec Large Emotion2Vec Large是一款基于深度学习的语音情感识别系统,能够准确识别9种人类情感状态。这个预置镜像由科哥团队二次开发优化,特别适合需要快速部…...

【实战部署+模型优化】YOLOv8花卉分类检测系统:从数据集构建到Web端应用全流程解析

1. 花卉分类检测系统的工程价值 在植物园做志愿者时,我经常遇到游客指着各种花卉询问品种。这让我意识到,如果能开发一个自动识别花卉的系统,不仅能提升游客体验,还能帮助园艺工作者高效管理植物。这就是我选择用YOLOv8构建花卉分…...

Like关联优化

1、问题 最近遇到这样有趣的写法 with temp as (select wm_concat(distinct code) code from t1 ) select count(1) from (select distinct t2.id from t2,temp a where (a.code not like %||substr(t2.code,1,4)||%) ) a计划:语句为了排除不在板块的单位&#xff0…...

从零入门性能测试:理论+JMETER实操,看完就能上手铝

一、环境准备 Free Spire.Doc for Python 是免费 Python 文档处理库,无需依赖 Microsoft Word,支持 Word 文档的创建、编辑、转换等操作,其中内置的 Markdown 解析能力,能高效实现 Markdown 到 Doc/Docx 格式的转换,且…...

Xinference-v1.17.1问题解决:常见部署错误排查,确保一次成功

Xinference-v1.17.1问题解决:常见部署错误排查,确保一次成功 1. 部署前的准备工作 1.1 系统环境检查 在部署Xinference-v1.17.1之前,确保您的系统满足以下最低要求: 操作系统:Ubuntu 20.04/22.04或CentOS 7/8&…...

软件法律的版权保护与合同管理

软件法律的版权保护与合同管理:数字时代的权益与风险 在数字化浪潮下,软件已成为企业和个人的核心资产,其法律保护与管理显得尤为重要。版权保护确保开发者的智力成果不被侵犯,而合同管理则规范了软件交易、许可和使用中的权利义…...

数据团队该醒醒了:AI智能体不是你的下一个仪表盘众

7.1 初识三维模型 7.1.1 三维模型的数据载体 随着计算机图形技术的发展,我们或多或少都会见过或者听说过三维模型。笔者始终记得小时候第一次在电视上看到三维动画《变形金刚:超能勇士》的震撼感受;而现在我们已经可以在手机上玩三维游戏《王…...

Redis Cluster 故障恢复方案

Redis Cluster作为分布式缓存系统的核心组件,其高可用性设计一直是企业级应用的关键保障。当节点故障发生时,如何实现快速恢复并保证数据一致性?本文将深入剖析Redis Cluster的故障恢复机制,揭示其背后的技术原理与最佳实践。节点…...

手把手教你用HunyuanVideo-Foley:让无声视频秒变大片

手把手教你用HunyuanVideo-Foley:让无声视频秒变大片 1. 引言:为什么需要智能音效生成? 你有没有遇到过这样的尴尬场景?精心拍摄了一段视频,画面构图完美、运镜流畅,但播放时却一片寂静——没有环境音、没…...

Realistic Vision V5.1商业级作品:智能车概念设计渲染图集

Realistic Vision V5.1商业级作品:智能车概念设计渲染图集 最近在尝试用AI做设计的朋友,可能都听说过Realistic Vision这个系列。它一直以生成高度写实、细节丰富的人像而闻名。但当我拿到V5.1版本,并试着把它用在工业设计领域,特…...

Qwen3-Reranker-4B部署教程:适配A10/A100/V100的GPU算力优化配置

Qwen3-Reranker-4B部署教程:适配A10/A100/V100的GPU算力优化配置 本文手把手教你如何在A10/A100/V100等主流GPU上部署Qwen3-Reranker-4B模型,从环境准备到服务调用,提供完整的优化配置方案。 1. 认识Qwen3-Reranker-4B模型 Qwen3-Reranker-4…...

OpenClaw Ontology技能学习笔记

一、技能核心基础1. 技能定位OpenClaw的长效知识图谱技能,打造AI本地结构化记忆,解决AI对话健忘、无关联推理、上下文断层问题,让AI持久记住人物、任务、项目等信息及关联关系。2. 核心解决问题- 普通AI:对话结束即遗忘&#xff0…...

4090D显卡专属优化!Guohua Diffusion国风绘画工具部署教程

4090D显卡专属优化!Guohua Diffusion国风绘画工具部署教程 1. 工具简介与核心优势 Guohua Diffusion是一款专为国风绘画设计的本地生成工具,基于原生Guohua-Diffusion模型开发。相比通用绘画工具,它具有以下独特优势: 4090D显卡…...

Phi-4-Reasoning-Vision一键部署:适配A100/H100集群的多卡扩展部署方案

Phi-4-Reasoning-Vision一键部署:适配A100/H100集群的多卡扩展部署方案 1. 项目概述 Phi-4-Reasoning-Vision是基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具,专为专业级GPU集群环境设计。这个工具解决了大参数多模态模型在实际…...

知壹网-中医资源库

知壹网,一站式中医资源共享平台。网罗古今中医精华,涵盖典籍文献、方药技法、养生科普、经验交流等多元内容,让经典易学、让知识好用,助力人人走近中医、学好中医、用好中医。 网站链接:https://my.feishu.cn/wiki/Mp…...

FlowState Lab与MySQL联动:海量时空模拟数据的存储与检索方案

FlowState Lab与MySQL联动:海量时空模拟数据的存储与检索方案 1. 场景痛点与解决方案 想象你正在运行一个复杂的流体动力学模拟,FlowState Lab每小时产生数百万条带有时空属性的网格数据。这些数据不仅需要长期保存,还要支持灵活的时间回溯…...