Memsql columnstore 数据在 TRUNCATE 或 DROP TABLE 后未从磁盘中删除
Memsql columnstore data not deleted from disk after TRUNCATE or DROP TABLE
我在 memsql 中创建了一个列存储 table 并在其中填充了大约 1000 万条记录,之后我开始了 运行 几个更新方案。我注意到 /var/lib/memsql/leaf-3307/data/columns 中的数据大小不断增加,似乎没有任何内容被删除。最初该文件夹的大小为几百 Mb,但在一些 table 完整更新后它迅速跳到几 Gb。 memsql-ops 报告的 "Columnstore Disk Usage" 也增加了,但速度非常慢(与我在磁盘上看到的相去甚远)。
这让我觉得数据从未真正从磁盘中删除过。 The documentation 声明 运行 OPTIMIZE 命令应该压缩行段组并且删除的行将被删除:
Delete - Deleting a row in a columnstore index causes the row to be marked as deleted in the segment meta data leaving the data in place within the row segment. Segments which only contain deleted rows are removed, and the optimization process covered below will compact segments that require optimization.
运行 OPTIMIZE 命令没有帮助。我也尝试截断 table 甚至删除它,但没有任何帮助。列文件夹中的数据仍然存在。我能找到的清理它的唯一方法是删除整个数据库。
这似乎不是所需的行为,我找不到任何证明它的文档。任何人都可以解释为什么会发生这种情况,如果它应该发生或指出一些相关文档?
提前致谢
MemSQL 将在每个分区数据库的磁盘上保留大约 columnstore_window_size
字节的已删除列存储数据。这是列存储复制实现的一部分(它保留一些旧文件以防从属落后)。如果降低该系统变量的值,您将看到磁盘使用率下降。如果您不使用冗余 2,则降低它没有任何害处。
我在 memsql 中创建了一个列存储 table 并在其中填充了大约 1000 万条记录,之后我开始了 运行 几个更新方案。我注意到 /var/lib/memsql/leaf-3307/data/columns 中的数据大小不断增加,似乎没有任何内容被删除。最初该文件夹的大小为几百 Mb,但在一些 table 完整更新后它迅速跳到几 Gb。 memsql-ops 报告的 "Columnstore Disk Usage" 也增加了,但速度非常慢(与我在磁盘上看到的相去甚远)。
这让我觉得数据从未真正从磁盘中删除过。 The documentation 声明 运行 OPTIMIZE 命令应该压缩行段组并且删除的行将被删除:
Delete - Deleting a row in a columnstore index causes the row to be marked as deleted in the segment meta data leaving the data in place within the row segment. Segments which only contain deleted rows are removed, and the optimization process covered below will compact segments that require optimization.
运行 OPTIMIZE 命令没有帮助。我也尝试截断 table 甚至删除它,但没有任何帮助。列文件夹中的数据仍然存在。我能找到的清理它的唯一方法是删除整个数据库。
这似乎不是所需的行为,我找不到任何证明它的文档。任何人都可以解释为什么会发生这种情况,如果它应该发生或指出一些相关文档?
提前致谢
MemSQL 将在每个分区数据库的磁盘上保留大约 columnstore_window_size
字节的已删除列存储数据。这是列存储复制实现的一部分(它保留一些旧文件以防从属落后)。如果降低该系统变量的值,您将看到磁盘使用率下降。如果您不使用冗余 2,则降低它没有任何害处。