我们有一个小型的EC2实例,我们运行一个前端服务器(php5-fpm / nginx),但也有很多获取cron php脚本插入大量数据(每15分钟2k +行),似乎完全挂起MySQL服务器1-2分钟,崩溃的前端网站(获取超时)。
我认为使用主服务器和从服务器(只读,用于前端)MySQL服务器可以解决这个问题(?),但是对于这个项目我只限于一个实例。
我已经用mysqltuner调整了MySQLconfiguration, 并将 插入设置为低优先级 。
在使用EC2之前,我们使用的是共享主机,而我们没有遇到这个问题,可能是因为共享服务器上的整体硬件比我们的小型EC2实例更好?
我想到的可能的解决scheme,但他们似乎并不完美,或从源头上真正解决问题:
我build议用足够的空行预填充表,以获得一整天的数据。 因为不需要分配,所以应该使插入更快。
我认为innodb是你最好的select。 MyISAM执行表级locking,这将在更新期间阻塞。 MySQLlocking细节文档
我也有与m1.small实例混合的结果。 他们是部分CPU拆分,如果你的VM室友很忙,必须得到。 (检查vmstat for cpu steal)您可以尝试简单升级到c1.medium。 EC2实例types它具有与小型CPU相同的RAM占用空间,但CPU资源是5X。 (成本的两倍)
在一个小的两个MySQL实例可能是一个坏主意。 (只有一个虚拟CPU)
如果你想保持低廉的价格,试着把那些在2000分钟内写出来的15分钟的窗口。 (〜200分钟)
你也没有给出有关你的内存或MySQL设置的任何细节。 你的myisam_block_size是4k吗? 什么是你的MyISAM key_buffer? 你看过MyISAM concurrent_insert设置吗?
干杯。