我是MemSQL的新手。我在集群中的MemSQL中创建了一个数据库和表,其中包含5个叶节点和2个聚合器节点。 Spark在同一个集群上运行。 一切都处于默认模式。插入的数据和删除相同。 select *不返回任何内容。但是当我看到web clusterUI时,每个叶子节点仍然消耗大约6TB的磁盘空间。
磁盘容量说明“这是MemSQL使用的磁盘空间相对于可用磁盘总空间的数量。当它已满时,不能创建快照,事务日志或列存储数据”。
通过这个描述,我假设6TB以上的磁盘空间是因为MemSQL的使用。
请一些人澄清一下
答案 0 :(得分:5)
6TB的使用可能是因为MemSQL,或者可能是因为Spark或其他一些进程。 MemSQL ops报告总磁盘使用情况,而不是MemSQL使用的磁盘(工具提示略有误导)。
1)Rowstore表(没有CLUSTERD COLUMNSTORE索引的表)每次写入都会将日志写入磁盘。当日志变得很大时,日志会合并到快照中,默认情况下,我们会保留最后两个快照文件。因此,两个快照中较旧的一个可能包含您删除的数据。您可以使用SNAPSHOT <dbName>
触发新快照,这样可以让GC清理旧的(可能是大的)快照。
2)快照和日志是每个数据库,而不是每个表。删除表不会触发快照/日志清理,但是删除数据库或触发新快照将会执行。
3)您可能不应该手动删除数据目录。 DROP DATABASE <db_name>
将删除与该数据库关联的所有数据。
对于列存储表,故事略有不同,但我假设&#34;一切都是默认的&#34;表示没有列存储表。
答案 1 :(得分:-2)
在GC被触发之前,占用的内存将不会被释放。 Memsql将所有数据保存在内存中。即使我们删除表,数据库,行等,如果没有发生GC,内存也将无法使用。 从命令提示符强制执行GC,它将释放内存:
<强> memsql&GT;触发完整的gc flush;
在触发命令之前和之后比较 free -m 。 你会看到差异:)