MYSQL引擎的选择
工作中发现一个请求量为每秒100左右的服务出现异常,表现为Recv-Q积累大量请求,显示卡在服务逻辑里面。服务逻辑很简单,处理两种请求,查询和更新,都是直接操作数据库。
尝试增加服务进程,无效。
查看服务日志发现,所有的SQL语句执行都很慢,Update语句平均10+秒,Select语句甚至卡住不动。判断是问题出在数据库。
登录数据库,查看processlist,发现大量语句Update和Select语句状态均为Locked,导致语句执行很慢,所以增加服务进程是无法解决的。
查看Locked语句操作的表,发现引擎是MyISAM。该引擎的优势在于Select,读多写少的场景,并且该引擎只有表锁。如果是写多读少的场景,应该使用InnoDB,例如Update和Insert语句较多。
因此,解决方案是将表引擎改为InnoDB。问题解决。
参考:
1. http://www.pureweber.com/article/myisam-vs-innodb/

浙公网安备 33010602011771号