• 优化软件系统,解决死锁问题,提升稳定性与性能 redis排队下单


    项目背景:

    随着用户数量的不断增加,我们的速卖通小管家软件系统面临了一个日益严重的问题:在从存储区提供程序的数据读取器中进行读取时,频繁出现错误。系统报告了一个内部异常:

    异常信息如下:

    从存储区提供程序的数据读取器中进行读取时出错。有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 事务(进程 ID 80)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

    这个软件的用户量这么多,时间刻不容缓,我们迫切需要解决这个问题

     解决方案

    为了应对这一问题,我们采取了以下两个关键步骤:

     步骤1:多用户并发排队操作

    引入多用户并发排队操作: 利用Redis实现订单排队

    为了有效地应对多用户并发下单操作,我们引入了Redis作为我们的解决方案的一部分。Redis是一个高性能的缓存和消息队列系统,它能够有效地处理并发请求,特别适用于排队和处理订单。通过将订单请求排队到Redis队列中,我们能够更好地管理用户的请求,减少了对数据库的过度访问和竞争,从而降低了死锁的风险。这一步骤极大地改善了系统的稳定性和性能。

    redis排队后的效果图:

    步骤2:监视SQL Server并解决死锁问题

    监视SQL Server并解决死锁问题:利用SQL Server Profiler

    为了深入解决死锁问题,我们使用了SQL Server Profiler来监视数据库的运行情况。通过监视SQL查询和事务,我们能够更准确地识别引起死锁的具体地方,并采取相应的改进措施。这可能包括优化查询、改善索引设计、调整事务隔离级别等。

    测试发现:

    最长耗时的sql是:

    string sql = string.Format("delete from Product_AreaPrice_Head where Product_Sku_ID = '{0}'", sku.ID);

    通过不断地分析和优化数据库操作,我们能够显著减少死锁的发生,提高系统的可用性和性能。

    综上所述,通过采取多用户并发排队操作和监视SQL Server以解决死锁问题,我们成功地改善了系统的稳定性和性能。这些关键步骤使我们能够更好地满足用户需求,提供更可靠的服务,确保系统能够顺利运行,减少了不便和中断。我们将继续致力于优化系统,以确保用户体验的不断提升。

    另外一个数据并发项目案例(平均一周的访问量有20多万流量)

    晨希中医体质辨识软件

  • 相关阅读:
    软件测试肖sir__python之ui自动化测试框架unittest
    【白话科普】从“熊猫烧香”聊聊计算机病毒
    继承(二) —— 基类和派生类对象的赋值转换
    科技云报道:拉响警报!2023年三大网络安全威胁不容忽视
    Java 24 Design Pattern 之 工厂模式
    ElasticSearch - ES集成ik分词器
    Unreal Engine 学习笔记 (1)—— 日夜交替
    解决SpringBoot3整合Druid的兼容性问题
    Sandboxie+Buster Sandbox Analyzer打造个人沙箱
    系列一、介绍
  • 原文地址:https://blog.csdn.net/dmz1981/article/details/133065723