我有一个存储过程,主要功能是UPDATE一个表,然后再INSERT到另外一个表。
此存储过程会有大量并发,大概每秒300左右。
现在如何保证在保持现有并发频率下,UPDATE完成后,一定会INSERT。
我现在的情况是平均每30万次执行此存储过程,就会有10个左右在存储过程只执行到一半就卡死,这样就导致我数据库里的数据不一致了。此时服务器CPU性能已达到100%。如果对上述两个动作加事务进行控制,现在就没办法处理300/秒的并发量。有没有类似事务的操作,这两个动作进行捆绑,但又不会像事务一样,如此影响速率。

解决方案 »

  1.   

    每秒并发300就不要搞到一个表里面update了,这样肯定要出问题的。
      

  2.   

    能不能先用程序生成指UPDATE和INSERT放到缓存里,然后一段时间执行一次
      

  3.   

    不知道一个客户端生成一个临时表,然后通过视图,去一起生成到新的表或insert,这样应该减少一点服务器的压力,要不就分数据库,就是说几个客户端连一个数据库,这样应该也会好些,这是我自己一些做法!
      

  4.   

    1.CPU性能已达到100%,说明瓶颈不在IO,分多少个表都没用的,楼主应该考虑计算逻辑如何优化,或者使用连接池。
    2.就算cpu达到100%,sqlserver还是会保证事务完整的,楼主要先找到错误原因究竟是不是死锁产生;
    3.代码中每一行后面增加 if @@error<>0 goto errhdl,然后在errhdl后面处理错误,可以再调用一次存储过程,或者将错误信息写到另一个表,再用作业处理
      

  5.   

    (UPDATE一个表,然后再INSERT到另外一个表)*300/秒!什么样的硬件?cpu满,也可能是正常操作导致,也可能互相等待、死锁导致的吧?