您能帮我解决以下问题吗?我已经安装了vertica集群。我不明白如何限制时间或大小。例如,数据库中的数据必须在30天之前删除,或者在数据库大小达到100 GB时删除(先到为准)。
没有自动的方法,也没有“限制数据库大小”的逻辑方法。您不能只是从“数据库”中修剪“数据”。
您在说什么(就限制30天之内的数据而言,需要在表级别上完成。您将需要某种日期字段并删除30天之前的任何内容。但是,我建议不要以这种方式删除行。它性能不佳,并且可能导致对该表的查询变慢:请参见DELETE and UPDATE Performance Considerations。最好的方法是按天对表进行分区,并每天创建一个自动化脚本(bash,python等),以删除与30天前的日期对应的分区:请参阅Dropping Partitions。
关于删除数据-如果“数据库”的大小超过100GB,则此要求非常含糊,无法执行。假设您有50个表,并且其中一些表的大小增加了,以便数据库的总大小超过100GB,您将如何决定删除哪个表?这也必须在每个表级别的表上进行(或者,在这种情况下,从技术上讲,在投影级别上,因为这是实际存储数据的位置)。
要查看数据库的压缩大小(磁盘大小),可以使用此查询:
SELECT SUM(used_bytes) / ( 1024^3 ) AS database_size_gb FROM projection_storage;
但是,由于只能使用表上的
DELETE
或DROP PARTITION
语句删除数据,因此查看每个表的大小也很有帮助。您可以使用以下查询来做到这一点:
SELECT projection_schema, anchor_table_name, SUM(used_bytes) / ( 1024^3 ) AS table_size_gb FROM projection_storage GROUP BY 1, 2 ORDER BY 3 DESC;
根据结果,您可以决定要修剪哪些表。
一些注意事项(作为Vertica DBA):
数据存储在投影中。在单个表上有太多的预测不仅会导致查询变慢,还会增加整体数据占用量。避免使用过多的投影(尤其是过多的超投影,每个表不要超过两个,并且大多数表只需要一个)。使用数据库设计器或遵循文档中的准则来创建定制投影:Design Fundamentals。
此外,降低数据库大小的另一个技巧是使用DESIGNER_DESIGN_PROJECTION_ENCODINGS函数。除非您的投影是使用数据库设计器创建的,否则它们可能仅包含自动编码。使用DESIGNER_DESIGN_PROJECTION_ENCODINGS
功能将帮助您为每一列选择最佳的编码。与以前未优化的投影相比,经过正确编码的投影只占磁盘大小的2%。这种情况很少见,但以我的经验,您仍然会看到尺寸至少减少20-40%。不要害怕自由地使用此功能。作为Vertica DBA,它是我最喜欢的工具之一。另外