我对10个连接表中的大查询有问题。我正在将数据从广泛的事实表(f1)迁移到星型模式中。我首先从f1填充维度表,然后用新的事实表(f2)填充维度表以获得相应的ID。
不幸的是我收到了一个错误,“内部分区不适合内存”。从日志中我看到:
2012-10-18 16:20:31.607 Init Session:0x2aac6c02b250 [EE] <INFO> ENABLE_JOIN_SPILL may allow this query to run, with reduced performance
2012-10-18 16:20:31.607 Init Session:0x2aac6c02b250 [EE] <INFO> Query Retry action: Setting add_vertica_options('EE','ENABLE_JOIN_SPILL');
但是这不起作用,因为后来我得到了:
2012-10-18 16:23:31.138 Init Session:0x2aac6c02b250 [EE] <INFO> Join ((public.owa_search_term_dim x public.page_impressions_with_session) using owa_search_term_dim_projection_node0001 and previous join (PATH ID: 7)) inner partition did not fit in memory; value
2012-10-18 16:23:31.138 Init Session:0x2aac6c02b250 [EE] <INFO> Query Retry action: Swapping join order with override: 1|7|0
这种情况持续了一段时间,而Vertica显然试图找到一种方法来执行连接,但最终会因为连接不适合内存而出现错误。
是否有关于如何最小化执行连接所需的内存或为什么溢出到磁盘不起作用的提示?我可以处理性能损失,我只需要能够执行查询。
答案 0 :(得分:6)
我为解决这个错误所做的事情......
使用这些步骤,我没有遇到任何无法获得结果的情况。有时需要一段时间。我有一组查询泵入一系列14个临时表,结束于一个非常小的结果集;但由于必须完成原始的运算量,因此需要花费超过15分钟才能运行。
答案 1 :(得分:0)
Nija的答案是更好的答案,但这里有一个建议要考虑:获得更多的记忆。有时你会超出你的系统。
他建议使用临时表是我过去使用过的,但是我很久没有遇到过这个问题了。但那是因为我们的系统没有做很多连接。