首页 > 其他分享 >下车扫描五次优化全过程

下车扫描五次优化全过程

时间:2024-01-23 13:06:41浏览次数:27  
标签:Status DeliveryItem DeliveryItemStatusSysNo Sequence 扫描 全过程 useflag 优化 五次

下车扫描,业务部门一直反应慢,不稳定,程序不是报黄页就是运行慢,严重影响师傅使用,估计师傅心里一直"很想我们"。


第一次优化

和同事一起看了程序业务逻辑,觉得应该将整个扫描逻辑过程放到存储过程,一可以避免程序在交互中的影响,二可以提高性能。

修改完后,由于需要读取Sequence,在存储过程中需要运行下列命令
来获取:
SELECT @DeliveryItemStatusSysNo= dbo.CreateSequence('DeliveryItem_Status_Sequence',1,'192.168.2.8',6060)


第二次优化

扫描过程优化上线,没多久,周六上午同事说下车扫描还是有问题,运行很慢也不稳定,分析下来发现是取Sequence的问题。
 由于取Sequence不能并发。只能通过预取Sequence好后,提供给存储过程执行。
 修改成了:
 select @DeliveryItemStatusSysNo= MIN(sysno)from DeliveryItem_Status_Sequence where useflag=0
 update DeliveryItem_Status_Sequence set useflag=1 where sysno=@DeliveryItemStatusSysNo and useflag=0


第三次优化

优化后,心想这回取Sequence不会慢了,但是新问题又来了,由于这个下单扫描并发非常高,从凌晨到早上7点大约有6K单。
  运行后发现这个Sequence取有重复的情况。一重复就报错。后来只能修改成:
  将隔离级别修改成最高,这样就不会重复:
 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN tran
select @DeliveryItemStatusSysNo= MIN(sysno)from DeliveryItem_Status_Sequence where useflag=0
update DeliveryItem_Status_Sequence set useflag=1 where sysno=@DeliveryItemStatusSysNo and useflag=0
COMMIT TRAN 
SET TRANSACTION ISOLATION LEVEL  READ COMMITTED


第四次优化

经过三次优化应该没有问题了,但是运行下来,发现出现大量的死锁。由于隔离级别的提高,并发变成了顺序提交,死锁上来了。有没有
  其他办法来解决并发和重复的问题,这个问题一直困扰我,查了一下SQL server的帮助文档。想起一个新的方法,修改sql如下:
DECLARE @tbVarSysNo table(
    SysNo INT
)
--更新状态表
UPDATE TOP (1) DeliveryItem_Status_Sequence
SET useflag=1
OUTPUT   INSERTED.SysNo
INTO @tbVarSysNo WHERE useflag=0;
SELECT @DeliveryItemStatusSysNo=SysNo FROM  @tbVarSysNo
以上sql直接修改随机一条SysNO并取出,不需要去select和update成2次表,可以避免查询和更新的时间差引起重复和并发的情况


第五次优化

经过上面4次优化,观察发现不重复和并发的问题解决了,但是在更新MERGE INTO DeliveryItem_Status 
  表时,出现了死锁情况,经过跟踪这个死锁信息,发现是用了SERIALIZABLE隔离级别,检查程序和存储过程,
  没有地方声明SERIALIZABLE隔离级别,估计是SQL Server的bug,没办法,只能手工在存储过程中声明成 
  READ COMMITTED隔离级别,,
这一次修改后, 运行2天后发现,以上死锁,重复sysno和执行慢都解决了
这一次修改后,


总结

以上就是扫描的5次优化的全过程和解决方法,希望对大家后面的优化系统提供一些信息和参考。



标签:Status,DeliveryItem,DeliveryItemStatusSysNo,Sequence,扫描,全过程,useflag,优化,五次
From: https://blog.51cto.com/u_16532032/9376937

相关文章

  • 端口扫描&目录扫描
    端口是英文port的意译,可以认为是设备与外界通讯交流的出口。端口可分为虚拟端口和物理端口,其中虚拟端口指计算机内部或交换机路由器内的端口,不可见。例如计算机中的80端口(web服务)、21端口(ftp)、23端口(telnet)等。物理端口又称为接口,是可见端口,计算机背板的RJ45网口,交换机路由器集......
  • C++编译全过程
    1.源文件.cpp2.预处理:将所有的#include头文件以及宏定义替换成其真正的内容(删除所有的注释、宏扩展、文件包含).i3.汇编:转换为汇编语言.s4.编译:转换为二进制机器码.o(目标文件)5.链接:链接过程将多个目标文件以及所需的库文件(.so等)链接成最终的可执行文件(executablefile)......
  • Linux基线扫描常用修复建议
    #检查口令最小长度cp/etc/login.defs/etc/login.defs.backsed-i"/^PASS_MIN_LEN/cPASS_MIN_LEN8"/etc/login.defs#检查口令生存周期sed-i"/^PASS_MAX_DAYS/cPASS_MAX_DAYS90"/etc/login.defs#检查设备密码复杂度策略cp/etc/pam.d/system-auth/etc/pam.d/syst......
  • 第五次课笔记
    环境配置创建新的conda环境lmdeploy服务部署这一部分主要涉及本地推理和部署。我们先看一张图。我们把从架构上把整个服务流程分成下面几个模块。模型推理/服务。主要提供模型本身的推理,一般来说可以和具体业务解耦,专注模型推理本身性能的优化。可以以模块、API等多种方式......
  • Nexpose v6.6.233 for Linux & Windows - 漏洞扫描
    Nexposev6.6.233forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseJan17,2024请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • 差示扫描量热仪器操作步骤
    差示扫描量热仪器(DSC)是热分析中常用的仪器之一,广泛应用于材料科学、药物研究、高分子材料、地质学和石油化工等领域。DSC能够测量物质在加热或冷却过程中的热量变化,从而揭示物质的热性质和化学性质。本文将介绍差示扫描量热仪器的操作步骤。上海和晟HS-DSC-101差示扫描量热仪操作......
  • 线段树维护扫描线
    你需要实现一种数据结构支持以下操作:区间加减1保证加减区间一一对应,且先加后减,序列中永远不出现负数。查询完整序列中0的个数#include<cstdio>#include<algorithm>constintmaxn=1e5+10;longlongx[maxn*2];structsegmentTree{ structnode { i......
  • Acunetix v24.1 (Linux, Windows) - 漏洞扫描 (Web 应用程序安全测试)
    Acunetixv24.1(Linux,Windows)-漏洞扫描(Web应用程序安全测试)Acunetix|WebApplicationSecurityScanner请访问原文链接:https://sysin.org/blog/acunetix/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org重要提示AcunetixPremium现在使用日历化版本命......
  • 沸点密封科技(江苏)有限公司选购我司HS-DSC-101B差示扫描量热仪
    近日,沸点密封科技(江苏)有限公司经过严谨的市场调研和设备比对,最终选择从我司购置一台HS-DSC-101B差示扫描量热仪。这一决策不仅彰显了沸点密封科技对于产品质量的极致追求,也标志着我司科技设备可靠性得到了行业的广泛认可。沸点密封科技(江苏)有限公司HS-DSC-101B差示扫描量热仪作为我......
  • Windows用注册表修改键盘映射(扫描码)
    title:Windows用注册表修改键盘映射(扫描码)date:2020-10-18categories:编程tags:-键盘-注册表-Windows前言使用C/C++代码方式修改可见下篇《用C/C++(Win32API)写软件修改键位》据说Qwerty键盘是为了降低打字员打字速度,防止打字机卡机所作出的妥协。那么现在的键盘是......