从一个地方用hibernate读取出记录(object),放到另外一个地方saveorupdate,数据库是sqlserver,里面大概80多万条记录,速度很慢,用事件探查器跟踪,全部截取下来的话,发现有1万多行,90%是Lock:Acquired;Lock:Released;不知道有没有人遇到过,如果用其他程序执行select;insert(模拟saveorupdate),速度稍快一些,主要区别是没有那么多的lock,这些lock很占cpu的资源,有没有高手知道怎么回事?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【liudongyan】截止到2008-06-23 17:03:18的历史汇总数据(不包括此帖):
    发帖数:2                  发帖分:120                
    结贴数:2                  结贴分:120                
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    另外你的数据库是不是有很多主外键关联。
    而你的hibernate又设置成了级联更新。这个也是一种可能的问题。
      

  3.   

    倒是有索引,是为了select的速度快一些,没有索引岂不是更慢
      

  4.   

    但是在用其他程序执行select然后执行insert的时候,也没有这种情况呀
      

  5.   

    hibernate 的saveorupdate 需获取对应记录的lock,而insert语句不需要反复获取;
      

  6.   

    是否由于太多的lock导致性能降低了的呢.
    不如按照楼上那种试试直接save试试.就是直接insert而不是update
      

  7.   

    是不是在事务的配置的时候把isolation 设置成了READ_COMMITTED(防止脏读),默认是DEFAULT,获取数据库的事务处理规则如果是的话,事务在写数据的时候会加排他锁,锁住搞条记录,不允许其他事务读写,这样可能就出现了数据库的那些lock