需求:
网页游戏里面经常会有一些功能模块是需要每天重置的,比如每天有5次抽奖次数,每天可以兑换资源的次数等。那么正常的思路必然是在第二天零点的时候对数据库相关表字段进行update。这是很合理的思维方式,在游戏发展初期是不会有什么问题的。但是当服务器玩家数量增加,零点需要重置的表变多时,0点就会出现很多锁超时的错误:ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction导致某些玩家数据库更新失败。那怎么解决呢?
思路:
1.适当地调整MySQL锁超时的时间,默认设置是50S。可以通过设置参数innodb_lock_wait_timeout来调整时间。但是值得注意的是,这个参数不能调得太大,那样的话如果数据库长时间不释放锁会导致程序线程卡死,影响玩家体验。
2.跟策划讨论更改重置时间的可能,把不同的模块尽量错峰执行,比如有些是在0点,有些是在1点,2点等,但这种方式会限制游戏的玩法,不是个好的选择。
3.尽量减少全表更新,比如像这种SQL语句
[crayon-69eb59105[……]

