我有多个运行相同应用程序的应用程序服务器指向单个数据库服务器。
有时,n
用户在n
应用程序服务器上执行相同的功能,这些服务器进入单个数据库服务器并发生死锁(如此Lock wait timeout exceeded; try restarting transaction)导致m
个事务回滚(其中1< m
< n
。
我们通过将调用与服务方法同步(使用synchronized
关键字在单个Application Server计算机上解决此问题,因此一次只有一个线程可以访问数据库。
但是这个解决方案不适用于多个应用服务器(我们这里的情况)。
我们可以实现某种机制(例如db信号量),这样我们就可以让一个调用者一次执行一个事务,并让其他调用者等到第一个完成,然后再调用一个 获得锁等等。