我们有一个简单的MySQL数据库,其中有几个表,由Google Cloud SQL管理。该数据库有数亿行,读/写相当轻松。我们还远远没有达到存储的极限,但内存使用率正随着存储的线性增长,很快就会成为可扩展性的问题。
内存使用量是否应该随着存储量线性增长?我们应该考虑什么来降低内存使用率?我们尚未自定义任何数据库标志。
我在谷歌云文档中没有看到任何关于内存使用和最佳实践的信息。现在考虑水平缩放/分片似乎还为时过早。
MySQL将自动分配大约0.8的实例内存来存储数据&索引。这是为了避免繁重的I/O操作并提供良好的响应时间。
因此,默认情况下,MySQL希望在内存中存储尽可能多的数据,从而使内存使用量看起来像是随着插入更多数据而线性扩展。
这并不一定意味着你即将面临问题。这实际上是MySQL机器拥有什么资源的问题。给它128GB的RAM,并插入大约120GB的数据,它将在内存中容纳大约102GB的数据(保持性能(,而64GB的RAM机器和120GB数据肯定会显示出较慢的响应时间。
附带说明:
如果你存储了数亿行,并且愿意在查询时间(毫秒到秒(上妥协一点,我建议你查看BigQuery,你最终可能会比Cloud SQL支付更少的费用,而不必担心规模(永远…(或DBA/Dev Ops维护(内存、CPU、索引等(。