等待锁出现的根本原因是有个事务执行时间过久,会把部分表一直锁定状态,导致其他事务当中的sql无法顺利执行。
方案一:缩小事务范围,只把DML语句(UPDATE,INSERT,DELETE)包裹在事务中,因为有的事务,不仅仅是对数据库的操作,可能还存在访问其他系统,如果请求时间过久,事务一直不结束,表也会一直处于锁定。
方案二:尽可能减少事务中包含的DML语句。提高事务的执行时间。一个事务当中减少多表操作的情景,可以拆分提交。
方案三:优化sql执行时间。
方案四:如果以上无法优化,可以配置调大锁的等待时间。