关于并发UPDATE导致更新失败的问题

yangyaodell 2020-01-08 09:13:22
200个终端,每25秒,更新一张表,update xx set qty=0.0001 where id=1

id qty 都为随机 id为主键 每个终端唯一id 一行数据写完 再新增一行 整张xx表 目前有 25万行

在200个终端同时工作的时候,有时候会产生 查询超时的错误 我初步是 怀疑锁页 ,后来我在update里加入了 with(rowlock) ,但偶尔还是会发生.

请问大侠有没有解决方案.

...全文
261 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyaodell 2020-01-08
  • 打赏
  • 举报
回复
insert into 在客户运行吧,我目前是客户端直连mssql
lich2005 2020-01-08
  • 打赏
  • 举报
回复
引用 2 楼 yangyaodell 的回复:
"用两个表关联再去更新原表" 在服务器端执行?


都是在服务端运行的,比如可以采用任务调度的方式来做,当然也有专门的后台程序来跑这些SQL,这个主要看你们怎么来选择了。
yangyaodell 2020-01-08
  • 打赏
  • 举报
回复
"用两个表关联再去更新原表" 在服务器端执行?
lich2005 2020-01-08
  • 打赏
  • 举报
回复
看能不能借助一张中间表( temp_tb )去完成,中间表需要有个字段和原表 ( xx ) 去关联 (在你实际应用中可能有更多的字段选择),暂且把这个字段叫 sysno ( 自增列 )

写入的时候,终端都是采用 insert into 插表的方式把数据写到 中间表( temp_tb ),这种方式不会死锁。
到了一定的时间,不如你设定的 25 秒,然后用两个表关联再去更新原表。类似SQL大概是 之类的语句

update xx
set qty = temp_tb.qty
from xx
join temp_tb on xx.sysno = temp_tb.sysno
lich2005 2020-01-08
  • 打赏
  • 举报
回复
引用 4 楼 yangyaodell 的回复:
insert into 在客户运行吧,我目前是客户端直连mssql


写数据都是客户端连数据库写;
更新数据都在服务器端完成;

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧