进展
经过测试发现
update A set A.b=6 WHERE A.b<>6
这种更新语句,set和where子句使用了相同的列,从查询计划看,sybase使用延迟更新的方式更新数据,即先把数据全部缓存到log段中,随后才更新表数据,由于紧跟其后的dump tran语句就是要操作log段,所以i/o差时会较慢.
比较奇怪的是,在其他DB上测试同样的语句,虽然查询计划显示是使用延迟更新的方式,但是dump tran却很快(1秒内就能完成)
目前还没有办法定位dump tran慢的原因,sybase工程师建议使用数据库中的阀值空间保护存储过程功能来减少dump tran操作.
通常的做事大批量UPDATE后,进行一次DUMP TRAN 保护日志空间不充满,参见ITPUB 18期电子杂志。