Castle.ActiveRecord中Save与SaveAndFlush的性能差别
Castle.ActiveRecord中Save与SaveAndFlush的性能差别
1.一看就知道两者是有性能差距的,我把Save想成是“延迟写入”。
2.原来在某次试验的时候,发现主从表的情况下,先把主表SaveAndFlush一下,
可以获取到相应的Id,但这次测试的结果是,只要Save,就可以获取到Id。
主键使用的PrimaryKeyType.GuidComb。
3.如果数据增多,速度减慢的程度不是线性的,最后会相当慢。
测试结果:
30条数据只要1-2秒,
200条记录,对象数400左右的情况下,在一个事务中用SaveAndFlush更新数据几十分钟
也不能完成,超时,数据库锁表。
跟踪发现执行时越来越慢,会出现很多OnFlushDirty操作, Flush大量对象;
因为作了详细的每个对象更新日志保存,SP_LOCK看到10多万个锁。
4.修改为Save方式,200条数据只需要3秒左右。400条数据7秒左右。
1.一看就知道两者是有性能差距的,我把Save想成是“延迟写入”。
2.原来在某次试验的时候,发现主从表的情况下,先把主表SaveAndFlush一下,
可以获取到相应的Id,但这次测试的结果是,只要Save,就可以获取到Id。
主键使用的PrimaryKeyType.GuidComb。
3.如果数据增多,速度减慢的程度不是线性的,最后会相当慢。
测试结果:
30条数据只要1-2秒,
200条记录,对象数400左右的情况下,在一个事务中用SaveAndFlush更新数据几十分钟
也不能完成,超时,数据库锁表。
跟踪发现执行时越来越慢,会出现很多OnFlushDirty操作, Flush大量对象;
因为作了详细的每个对象更新日志保存,SP_LOCK看到10多万个锁。
4.修改为Save方式,200条数据只需要3秒左右。400条数据7秒左右。
5.没想到会有这么大的差距,问题暂时解决,没有时间继续研究更多内容。
另外,StateLessSession据说效率会更高,但我的ActiveRecord找不到这个对象。