mssql 并发控制

liushurong 2009-07-27 02:39:34
我有一个存储过程,主要功能是UPDATE一个表,然后再INSERT到另外一个表。
此存储过程会有大量并发,大概每秒300左右。
现在如何保证在保持现有并发频率下,UPDATE完成后,一定会INSERT。
我现在的情况是平均每30万次执行此存储过程,就会有10个左右在存储过程只执行到一半就卡死,这样就导致我数据库里的数据不一致了。此时服务器CPU性能已达到100%。

如果对上述两个动作加事务进行控制,现在就没办法处理300/秒的并发量。

有没有类似事务的操作,这两个动作进行捆绑,但又不会像事务一样,如此影响速率。
...全文
177 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
z6987590 2010-04-02
  • 打赏
  • 举报
回复
绑定 带学习。。。。
haitao 2009-07-27
  • 打赏
  • 举报
回复
(UPDATE一个表,然后再INSERT到另外一个表)*300/秒!

什么样的硬件?

cpu满,也可能是正常操作导致,也可能互相等待、死锁导致的吧?
skelenli 2009-07-27
  • 打赏
  • 举报
回复
1.CPU性能已达到100%,说明瓶颈不在IO,分多少个表都没用的,楼主应该考虑计算逻辑如何优化,或者使用连接池。
2.就算cpu达到100%,sqlserver还是会保证事务完整的,楼主要先找到错误原因究竟是不是死锁产生;
3.代码中每一行后面增加 if @@error<>0 goto errhdl,然后在errhdl后面处理错误,可以再调用一次存储过程,或者将错误信息写到另一个表,再用作业处理
Zoezs 2009-07-27
  • 打赏
  • 举报
回复
帮顶,学习。感觉不用事务比较难搞。
lihan6415151528 2009-07-27
  • 打赏
  • 举报
回复
视图能insert?
lizfhn 2009-07-27
  • 打赏
  • 举报
回复
不知道一个客户端生成一个临时表,然后通过视图,去一起生成到新的表或insert,这样应该减少一点服务器的压力,要不就分数据库,就是说几个客户端连一个数据库,这样应该也会好些,这是我自己一些做法!
netcup 2009-07-27
  • 打赏
  • 举报
回复
我只想出将300个客户端的写访问,插入到10个临时表里,30个客户端并发1个临时表,然后10个临时表再并发一个总表。这样能缓解总表更新的压力,其他想不出来什么好办法了。
liushurong 2009-07-27
  • 打赏
  • 举报
回复
换服务器是不太可能的。

关于数据放到缓存里,定时更新到数据库的做法,对于我的功能来说是不行的,因为我必须时刻保持数据库的最新状态。
xiequan2 2009-07-27
  • 打赏
  • 举报
回复
升级硬件和软件
guguda2008 2009-07-27
  • 打赏
  • 举报
回复
能不能先用程序生成指UPDATE和INSERT放到缓存里,然后一段时间执行一次
guguda2008 2009-07-27
  • 打赏
  • 举报
回复
换服务器。。。。我觉得这数据量确实够大
jia_guijun 2009-07-27
  • 打赏
  • 举报
回复
只能说:

一次性更新多条记录,比多次更新好。

一次性插入多条记录,比多次插入好。
jinjazz 2009-07-27
  • 打赏
  • 举报
回复
每秒并发300就不要搞到一个表里面update了,这样肯定要出问题的。
--小F-- 2009-07-27
  • 打赏
  • 举报
回复
帮顶一下

22,209

社区成员

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

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