我的网站偶尔会有相当可预测的爆发式流量,将吞吐量提高超过正常水平100倍。例如,我们将在一档电视节目中亮相,我预计在节目后的一个小时内,访问量将比平时高出100倍以上。
我的理解是,MySQL(InnoDB)通常会将我的数据存储在不同的位置:
- RAM缓冲区
- 提交日志
- 二进制日志
- 实际表格
- 上述所有位置均在我的DB从属副本上
这种“耐用性”太多了,因为我在EC2节点上,大部分东西都通过同一网络管道传输(文件系统附加到网络)。另外,驱动器速度很慢。这些数据并不是高价值的,而我宁愿冒少量数据丢失几分钟的风险,也不愿意在人群到达时有高概率的停机时间。
在这些流量突发期间,我希望仅在负担得起的情况下进行所有I / O操作。我希望尽可能地保留在RAM中的内容(与一个小时内触摸的数据大小相比,我有很多RAM)。如果缓冲区变得不足,或者I / O通道没有过载,那么当然,我希望将事物记录提交日志或二进制日志发送到从属副本。只有在I / O通道不过载的情况下,我才想写回实际表格。
换句话说,我希望MySQL / InnoDB使用“写回”缓存算法而不是“写入”缓存算法。我能说服它这样做吗?
如果这不可能,我对一般的MySQL写性能优化技巧很感兴趣。大多数文档都是关于优化读取性能的,但当我有一群用户时,我正在为他们创建账户,因此工作负载是以写入为重的。