最近在业务支持中遇到特殊业务对innodb的这个锁等待超时(innodb_lock_wait_timeout)有比较严格的要求,特意查了下资料(主要还是参考的官方文档)
innodb_lock_wait_timeout指的是事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒,最小可设置为1s(此时需要考虑应用端的频繁异常处理会消耗性能,不能设置过小),最大可设置1073741824秒以上(再大就会被截断了,不过这样业务一直死循环等待下去而不能将资源使用来做其他的事情也是很浪费的一件事情)
一般默认安装时这个值是50(公司现有的安装貌似是默认100s的),这个值在InnoDB Plugin 1.0.2版本之前只能通过修改配置文件my.cnf并重启mysql实例生效;在 InnoDB Plugin 1.0.2版本之后可以做到动态的修改包括线程级别和全局的一个设置:set innodb_lock_wait_timeout=100; ---------session
set global innodb_lock_wait_timeout=100; ---------global
注意global的修改对当前线程是不生效的,只有建立新的连接才生效
PS:如果事务开始前部分有其他操作而中途遇到锁等待超时则mysql端还需要回滚,如果频繁出现对DB消耗也不可小觑啊。
其实在现有场景下多台机器同时更新某个资源有很多其他的方式,比如令牌环方式等。纯属yy~~~
文章参考: