PHP,mysql 事务锁等待超时,怎么回事?

OSC首席键客 发布于 2016/09/18 11:40
阅读 746
收藏 0

php,mysql。

我在一个事务里面,开始事务,执行查询,提交事务。

执行查询里面有很多操作。

msyql会出现1205,锁等待超时的情况,看了下日志,是select锁等待超时。

这是什么情况?

加载中
0
mark35
mark35
事务耗时多,其他select锁等待超时了吧。配置里面把锁等待超时阈值提高试试
0
乌龟壳
乌龟壳
真的木有办法把这个耗时操作移走减少事务时间么?太多长时间的事物,再强的数据库也崩溃。
0
chenxc2014
chenxc2014
事务中尽量还是不要有查询的操作吧,特别是一个很耗资源的查询操作。
0
OSC首席键客
OSC首席键客

引用来自“chenxc2014”的评论

事务中尽量还是不要有查询的操作吧,特别是一个很耗资源的查询操作。

里面有很多,操作,不可能没有查询啊!

查询也会锁住?

OSC首席键客
OSC首席键客
回复 @chenxc2014 : 是说,在一个事物里面,select出来的行都会被加锁?直到事物提交?
eechen
eechen
innodb_lock_wait_timeout=50 默认50秒,可以尝试调大
chenxc2014
chenxc2014
如果一个事务中嵌套了一个很耗时的查询操作,这就意味着整个事务的持续时间也会跟着变长,伴随而已的就是加锁的时间也更长(锁住资源的时间),如果加的是悲观锁,那其他的进程就只能干等待了。
0
乌龟壳
乌龟壳
换种问法,这是啥需求可否具体描述下?
0
南湖船老大
南湖船老大

1.锁的超时时间是可以在配置文件里配置的,默认应该是60秒。

2.事务的基本原则,事务不要太大,如果有大事务,那么可以把它拆成小事务。

3.并发会加剧锁的等待时间,复杂的多表操作也会加剧锁的等待或获取成本。

4.避免产生或使用表锁。

OSC首席键客
OSC首席键客
我那个就是60秒,数据库是公司的,我不能控制。并发的话,目前不需要考虑。 看来是得拆分了。 我那个事物里面就是批量操作,每循环一次做的事都一样,就是针对的对象不一样。 每次循环,里面要做的事挺多的,然后批量加起来时间就久了。
0
李落雨
李落雨
主要还是select语句臃肿,多表查询导致了表锁
0
star_glm
star_glm
查看一下谁被谁阻塞了,还有当时系统的状况是不是很繁忙,比如CPU使用率很高,内存占用很大;还有sql语句是要查询出很大量数据吗,sql语句的写法也会影响响应时间和锁的。问题写的具体一些更便于分析。
返回顶部
顶部