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

优化软件系统,解决死锁问题,提升稳定性与性能 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多万流量)

晨希中医体质辨识软件

http://www.lryc.cn/news/171655.html

相关文章:

  • MyBatisPlus 底层用 json 存储,Java 仍然使用 对象操作
  • 发送验证码倒计时 防刷新重置!!!
  • OpenCV项目开发实战--forEach的并行像素访问与其它方法的性能比较
  • cv::Mat 的常见操作方法
  • JVM——11.JVM小结
  • 月木学途开发 2.前台用户模块
  • buuctf-ciscn_s_3
  • 3D模型格式转换工具HOOPS Exchange协助Epic Games实现CAD数据轻松导入虚幻引擎
  • Linux- inode vnode
  • 不来看看?通过Python实现贪吃蛇小游戏
  • C# linq初探 使用linq查询数组中元素
  • 使用线程池进行任务处理
  • ES6之Map和Set有什么不同?
  • Java中的集合
  • 9.4.2servlet基础2
  • 嵌入式学习 - 用电控制电
  • QCA组态如何科学命名?
  • 外贸行业中常用的邮箱推荐
  • 高性能实践
  • 说说hashCode() 和 equals() 之间的关系?
  • 算法通关村-----图的基本算法
  • 基于随机森林+小型智能健康推荐助手(心脏病+慢性肾病健康预测+药物推荐)——机器学习算法应用(含Python工程源码)+数据集(二)
  • stm32学习-芯片系列/选型
  • LeetCode //C - 200. Number of Islands
  • 使用Python构建强大的网络爬虫
  • 图像处理之《基于语义对象轮廓自动生成的生成隐写术》论文精读
  • Java 字节流
  • 华硕电脑怎么录屏?分享实用录制经验!
  • python学习--python的异常处理机制
  • nacos+Dubbo整合快速入门