系统中,由于要取某个业务表中字段的最大值(字符字段),但又担心并发时产生重复值,我设计了一个表来保存最后取到的最大值,同时保存该取值的时间。
写了一个存储过程来取值,首先从该表中取的最大值和时间,如果是当前时间的5秒以前,则重新从业务表中取最大值,然后重新保存到该表中。这样就可以避免并发时取重复了。
现在出现一个严重的问题,由于这个取值的存储过程可能会处于某个事务中,造成该存储过程对最大值表的写入操作产生的锁会被延续导整个外部事务中。这是如果另外的并发如果也启动了一个事务来运行该存储过程,并且也需要写入最大值表,这时产生了阻塞(死锁)
系统这两天很容易卡死,用户都受不了了,我也快崩溃了!

