我有以下情况:
Amazon EC2实例上的MySQL MyISAM数据库,在apache webserver上使用PHP。我们需要在MySql中的json中存储incomming包。为此,我使用一个临时数据库,其中每分钟cronjob移动旧数据,其中DateTime> 'date - 2min'查询到另一个表(名为stage2)。
stage1表只有实际信息,正常情况下包含35k行,繁忙时最多可包含100k。我们每分钟可以达到5万个新行,这应该是大约10k个插入查询。插入内容如下所示:
INSERT DELAYED IGNORE INTO stage1 VALUES(...),(....),(....),(....),(...)
然后我们有大约每10秒运行4个脚本,执行以下操作:
然后我们每分钟有一个cronjob将旧数据从stage1移动到stage2。
所以一切都运作良好很长一段时间,但现在我们的用户越来越多,在高峰期间,stage1表不时崩溃。我们可以很容易地修复它,但这不是正确的方法因为我们会停机一段时间。
p。在高峰时段内存和CPU都可以,但是当stage1崩溃时,一切都崩溃了。
另外值得一提的是:我不在乎我是否因为失败而错过了行,所以我不需要任何特殊的备份计划以防万一出错。
到目前为止我做了什么:
尝试切换到innoDB,但这更糟糕,主要是想到它需要的大内存。我的EC2目前是t2.medium,具有4GB内存和2个具有突发容量的vCPU。点击:https://dba.stackexchange.com/questions/27328/how-large-should-be-mysql-innodb-buffer-pool-size并运行此查询:
SELECT CEILING(Total_InnoDB_Bytes * 1.6 / POWER(1024,3))RIBPS FROM (SELECT SUM(data_length + index_length)Total_InnoDB_Bytes FROM information_schema.tables WHERE engine ='InnoDB')A;
它返回了11gb,我尝试了3gb,这是我实例的最大值(80%)。因为它更不稳定我昨天把每张桌子都换回myISAM
重新创建stage1表结构
我有什么限制?
我正在考虑的选项
喜欢得到一些建议和帮助!也许我错过了简单的答案?或者我不应该考虑哪些选择。
谢谢, Sjoerd Perfors
答案 0 :(得分:-1)
今天我们通过以下设置解决了这些问题:
我们尝试过的但没有奏效的事情: - 设置DynamoDB但发送到此数据库的成本几乎为5秒。
我们正在考虑的事情: - 删除stage2数据库并直接从Stage1进行备份。似乎有这种行并不会对性能造成影响。