所以目前我正在尝试将memsql评估为我们实时管道的数据库选项。 我有一个疑问,假设我们正在为我们的表使用行存储,突然发生了一连串事件,我们无法处理内存中的所有内容。 它是否会溢出到磁盘或在这种情况下会显示什么行为。 感谢
答案 0 :(得分:1)
您是在询问有关使用临时内存的查询,还是将查询填充到内存容量?
如果查询尝试消耗的内存超过可用内存,则某些查询将返回错误。客户端应用程序可以稍后再次尝试它们或安排查询以避免在数据库中发送过大的突发。
如果写入查询将行存储表填充到内存容量,它们将开始返回错误,您将不得不扩展内存容量或删除一些数据。 (或者,您可以考虑使用磁盘上的列存储表,具体取决于您的工作负载。)
答案 1 :(得分:0)
我认为问题是" memsql是否将所有行存储数据存储在内存中#34;?
我也在进行类似的评估,我在memsql文档中找不到答案。
但根据我的个人经验,看起来所有ROWSTORE表仅存储在记忆中。因此,如果你的一些叶子节点由于这个而耗尽内存,那你就不走运了。写信给COLUMNSTORE(那么你可以使用ParAccel,Vertica或Greenplum)。
我认为memsql足够智能,可以将一些行存储数据存储到磁盘上。
答案 2 :(得分:0)
是的,所有行存储数据都必须适合内存。这是为什么MemSQL的rowstore比传统的磁盘上的行存储快得多的部分原因(有关详细信息,请参阅MemSQL skiplist index)。 maximum_table_memory
系统变量控制MemSQL在开始拒绝写查询之前允许的内存量(参见MemSQL memory management documentation。