记录一次workerman使用中出现的问题

1,开发环境,windows(这一点很重要)

2,用workerman运行一个定时器(别问我为什么用workerman只干这个,干的事儿很多,只是把这个抽离出来说),定时器里运行一些sql,相关的表有4个。

3,站点当然还有别的功能,不复杂,也是运行一些sql,相关的表也是4个。

3,在网站操作,点一会就会出现卡住,大概会卡个几十秒,然后workerman里会提示这句错误

General error: 1205 Lock wait timeout exceeded; try restarting transaction

4,反复测试(这个测试真的很坑,因为不是必现,想要复现错误,有时点十几分钟也不出现),确定了出现问题的sql,是一个update。update语句很简单,不会有什么错误,想了一会,猜测大概workerman里的update和网页操作的update出现了并发,并且是同一个表的同一条sql

5,为了验证猜测,在workerman里设置每秒运行一次这句update,然后网页上新增一个控制器,只有一句代码也是那个update,为了方便测试,加上事务和延迟,保证出现并发

#代码大概是这样
开启事务
update table set a=a-1 where id=1
sleep(2)
提交事务

6,修改下mysql的配置,把innodb_lock_wait_timeout改成5(默认应该是50),开始说的会卡住几十秒,记录了下发现就是50,所以应该是这个

7,测试,发现每次问题都会出现,只要是workerman里的sql和别的进行的sql,改同一条数据,就会出现mysql死锁。

8,然后就绝望了,因为已经是最简代码,总不能去看workerman代码去找问题。但是转念一想,用workerman的人那么多,不会只有我发现这个问题吧。所以上linux上试了下,果然是没问题(心中一万个斯巴达,这个bug困扰我2天,茶不思饭不想)

9,有钱了还是要用苹果做开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值