【问题标题】:How to free space for dropped database in MemSql如何在 MemSql 中为删除的数据库释放空间
【发布时间】:2015-09-18 15:31:30
【问题描述】:

我是 MemSQL 的新手。我在具有 5 个叶节点和 2 个聚合器节点的集群上的 MemSQL 中创建了一个数据库和表。 Spark 在同一个集群上运行。 一切都处于默认模式。插入数据和删除相同。选择 * 不返回任何内容。但是当我看到 web clusterUI 时,每个叶子节点仍然消耗大约 6TB 的磁盘空间。

磁盘容量描述说“这是 MemSQL 使用的磁盘空间量相对于可用磁盘空间的总量。当它已满时,无法创建快照、事务日志或列存储数据”。

有了这个描述,我假设超过 6TB 的磁盘空间是因为 MemSQL 的使用。

请说明一下

  1. 默认情况下 MemSQL 是否也将数据写入磁盘?
  2. 删除内容和删除表后写入磁盘的数据不删除吗?
  3. 如何释放 MemSQL 占用的磁盘空间?我要删除哪个目录?我发现目录“/var/lib/memsql/leaf-3306”包含此叶节点的所有 memsql 工件。

【问题讨论】:

  • 你忘了把第二张截图中的 URL 去掉 :)
  • 在这里我抓到了 URL。 :)
  • 虽然我已经删除了数据库,但显示数据库显示在数据库信息_schema、memsql、分片下面。我还没有创建它们。没有人可以访问此集群。我也应该放弃它们吗?

标签: scala singlestore


【解决方案1】:

您是删除了数据库(如DROP DATABASE db)还是删除了所有数据(如DELETE FROM tTRUNCATE TABLE t)?

如果以前,磁盘使用量应该立即减少,如果没有,我可以帮助您调查是什么消耗它。

如果是后者,那么它是完全合理的。 MemSQL 使用事务日志和快照来实现持久性。在这种特殊情况下,当您插入X 的数据量,然后删除X 的数据量时,事务日志将在磁盘上为2X 长,因此在恢复时它可以重播所有插入和所有删除。为了缩小它,MemSQL 偶尔会拍摄快照(一些其他数据库引擎称它们为检查点)。当日志达到一定大小时,通常会这样做,在你的情况下,显然还没有达到。如果您想释放磁盘空间,您可以手动触发快照,在聚合器上运行SNAPSHOT dbdb 是您的数据库的名称),它应该会有所帮助。

【讨论】:

  • 我已经删除了数据库,但它并没有减少磁盘空间。 “显示数据库”在数据库 'information_schema'、'memsql'、'sharding' 下方显示。我还没有创建它们。没有人可以访问此集群。我也应该放弃它们吗?
  • 当然不要删除那些数据库。它们是 memsql 的系统数据库,是 memsql 正常运行所必需的(很可能无论如何您都无法删除它们)
【解决方案2】:

6TB 的使用可能是因为 MemSQL,也可能是因为 Spark 或其他一些进程。 MemSQL ops 报告总磁盘使用情况,而不是 MemSQL 使用的磁盘(工具提示有点误导)。

1) 行存储表(没有 CLUSTERD COLUMNSTORE 索引的表)每次写入都会将日志写入磁盘。当日志变大时,日志会合并为快照,默认情况下,我们保留最后两个快照文件。因此,两个快照中较旧的一个可能包含您删除的数据。您可以使用SNAPSHOT <dbName> 触发新快照,这将让 GC 清理旧的(可能很大)快照。

2) 快照和日志是每个数据库的,而不是每个表的。删除表不会触发快照/日志清理,但删除数据库或触发新快照会。

3) 您可能不应该手动删除数据目录。 DROP DATABASE <db_name> 将删除与该数据库关联的所有数据。

对于列存储表,情况略有不同,但我假设“一切都是默认设置”意味着没有列存储表。

【讨论】:

  • “MemSQL ops 报告总磁盘使用情况,而不是 MemSQL 使用的磁盘”,然后我松了一口气。让我检查一下磁盘空间是否被其他人占用
  • 在对磁盘容量的误导性描述进行澄清后,我删除了磁盘上的其他文件并清除了磁盘空间。
【解决方案3】:

在触发 GC 之前,占用的内存不会被释放。 Memsql 将所有数据保存在内存中。即使我们删除表,如果没有发生 GC,数据库、行等内存也将不可用。 从命令提示符执行 GC,它会释放内存:

memsql> 触发完全 gc 刷新;

比较触发命令前后的free -m。 你会看到不同的:)

【讨论】:

  • MemSQL 会自动运行 GC,不需要运行 trigger gc。特别是 flush 选项会导致 memsql 释放缓存的内存(Buffer_manager_cached_memory),这将对查询性能产生不利影响(而且 MemSQL 无论如何都会重新缓存内存)。有关深入了解内存使用情况的更多详细信息,请参阅:help.memsql.com/hc/en-us/articles/…
猜你喜欢
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
相关资源
最近更新 更多