线上数据库锁表?明天就要上线?

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 线上数据库锁表?明天就要上线?

如果我在清闲的周末打开了idea编辑器,那不代表我在勤奋的学习,那肯定是该死的产品催进度了,草(一种植物)。
工作多年会觉得对待工作热情日益减退,不像未参加工作的小张同学,对工作充满了期待,期待拿第一份工资,期待职场运筹帷幄,而我现在连下班都不期待了,只期待一个平静的周末,没有人打扰我睡懒觉,窗前的小广场没有清晨长按喇叭的傻逼邻居,没有大早上用力敲打公告铁窗的傻逼孩子,当然也没有bug,在欲望不被满足的时候,那真的,对钱不感兴趣,因为啥?因为当下的几千块工资难以维持我的欲望。
技术经理离职?
接到消息其实有点无奈,因为当下业务很多,大家对自己做过的业务都一句话,简单就那点东西,看下代码就行了,因为当初我也是这么对别人说的,交接的时候我觉得这么简单的东西,一看代码不就会了?但其实自己翻看一个月前的代码没有功能注释往往不会清晰,好在自己喜欢长方法名,做到尽量见名知意,但业务非一两句话说的清楚的,能够接触并且处理到业务才算是对业务的熟悉,能够从容的修理线上数据的时候才算是真正的熟悉,那么技术经理离职的问题是什么?问题就是所有的业务对外对内都要我承担,锻炼业务熟悉程度是一方面,但也重任在肩,能够明白自己对业务是否真正的熟悉,当线上bug,测试问题,开发进度,外部会议,跨部门对接,其他部门测试,都找到你一个人的时候,需要自己调整状态,对事情优先级做一个排列,且内心做到波澜不惊,因为事情总会解决的,只是紧急程度问题,那么能够承担此重任也算是全方面的锻炼,往日只关注自己手里的问题,现在全方面的处理,那就坦然面对。而就在此时我写这篇文章的时候也仍然断断续续的在处理线上问题,仍然要不停的看着数据在刷入库。
线上数据库锁表?
死锁不可怕,谁锁谁尴尬,这个休闲的周末,昨晚数据同步看到凌晨1点,今早凌晨6点被电话叫起来看全国用户的报错,原因在高峰期多省用户同时操作时,未开启异步逻辑,当同步数据插入数据库操作时需记录日志便于数据回滚,但此表历史设计是有联合key作为唯一索引约束的,导致业务上需要先删除再插入,那么高峰时期,对千万级别的数据表频繁删除在插入,此时必然会导致死锁,持有锁的事务去删除还没有释放,那么业务上不能避免吗?此接口响应阈值已经涉及好多业务了,所以除了异步,应尝试下replace,但看下是否支持联合字段的唯一索引吧,最终将线上所有高峰业务变为异步,所有省份恢复正常,故障也就不再报了。查询问题时知道是锁表以及锁等待超时,顺便延长了所等待超时时间。
MySQL版本:Percona MySQL Server 5.7.19
隔离级别:可重复读(RR)
锁等待超时时间:加至3600
业务逻辑:并发下按某个索引字段先delete记录,再insert记录
定位问题:日志下大量输出某表插入等待超时
分析问题:
1.第一时间想到是否是业务没有生成唯一索引所需要的字段导致插入错误,分析日志后排除
2.是否锁等待超时
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';
value = 10
3.是否死锁
show engine innodb status\G;
图片

                4.查询正在锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
5.给出解决方案

图片

公司规范如下

1.避免MyISAM,改用InnoDB。

2.创建合适的索引,尽量不要多个单列索引。

3.避免大事务,长事务。

4.在业务低峰期DDL。

5.执行DDL/备份前,先判断是否有长SQL,未提交事务,及其他的lock wait事件。

为了避免此类错误,可进行异步插入,异步时线程睡眠等操作,尝试使用replace into操作,但因为也同样存在死锁场景,暂时放弃。

MySQL锁定状态查看命令

链接:https://blog.csdn.net/dc_726/article/details/8576151
分布式事务刻不容缓

图片

当流程类接口产生其他服务调用时,甚至1-3个外部服务调用,此时当本服务发生异常回滚时,第三方服务已经产生操作,无法进行回滚,在不影响业务的前提下,需要等待本地所有逻辑正常结束后才能调取第三方服务,当然我指的不是非本系统,而是非本服务之外的,可能是上游也可能是下游,而分布式事务刻不容缓,而Seata无论是接入还是业务侵入成本都是最小的,最大限度的降低了改造成本,当然我是不能决定随意用新组件的,目前还需要技术组评估。


明天就要上线?
昨晚开始思考切换区域后的数据修复问题,简单理了思路,到凌晨1点开始睡觉,21号早上6点30分被叫醒,中午抽时间去了下医院,然后一直忙到晚上1点,在历史逻辑上进行修改的业务,无论是何导致都没有考虑完全,但不是我不想考虑,而是没有人告知我历史业务,我就按着当时的需求来改,当然产生了许多未知问题,但其实改起来很简单,那么这种如何避免?凌晨的我,简直陷入自我怀疑,究竟这种问题能不能避免,避免在深夜再被这种问题所缠身?答案肯定是能的,只要严谨的业务逻辑,严谨的测试,重复的场景测试这种问题是完全可以避免的。而明天要上线的话,那就可以了。

而当我安静的躺在舒服的床上时,脑子里想的不是其他的,而是今晚能不能睡一个安稳的觉。
目录
相关文章
|
6月前
|
SQL 监控 数据库
Greenplum【异常 02】使用Navicat的服务器监控工具解决Greenplum数据库锁表问题
Greenplum【异常 02】使用Navicat的服务器监控工具解决Greenplum数据库锁表问题
64 0
|
canal 中间件 关系型数据库
微服务轮子项目(30) -数据库分库分表、部署上线方式(下)
微服务轮子项目(30) -数据库分库分表、部署上线方式(下)
60 0
|
SQL 缓存 数据库
微服务轮子项目(30) -数据库分库分表、部署上线方式(上)
微服务轮子项目(30) -数据库分库分表、部署上线方式
120 0
|
NoSQL 测试技术 API
Eolink Apikit 版本更新:「数据字典」功能上线、支持 MongoDB 数据库操作...
Eolink Apikit 版本更新: 1. 搭建自定义接口协议架构,支持快速适配金融行业各类型私有协议的导入、编辑和展示。 2. 数据字典功能上线,支持以数据字典的形式管理参数枚举值。 3. 数据库连接支持 MongoDB 数据库操作。 4. 基于 Apikit 类型导入 API 数据支持增量更新。
83 0
|
SQL 安全 Cloud Native
NineData数据管理平台正式上线,开发者必备的数据库产品
11月1日,NineData 多云数据管理平台正式上线,构建全球领先的多云数据管理平台。NineData提供数据备份、复制、对比和企业级SQL开发服务,让您的数据管理更安全更高效。本次发布会演示了如何通过NineData的数据管理平台,实现1分钟配置企业级数据备份。
535 0
NineData数据管理平台正式上线,开发者必备的数据库产品
|
SQL 安全 数据库
ODC 3.4.0 现已上线,让数据库开发更简单
OceanBase 开发者工具(OceanBase Developer Center,ODC)作为 OceanBase 数据库量身打造的企业级数据库开发平台,旨在帮助企业安全、高效地使用数据库。用户可通过 ODC 创建和管理数据库中的表、视图等 10 余种数据库对象。基于 WebSQL,ODC 提供了 SQL 窗口和匿名块窗口作为数据库开发者开发和诊断 SQL 和 PL/SQL 的工作区。用户还可为指定角色分配对应资源及该资源的访问权限,企业内不同角色间的开发协作亦会变得简单可控。
284 0
ODC 3.4.0 现已上线,让数据库开发更简单
|
分布式计算 Cloud Native 关系型数据库
PingCAP 与阿里云达成合作,云数据库 TiDB 上线阿里云心选商城
2022 年 6 月 15 日,企业级开源分布式数据库厂商 PingCAP 宣布与阿里云达成合作,融合双方技术优势的云数据库 TiDB 正式上线阿里云心选商城,为中国企业用户带来新一代 HTAP 数据库的云端体验。
569 0
PingCAP 与阿里云达成合作,云数据库 TiDB 上线阿里云心选商城
|
小程序 数据库 开发者
【2020云开发+源码】30分钟创建并上线微信小程序实战项目 | 零成本 | 云数据库 | 云函数 下
5、将记录数据展示到页面上(云数据库的读取) 6、项目部署上线
358 0
【2020云开发+源码】30分钟创建并上线微信小程序实战项目 | 零成本 | 云数据库 | 云函数 下
|
缓存 小程序 JavaScript
【2020云开发+源码】30分钟创建并上线微信小程序实战项目 | 零成本 | 云数据库 | 云函数
3、登录功能(云函数的创建和调用) 4、点击按钮生成记录数据(云数据库的插入)
287 0
【2020云开发+源码】30分钟创建并上线微信小程序实战项目 | 零成本 | 云数据库 | 云函数
|
小程序 数据库 开发者