mysql lock_wait_timeout 的推荐设置
时间: 2023-12-09 11:05:06 浏览: 633
MySQL的lock_wait_timeout参数是用来控制当一个事务请求加锁时等待的时间,如果超过该时间仍未获得锁,则该事务会被自动回滚。该参数的默认值为50秒,但实际的设置需要根据具体情况进行调整。
一般来说,如果应用程序的负载较轻,则可以适当降低lock_wait_timeout的值,以避免锁等待过长时间。如果应用程序的负载较重,则需要适当增加lock_wait_timeout的值,以允许更长的等待时间,以便更多的事务有机会获取锁。
建议根据实际经验和负载情况来进行调整,通常可以设置在1-2分钟之间。当然,如果您的应用程序需要更长时间的锁等待时间,也可以将其设置为更长的时间。
相关问题
mysql参数 lock_wait_timeout 和 innodb_lock_wait_timeout 的推荐设置分别是多少
`lock_wait_timeout` 和 `innodb_lock_wait_timeout` 这两个参数的推荐设置值取决于具体的应用场景和业务需求,一般需要根据实际情况进行调整。
对于 `innodb_lock_wait_timeout` 参数,建议将其设置为一个合理的值,以避免出现死锁和长时间的锁等待。一般来说,可以将该参数的值设置为 5~30 秒之间,具体取决于应用的负载情况和业务需求。如果应用中存在大量的并发操作,并且锁等待时间较长,那么可以适当增加该参数的值。
对于 `lock_wait_timeout` 参数,建议将其设置为一个较小的值,以避免出现长时间的锁等待和事务阻塞其他事务的情况。一般来说,可以将该参数的值设置为 1~10 秒之间,具体取决于应用的负载情况和业务需求。如果应用中存在大量的并发操作,并且事务执行时间较长,那么可以适当增加该参数的值。
需要注意的是,这些参数的设置应该根据实际情况进行调整,并且需要进行综合考虑。同时,对于复杂的应用系统,可能需要进行一些特殊的优化和调整,以提高系统的性能和稳定性。
关于mysql参数 lock_wait_timeout 和 innodb_lock_wait_timeout 的案例
假设有两个事务 A 和 B,它们都需要访问一张名为 `account` 的表,并且事务 A 先于事务 B 开始执行。在事务 A 中,我们执行以下语句:
```sql
begin;
select * from account where id = 1 for update;
-- do some modifications
commit;
```
在事务 B 中,我们执行以下语句:
```sql
begin;
select * from account where id = 1 for update;
```
由于事务 A 在执行期间一直持有 `id=1` 的行的排它锁,因此事务 B 会一直等待,直到事务 A 释放锁为止。
假设 `lock_wait_timeout` 参数被设置为 10 秒,而 `innodb_lock_wait_timeout` 参数被设置为 5 秒。
当事务 B 等待时间超过 5 秒时,InnoDB 引擎会自动检测到这个超时,并自动结束事务 B,回滚事务中的所有修改操作,以避免无限等待锁的情况。
而如果事务 B 等待时间超过 10 秒,MySQL 会自动结束事务 B,并回滚事务中的所有修改操作。
需要注意的是,`lock_wait_timeout` 参数只适用于当前会话,而 `innodb_lock_wait_timeout` 参数是 InnoDB 引擎的全局参数,适用于所有会话。同时,如果 `lock_wait_timeout` 参数的值大于 `innodb_lock_wait_timeout` 参数的值,那么 `innodb_lock_wait_timeout` 参数的值会被覆盖,即事务 B 最长只会等待 `innodb_lock_wait_timeout` 参数设定的时间。
阅读全文