线上数据库锁表?明天就要上线?
【摘要】 如果我在清闲的周末打开了idea编辑器,那不代表我在勤奋的学习,那肯定是该死的产品催进度了,草(一种植物)。 工作多年会觉得对待工作热情日益减退,不像未参加工作的小张同学,对工作充满了期待,期待拿第一份工资,期待职场运筹帷幄,而我现在连下班都不期待了,只期待一个平静的周末,没有人打扰我睡懒觉,窗前的小广场没有清晨长按喇叭的傻逼邻居,没有大早上用力敲打公告铁窗的傻逼孩子,当然也没有b...
隔离级别:可重复读(RR)
业务逻辑:并发下按某个索引字段先delete记录,再insert记录
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';value = 10
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无论是接入还是业务侵入成本都是最小的,最大限度的降低了改造成本,当然我是不能决定随意用新组件的,目前还需要技术组评估。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)