iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python编程项目中线上问题排查与解决
  • 630
分享到

python编程项目中线上问题排查与解决

2024-04-02 19:04:59 630人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录问题描述问题分析问题解决总结文 | 極光 来源:python 技术「ID: Pythonall」 最近开发中遇到个小问题,因为业务上的设计存在问题,导致数据库表总是被锁

文 | 極光

来源:python 技术「ID: Pythonall」

最近开发中遇到个小问题,因为业务上的设计存在问题,导致数据库表总是被,而且是不定期的锁定,导致服务器运行异常,最后经过排查原因是多线程同时更新同一表中同一条记录导致问题。今天就来跟大家说说该如何避免这种问题。

问题描述

最近因为公司业务需要,产品设计了一套业务系统,据说会有很多内部和外部人员使用,拿到系统说明我们研发部门拼命加班赶时间,经历了两个月的后终于把系统上线运行。

刚开始用的人少,并没有出现什么问题,感觉系统还是很稳定,随着后来用的人越来越多,系统就开始出现一些莫名其妙的问题,其中就有某些业务信息在更新的时候总是报错,查日志就发现是表记录被锁定导致更新失败。

找到错误问题后我们就开始一遍遍的翻日志,各种分析查找到底是什么原因导致了表记录被锁。最后发现这个表的状态字段,存在多个接口方法同时更新的情况,而且经常是同时操作的。也就是数据库中存在多个会话同时操作同一表中同一行记录,从而导致表记录被锁。

问题分析

那定位到问题,要如何解决呢?这里我们先了解两个名词:

悲观锁(Pessimistic Lock):简单解释就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在修改数据的时候都会上锁,这样别人想修改这个数据就会等待一直到它能拿到锁。

乐观锁(Optimistic Lock):这个正好相反,就是很乐观,每次去修改数据的时候都认为别人不会修改,所以不会上锁,但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。乐观锁适用于读多写少的应用场景,这样可以提高吞吐量。

通过这两种方式就能解决问题,不过选哪种比较好,我们来简单分析下:

  • 悲观锁 通过 “select …… for update” 实现,就是在更新表前先对这条记录进行上锁,然后下面再执行更新语句。不过这种方式有些太重,毕竟加锁还是需要很大时间成本的,不符合业务的需要,直接pass掉。
  • 乐观锁 相对就要轻量很多,它的主要实现就是通过在表中多增加一个记录版本的字段,比如 version 。然后每次查询记录要更新时,where 后面都要加上 version=? ,这样当你查询拿到 version 后,如果有其他会话更新了这个字段,那这个 version 就会和你现在拿的不一样,从而会使你这次的更新失效,需要重新获取最新 version 后再次执行 update 语句。

问题解决

好了,经过以上分析,已经有了比较清晰的解决思路,剩下就是码代码了:


    
    public boolean update(int id){
        int cnt = 0;
        while (cnt == 0) {
            USER user = query("SELECT * FROM table_user WHERE id = #{id}", id);
            cnt = update("UPDATE table_user SET version=version + 1, status = 2 WHERE id=#{id} AND version=#{version}", id, user.version());
            if(cnt > 0){
               // 返回更新成功
                return true;
            }
        }
        return false;
    }
 

总结

这里只是基于 Mysql 自身特性解决这个问题,当然还有很多其他的方式可以解决,例如通过 Redis 或者 MQ 消息队列等,如果大家感兴趣我们可以以后再介绍。

更多关于python线上问题排查与解决的资料请关注编程网其它相关文章!

--结束END--

本文标题: python编程项目中线上问题排查与解决

本文链接: https://www.lsjlt.com/news/156053.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python编程项目中线上问题排查与解决
    目录问题描述问题分析问题解决总结文 | 極光 来源:Python 技术「ID: pythonall」 最近开发中遇到个小问题,因为业务上的设计存在问题,导致数据库表总是被锁...
    99+
    2024-04-02
  • 怎么排查与解决python编程项目中线上问题
    这篇文章主要讲解了“怎么排查与解决python编程项目中线上问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么排查与解决python编程项目中线上问题”吧!问题描述最近因为公司业务需要,...
    99+
    2023-06-25
  • 如何解决j2Cache线上异常排查问题
    这篇文章主要为大家展示了“如何解决j2Cache线上异常排查问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决j2Cache线上异常排查问题”这篇文章吧。问题背景开发反馈,线上有个服务在...
    99+
    2023-06-29
  • j2Cache线上异常排查问题解决记录分析
    目录问题背景问题分析假设问题小心求证问题重现问题解决问题后记-下面才是真正的原因重新假设最终解决问题背景 开发反馈,线上有个服务在运行一段时间后,就会抛异常导致redis缓存不可用。...
    99+
    2024-04-02
  • Java项目中的线程安全问题如何解决
    这篇文章给大家介绍Java项目中的线程安全问题如何解决,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。解决方案如下:public class Demo_5 { public&nbs...
    99+
    2023-05-31
    java 线程安全 ava
  • SimpleDateFormat线程安全问题排查详解
    目录一. 问题现象二. 原因排查三. 原因分析四. 解决方案一. 问题现象 运营部门反馈使用小程序配置的拉新现金红包活动二维码,在扫码后跳转至404页面。 二. 原因排查 首先,检查...
    99+
    2022-11-13
    SimpleDateFormat线程安全排查 SimpleDateFormat线程安全
  • 如何解决vue项目部署上线遇到的问题
    这篇文章将为大家详细讲解有关如何解决vue项目部署上线遇到的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。流程     1.服...
    99+
    2024-04-02
  • Redis中的BigKey问题排查与解决思路详解
    目录摘要Big Key问题介绍Big Key问题排查使用BIGKEYS命令Debug Objectmemory usageRedis-rdb-toolsBig Key问题解决思路分割大key对象压缩直接删除总结摘要 Re...
    99+
    2023-03-31
    Redis BigKey问题 Redis BigKey
  • Java内存泄漏问题排查与解决
    前言 Java 最牛逼的一个特性就是垃圾回收机制,不用像 C++ 需要手动管理内存,所以作为 Java 程序员很幸福,只管 New New New 即可,反正 Java 会自动回收过...
    99+
    2024-04-02
  • 多线程编程中遇到的Python问题及解决方法
    多线程编程中遇到的Python问题及解决方法Python是一种广泛使用的编程语言,它有许多优点,其中之一就是可以通过多线程来提高程序的执行效率。然而,在多线程编程中,也会遇到一些常见的问题。本文将讨论一些常见的多线程编程问题,并提供相应的解...
    99+
    2023-10-22
    死锁(Deadlock):多线程编程中
  • 多线程编程中遇到的Python问题及解决方案
    多线程编程中遇到的Python问题及解决方案在进行多线程编程时,我们常常会遇到一些与线程同步、资源竞争和死锁等相关的问题。本文将介绍一些常见的Python多线程编程问题,并提供相应的解决方案和代码示例。线程同步问题多个线程可能同时访问共享资...
    99+
    2023-10-22
    同步问题:多线程编程中
  • 怎么解决spring-boot项目启动迟缓异常排查的问题
    这篇文章将为大家详细讲解有关怎么解决spring-boot项目启动迟缓异常排查的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题背景一个spring boot开发的项目,spring boot版本是...
    99+
    2023-06-29
  • 解析Arthas协助排查线上skywalking不可用问题
    目录前言使用到的工具arthas先定位问题一问题一:问题解决:功能说明参数说明定位问题二问题二:问题解决:结语前言 首先描述下问题的背景,博主有个习惯,每天上下班的时候看下skywa...
    99+
    2024-04-02
  • Java线上问题排查神器Arthas实战原理解析
    概述 背景 是不是在实际开发工作当中经常碰到自己写的代码在开发、测试环境行云流水稳得一笔,可一到线上就经常不是缺这个就是少那个反正就是一顿报错抽风似的,线上调试代码又很麻烦,让人头疼...
    99+
    2024-04-02
  • Redis中的BigKey问题排查与解决方法是什么
    这篇文章主要介绍“Redis中的BigKey问题排查与解决方法是什么”,在日常操作中,相信很多人在Redis中的BigKey问题排查与解决方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis中的...
    99+
    2023-07-05
  • Linux SysOps SSH登录问题排查与解决方法
    在解决Linux SysOps SSH登录问题时,可以采取以下排查和解决方法:1. 确认SSH服务是否正常运行:使用命令`sudo ...
    99+
    2023-10-09
    Linux
  • mysql自增id超大问题的排查与解决
    引言 小A正在balabala写代码呢,DBA小B突然发来了一条消息,“快看看你的用户特定信息表T,里面的主键,也就是自增id,都到16亿了,这才多久,在这样下去过不了多久主键就要超出范围了,插入就会失败...
    99+
    2024-04-02
  • Discuz后台无法登录问题排查与解决
    Discuz后台无法登录问题排查与解决 在使用Discuz论坛管理系统的过程中,有时候会遇到后台无法登录的情况,这可能会给论坛管理员带来很大的困扰。本文将介绍一些可能导致Discuz后...
    99+
    2024-03-10
    排查解决 后台登录 discuz 作用域
  • PHP登录跳转问题排查与解决技巧
    PHP登录跳转问题排查与解决技巧 简介:在Web开发中,实现用户登录功能是非常常见的操作。然而,有时候用户登录后却无法正确跳转到指定页面,这可能是因为存在一些常见的问题影响了跳转的实现...
    99+
    2024-04-02
  • 解决.NetCore项目发布在IIS上访问404的问题
    对策: 1.进入线程池画面,将当前程序的线程池设为“无托管代码” 2.修改配置文件 Web.config,加上配置 原因: 因为.NetCore 5.0 自带集成了Swagger ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作