mysql 以下参数 innodb_lock_wait_timeout,lock_wait_timeout,wait_timeout分别指的什么
时间: 2023-09-02 11:13:58 浏览: 364
1. `innodb_lock_wait_timeout` 是 MySQL InnoDB 存储引擎的一个参数,它指定一个事务等待获取锁的时间,单位为秒。如果在这个时间内,另一个事务没有释放锁,那么当前事务就会被强制回滚,以避免死锁的发生。
2. `lock_wait_timeout` 是 MySQL 的一个全局参数,它指定了一个事务等待获取锁的时间,单位为秒。如果在这个时间内,另一个事务没有释放锁,那么当前事务就会被强制回滚,以避免死锁的发生。与 `innodb_lock_wait_timeout` 不同的是,`lock_wait_timeout` 是针对所有存储引擎的。
3. `wait_timeout` 是 MySQL 的一个全局参数,它指定了一个客户端连接在没有活动操作的情况下可以保持多久,单位为秒。如果一个客户端连接在 `wait_timeout` 时间内没有发出任何请求,那么该连接就会被服务器自动断开。这个参数主要用于防止空闲连接长时间占用服务器资源。
相关问题
mysql 5.7的参数innodb_lock_wait_timeout 和 lock_wait_timeout 一般设置为多少,
参数innodb_lock_wait_timeout是用来设置InnoDB引擎的等待锁定超时时间,一般建议设置为60s-120s之间。而参数lock_wait_timeout是用来设置整个MySQL服务器的等待锁定超时时间,默认是设置为31536000s(1年),一般建议根据实际情况根据业务需求和服务器性能进行调整。如果你的业务中存在大量的锁等待情况,可以适当地缩短这个参数的值,以减少锁等待的时间,提高系统的并发能力。同时,也需要根据实际情况监控锁等待情况,及时优化SQL语句和索引,减少锁的竞争。
关于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` 参数设定的时间。
阅读全文