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

2023-09-20 09:45:09

项目背景:

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

异常信息如下:

从存储区提供程序的数据读取器中进行读取时出错。有关详细信息,请参阅内部异常。 ---> 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多万流量)

晨希中医体质辨识软件

更多推荐

9月16日,每日信息差

今天是2023年09月16日,以下是为您准备的15条信息差第一、天猫超市首单“茅小凌”已由菜鸟送达,首单已由菜鸟供应链完成履约,18分钟送达消费者手中第二、软银考虑对OpenAI进行投资。此外,软银还初步拟收购英国人工智能芯片制造商Graphcore第三、我国共有327家网约车平台公司取得经营许可。各地共发放网约车驾驶

行业追踪,2023-09-20

自动复盘2023-09-20凡所有相,皆是虚妄。若见诸相非相,即见如来。k线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让市场来告诉你跟踪板块总结:成交额超过100亿排名靠前,macd柱由绿转红成交量要大于均线有必要给每个行业加一个上级的归类,这样更能体现

C# Math.Round()四舍五入、四舍六入五成双

开发者为了实现小数点后2位的四舍五入,编写了如下代码,varnum=Math.Round(12.125,2);代码非常的简单,开发者实际得到的结果是12.12,这与其所预期的四舍五入结果12.13相悖。其实产生这个结果的原因是由于Math.Round默认使用的并非是四舍五入的原则,而是四舍六入五成双的原则。四舍六入五成

华为HCIA(三)

链路本地地址接口标识64bit当STP端口到了Forwarding状态后,会转发流量,也处理报文在TCP/IP模型中,会话层,表示层和应用层,都规划成了应用层路由表包含目的地址和掩码,优先级,cost,下一跳和出接口。Destination(目的地)protocol(协议)学习进制!!!在NCP协商完成后,PPP保持通

第37章_瑞萨MCU零基础入门系列教程之DAC数模转换模块

本教程基于韦东山百问网出的DShanMCU-RA6M5开发板进行编写,需要的同学可以在这里获取:https://item.taobao.com/item.htm?id=728461040949配套资料获取:https://renesas-docs.100ask.net瑞萨MCU零基础入门系列教程汇总:https://b

前端实现PDF预览:简单而高效的方法

前言PDF是一种常用的文件格式,但在网页中直接预览PDF文件可能会带来一些挑战。本文将介绍一种简单而高效的前端方法,以实现PDF文件的预览。使用iframe标签嵌入PDF文件最简单的方法是使用iframe标签来嵌入PDF文件。代码如下所示:<iframesrc="/path/to/pdf/file.pdf"width=

HDMI协议Ver2.0a(学习笔记)

1简介本规范由HDMI论坛制定2.目的和范围本文件构成了高清多媒体接口2.0版规范(HDMI规范2.0版)。本规范通过引用纳入了HDMI规范1.4b版,并定义了附加和改进的功能。对Source、Sink、中继器和电缆的合规性所需的机械、电气、行为和协议要求进行了说明。3.TBD4.TBD5.概述HDMI规范2.0版(本

正则表达式相关概念及不可见高度页面的获取

12.正则概念:匹配有规律的字符串,匹配上则正确1.正则的创建方式构造函数创建//修饰符igm//i忽视ignore//gglobal全球全局//m换行varreg=newRegExp("匹配的内容","修饰符")varstr="thisisaBox";varreg=newRegExp("box","igm");con

win10系统 C++环境 安装编译GRPC

第一步下载源码、更新、cmake编译:为了依赖的成功安装,采用gitee进行下载与更新。记得需要安装git软件。安装命令:在自己指定的目录下,鼠标右键,选择gitBashHere打开命令行gitclone-bv1.34.0https://gitee.com/mirrors/grpc-framework.gitgrpc在

java中集合的List

集合的List可以存储重复元素以下情况使用ArrayList:频繁访问列表中的某一个元素。只需要在列表末尾进行添加和删除元素操作。以下情况使用LinkedList:你需要通过循环迭代来访问列表中的某些元素。需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。一.ArrayList可以保存重复元素,底层是数组实

runtime过程中,常见jar问题解决

sourcedownloadIntellijIDEA有时候不下载不了code,使用如下命令,在“terminal”下运行mvndependency:resolve-Dclassifier=sourcesio.nettyjava.lang.NoSuchMethodError:io.netty.buffer.PooledB

热文推荐