Scala 如何在MemSql中为删除的数据库释放空间
我是MemSQL的新手。我在集群上的MemSQL中创建了一个数据库和表,其中有5个叶节点和2个聚合器节点。Spark正在同一群集上运行。 一切都处于默认模式。插入数据并删除相同的数据。选择*不返回任何内容。但当我看到WebClusterUI时,每个叶节点仍在消耗大约6TB的磁盘空间 磁盘容量说明中说:“这是MemSQL使用的磁盘空间相对于总可用磁盘空间的数量。当磁盘空间已满时,无法创建快照、事务日志或列存储数据。” 有了这个描述,我假设6TB以上的磁盘空间是因为使用了MemSQL 请澄清一下好吗Scala 如何在MemSql中为删除的数据库释放空间,scala,singlestore,Scala,Singlestore,我是MemSQL的新手。我在集群上的MemSQL中创建了一个数据库和表,其中有5个叶节点和2个聚合器节点。Spark正在同一群集上运行。 一切都处于默认模式。插入数据并删除相同的数据。选择*不返回任何内容。但当我看到WebClusterUI时,每个叶节点仍在消耗大约6TB的磁盘空间 磁盘容量说明中说:“这是MemSQL使用的磁盘空间相对于总可用磁盘空间的数量。当磁盘空间已满时,无法创建快照、事务日志或列存储数据。” 有了这个描述,我假设6TB以上的磁盘空间是因为使用了MemSQL 请澄清一下好
6TB的使用可能是因为MemSQL,也可能是因为Spark或其他进程。MemSQL ops报告的是磁盘总使用量,而不是MemSQL使用的磁盘(工具提示有点误导) 1) Rowstore表(没有CLUSTERD COLUMNSTORE索引的表)在每次写入时都将日志写入磁盘。当日志变大时,日志被合并到快照中,默认情况下,我们保留最后两个快照文件。因此,两个快照中较早的快照可能包含您删除的数据。您可以使用
快照
触发一个新快照,这将允许GC清理旧的(可能较大的)快照
2) 快照和日志是按数据库,而不是按表。删除表不会触发快照/日志清理,但删除数据库或触发新快照会触发
3) 您可能不应该手动删除数据目录<代码>删除数据库将删除与该数据库关联的所有数据
对于columnstore表,情况略有不同,但我假设“一切都是默认的”意味着没有columnstore表 您是否删除了数据库(如,drop database db
)或删除了所有数据(如delete FROM t
或TRUNCATE TABLE t
)
如果是前者,磁盘使用应该立即减少,如果没有,我可以帮助您调查是什么消耗了它
如果是后者,那就完全有道理了。MemSQL使用事务性日志和快照来实现持久性。在这种特殊情况下,当您插入
X
数据量,然后删除X
数据量时,磁盘上的事务日志将2X
长,以便在恢复时可以重播所有插入和所有删除。为了缩小范围,MemSQL偶尔会拍摄快照(其他一些数据库引擎称之为检查点)。当日志达到一定的大小时,它通常会这样做,在您的例子中,显然还没有达到。如果要释放磁盘空间,可以手动触发快照,在聚合器上运行snapshot db
(db
是数据库的名称),这应该会有所帮助。在触发GC之前,占用的内存不会空闲。Memsql将所有数据保存在内存中。即使我们删除了表、数据库、行等,如果GC没有发生,内存也将不可用。
从命令提示符强制执行GC,它将释放内存:
memsql>触发完全gc刷新强>
比较触发命令前后的free-m。
您将看到不同之处:)您忘了在第二个屏幕截图中呼出URL:)这里我划掉了URL:)虽然我已经删除了数据库,但show databases在数据库下面显示了schema、memsql、sharding等信息。我没有创造它们。没有人可以访问此群集。我也应该删除它们吗?我已经删除了数据库,但并没有减少磁盘空间。“show databases”在下面显示数据库的“information\u schema”、“memsql”、“sharding”。我没有创造它们。没有人可以访问此群集。我也应该删除它们吗?最肯定的是不要删除那些数据库。它们是memsql的系统数据库,是memsql正常运行所必需的(很可能您无论如何都无法删除它们)“memsql ops报告的是磁盘的总使用量,而不是memsql使用的磁盘”然后我就松了一口气。让我检查一下是否有人使用了磁盘空间在得到关于磁盘容量的误导性描述的澄清后,我删除了磁盘上的其他文件,并清除了磁盘空间。MemSQL将自动运行其GC,不需要运行触发器GC。特别是flush选项将导致memsql释放缓存内存(Buffer\u manager\u cached\u memory),这将对查询性能产生不利影响(而且memsql稍后只会重新缓存内存)。有关深入了解内存使用情况的更多详细信息,请参阅: