天气源数据库优化记录 2013-11-22

2013年11月22日 天气服务, 技术八卦 评论 1 条 阅读 4,954 次

今天上午检查天气源,发现服务器负载很高,php进程超过100个,maridb的Table locks waited非常的高,平时正常情况这两项应该在10个左右,检查发现有两个抓取服务器挂了,原因不明。
现在天气源的设置是每个抓取服务器超时是15秒,遇到挂了的服务会自动选择另外一,直到选择到可用的服务器。但产生的问题也就出来了,天气源程序在初始化的时候会打开数据库连接读开始事务取更新服务器列表,然后根据需要从抓取服务器获取数据,一般来说这个过程会在几秒钟内执行完成,同时也就自动关闭数据库连接。
但问题是现在抓取服务器挂了几个,会导致程序天气源程序在读取抓取服务器时卡上很久,同时因为数据库连接开启了事务的原因,导致锁表,别的连接不得不等待到锁表结束。在抓取服务器等待的同时加上数据表锁表引起的数据库堵塞,导致了程序一直在争数据库连接,数据库的Table locks waited奇高,当然天气更新也非常的缓慢,失败率非常高。

找到问题解决起来就很简单了,把服务器列表缓存到Redis,把数据表引擎改成innodb,因为innodb支持行级锁行,而aria引擎却会锁表。读取抓取服务器的时候关闭数据库连接,读取完毕后再重新连接数据库,这样虽然多了一次数据库连接,但至少不会造成别的线程堵塞~

1 条留言  访客:1 条  博主:0 条

给我留言

  1. avatar 历史上聊一会

    你真厉害

Copyright © 阿枫的老巢 保留所有权利.   Ality主题 蜀ICP备13024662号-1

用户登录