vertica最佳实践之 tuple_mover操作
Tuple Mover Overview
Vertica analytics平台提供了不同的存储选项,可以在内存中缓慢加载小数据文件(称为WOS),也可以将大数据文件直接批量加载到文件系统(称为ROS)。加载到WOS的数据存储方式为未排序的数据,而加载到ROS的数据存储为基于projection 设计的排序、编码和压缩的数据。
Tuple Mover是一个Vertica服务,在后台运行,执行两个操作:
Moveout: Moveout操作定期将数据从WOS容器移动到一个新的ROS容器中,防止WOS填满并溢出到ROS。Moveout一次只能在一个特定的WOS容器集合上运行。当moveout操作选择要转移到ROS的projection 时,它将从所有已提交的事务中加载的projection 数据组合起来,并将它们写入到一个ROS容器中。
Mergeout: Tuple Mover 合并ROS容器并清除已删除的记录。
在大多数用例中,除了默认参数外,Tuple Mover几乎不需要或不需要任何配置。但是,有些工作负载可能需要调优配置参数。本文档:
- 常见问题的答案
- 提供故障排除技巧
- 介绍有关WOS、数据加载和模式设计的最佳实践
Tuple Mover Moveout Operation
检测wos spillover
WOS内存由名为WOSDATA的内置资源池控制,其默认最大内存大小为每个节点2GB(9.1版本最大内存设置为主机内存的25%,在 9.3及以后版本中创建的新数据库中,WOSDATA资源池的默认值为0。因此,Vertica始终直接向ROS写)。如果将数据加载到WOS的速度快于元组移动器将数据移出的速度,则数据会溢出到ROS中,直到WOS中的空间可用为止。溢出不会发生数据丢失,但是溢出会比预期更快地创建ROS容器并减慢moveout操作。
可以通过运行以下查询来检测数据库是否正在发生WOS溢出:
SELECT node_name, count(*) from dc_execution_engine_events WHERE event_type = 'WOS_SPILL' group by node_name;
moveout最佳实践
使用COPY DIRECT加载大数据文件
如果加载大数据文件(每个节点超过100 MB),则将COPY语句转换为COPY DIRECT语句。这使您可以绕过WOS的加载,而直接将文件加载到ROS。
配置参数: MoveOutInterval
将此参数设置为小于填充一半WOS所花费的时间的值。此参数确定在检测到没有要从WOS移出的元组移动器移出操作休眠的时间(以秒为单位)。该参数的默认值为300秒,减小该值可以更频繁地将数据从WOS移到ROS中。
WOS中未提交的数据
不要将未提交的数据留在WOS中的时间超过必要的时间,因为元组移动器仅移出已提交的数据。如果WOS充满了来自未提交事务的数据,则移出无法将数据移出。这可能导致WOS溢出到ROS中。
不要将WOS用于大型临时表
不要使用WOS加载具有大型数据集(每个节点超过50 MB)的临时表。移出操作不会移出临时表数据,并且在事务或会话结束时将删除数据。
WOSDATA资源池的maxMemorySize
如果您同时将负载trickle load到10个以上的表中,并且经历了WOS溢出,则以前的一种或多种最佳实践应有助于解决您的问题。您可以通过增加WOS资源池的maxMemorySiz