单条纪录更新, 导致的表死锁

道玄希言 2015-07-09 10:58:08
具体情况:
4个CPU的扣肉2代的服务器, 客户端大概 100 个左右, 客户端运行时,
会频繁的查询一个表的数据, 表中数据量大概在六七万左右,

每次更新一个字段, 纪录下纪录被查阅的次数. 用的SQL更新语句:
update table1 set col = col +1 where keyid = 'XXXX'

对该表的查询有很多, 前台显示的数据, 大部分是通过系统启动时, 查询加载到系统, 还有部分数据量小的,会实时查询显示
更新字段, 在查询中的作用, 基本是用于做排序标记.

系统在几十家店使用, 只有一两家出现了更新时死锁. 其他的都没有这个问题,
出现问题的地方在最开始, 服务器用的单CPU, 也沒出现死锁的情况, 是在感觉服务器不是很快, 另外再添加了3个CPU后才出现的问题.

后来我干脆取消了哪个更新, 將更新另外用一个表保存才搞定.

不知道是啥原因引起的
...全文
435 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
道玄希言 2015-07-13
  • 打赏
  • 举报
回复
引用 7 楼 Tiger_Zhao 的回复:
不是死锁,应该是大量点歌的更新对记录有锁定,导致读取歌曲列表一直等待吧。 分表是对的,(频繁更新的)点击数和(频繁查询的)歌曲基本信息不能放在一张表中。
谢谢, 就是这个问题, 由于更新从而导致无法读取数据了. 本来设计,我也是采用另表保存点歌信息, 然后通过定时的对点歌纪录表统计,再更新到歌曲点唱次数字段. 想着直接写入点唱次数字段, 省略掉统计更新这一步了, 结果导致了这个问题. 看来还是不要偷懒了, 呵呵
Tiger_Zhao 2015-07-13
  • 打赏
  • 举报
回复
不是死锁,应该是大量点歌的更新对记录有锁定,导致读取歌曲列表一直等待吧。
分表是对的,(频繁更新的)点击数和(频繁查询的)歌曲基本信息不能放在一张表中。
道玄希言 2015-07-11
  • 打赏
  • 举报
回复
额, 怎么米人呢? 谁知道这是啥问题引起的么?
Neo_whl 2015-07-09
  • 打赏
  • 举报
回复
死锁无非是事务并发引起的,不所不解的是,同一个表的一个字段中没有多用户并发的情况么?
江南小鱼 2015-07-09
  • 打赏
  • 举报
回复
关注,看不出什么原因~
道玄希言 2015-07-09
  • 打赏
  • 举报
回复
引用 4 楼 wtujedp 的回复:
看看这个表有没有触发器,在更新这个字段的时候,同时进行了别的操作。
没做触发器, 但是多客户端同时执行了这个更新,不知道有没有可能。。。
wtujedp 2015-07-09
  • 打赏
  • 举报
回复
引用 3 楼 yangb0803 的回复:
[quote=引用 2 楼 u011015550 的回复:] 死锁无非是事务并发引起的,不所不解的是,同一个表的一个字段中没有多用户并发的情况么?
因为表纪录不多, 几万条纪录 每次的更新, 也只是更新了一条纪录的一个字段, 且也是对这个表的唯一更新. 其他都是查询操作. 程序是DELPHI 写的, 直接用ADO静态连接在数据库上, 沒做三层. 系统是一个点歌系统, 客户沒点一首歌, 就更新纪录一下这首歌的点击数. 更新的就是歌曲纪录的点击数这个字段. 一般同时连接到数据库的客户端大概 20-100 台左右. 应该是有多用户并发更新的. 问题是, 只出现了一家有这种情况, 而且是在服务器升级到多CPU后. [/quote] 看看这个表有没有触发器,在更新这个字段的时候,同时进行了别的操作。
道玄希言 2015-07-09
  • 打赏
  • 举报
回复
引用 2 楼 u011015550 的回复:
死锁无非是事务并发引起的,不所不解的是,同一个表的一个字段中没有多用户并发的情况么?
因为表纪录不多, 几万条纪录 每次的更新, 也只是更新了一条纪录的一个字段, 且也是对这个表的唯一更新. 其他都是查询操作. 程序是DELPHI 写的, 直接用ADO静态连接在数据库上, 沒做三层. 系统是一个点歌系统, 客户沒点一首歌, 就更新纪录一下这首歌的点击数. 更新的就是歌曲纪录的点击数这个字段. 一般同时连接到数据库的客户端大概 20-100 台左右. 应该是有多用户并发更新的. 问题是, 只出现了一家有这种情况, 而且是在服务器升级到多CPU后.
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 【FAST FWR310 无线路由更新程序】是一个专门为FAST FWR310型号无线路由设备设计的固件升级方案,其主要目的在于改善设备的工作表现、纠正已知的系统缺陷或引入全新的操作特性。对无线路由器进行固件更新,实质上是指替换或升级其核心操作系统(即固件),从而使其运行状态得到进一步优化。 在无线路由器的持续使用阶段,用户有时会遭遇若干操作难题,例如网络连接的频繁中断、数据传输速率不高、无线信号覆盖范围有限等情况。针对此类挑战,通过安装新的固件(即刷机包),能够有效应对上述问题,因为新固件或许已经针对这些普遍存在的问题进行了优化处理。不仅如此,固件升级还能开启一些隐藏的功能选项,或者兼容第三方固件,例如OpenWRT,从而让用户能够进行更深入的系统自定义配置及管理。 FWR310 V5.0升级软件20160301是该刷机包的明确版本标识,显示出这是针对FAST FWR310路由器推出的第五代固件,并且发布日期为2016年3月1日。此版本的更新内容可能涵盖以下几个方面: 1. 运行效能的调优:借助于对路由器处理流程与内存分配的改善,能够加快数据交换速率,减少响应时间,从而全面提升网络的工作效能。 2. 安全防护的强化:更新内容中可能融入了对新兴网络安全风险的防御机制,用以保障用户的资料安全。 3. 互操作性的扩展:可能增强了与更多设备及协议的适配能力,比如最新的无线通信标准或设备连接模式。 4. 运行稳定性的提升:修复了可能引发路由器系统崩溃或意外重启的已知故障,延长了设备的稳定运行周期。 5. 新特性集成:或许增添了提升用户体验的功能,例如远程操作控制、家长监管功能、服务质...

22,298

社区成员

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

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