Vertica “ERROR: Too many ROS containers exist”

from:http://blog.csdn.net/kongxx/article/details/38975539

 

将实时数据导入vertica时出现的错误,记录一下。

Caused by: java.sql.SQLException: [Vertica][VJDBC](5065) ERROR: Too many ROS containers exist for the following projections: 
public.action_log_super (limit = 39936, ROS files = 40092, DV files = 0, new files = 39)
        at com.vertica.util.ServerErrorData.buildException(Unknown Source) ~[stormjar.jar:na]
        at com.vertica.dataengine.VQueryExecutor.readCopyStartResponse(Unknown Source) ~[stormjar.jar:na]
        at com.vertica.dataengine.VQueryExecutor.handleExecuteResponse(Unknown Source) ~[stormjar.jar:na]
        at com.vertica.dataengine.VQueryExecutor.execute(Unknown Source) ~[stormjar.jar:na]
        at com.vertica.jdbc.SPreparedStatement.executeBatch(Unknown Source) ~[stormjar.jar:na]
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723) ~[stormjar.jar:na]
        at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:898) ~[stormjar.jar:na]
        at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:1) ~[stormjar.jar:na]
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:586) ~[stormjar.jar:na]
        ... 23 common frames omitted
Caused by: com.vertica.util.ServerException: [Vertica][VJDBC](5065) ERROR: Too many ROS containers exist for the following projections: 
public.action_log_super (limit = 39936, ROS files = 40092, DV files = 0, new files = 39)
        ... 32 common frames omitted

 

碰到找个问题就不得不说说Vertica的存储机制了。Vertica在默认情况下会把新写入的数据写入到WOS(写优化)中,然后根据一定的条件(比如说一定的时间周期)再把WOS中的数据写入到ROS(读优化)中,这时ROS有可能很多都是很小数据块的碎片,这是Vertica会在一定的时间周期后把这些ROS数据块合并成大的ROS文件。

这里把数据从WOS写入到ROS的过程Vertica管它叫MoveOut操作,而把零散的ROS合并成大的ROS的过程Vertica管它叫MergeOut操作。

 

好了,现在来看看我们的问题吧。错误里报的是ROS太多,那可能的原因是
1. WOS写ROS太多,这个原因很大的可能是每次insert/update的数据集太小,导致生成的碎片太多。

2. ROS太多,而配置的MoveOut和MergeOut的时间间隔太长,导致来不及做MoveOut和MergeOut。

1. 针对第一个可能的原因,提交数据批量为2000,数据集还是太小,修改为20000。

2. 对于第二个可能的原因,查了一下Vertica的资料,在Vertica中默认的MergeOutInterval是600,MoveOutInterval是300。这两个参数可以通过下面的命令来查看

 

dwyypas=> SELECT GET_CONFIG_PARAMETER('MoveOutInterval');  
 GET_CONFIG_PARAMETER 
----------------------
 300
(1 row)

dwyypas=> SELECT GET_CONFIG_PARAMETER('MergeOutInterval');
 GET_CONFIG_PARAMETER 
----------------------
 600
(1 row)

 

由于应用本身会产生很多的ROS碎片,所以我们想到了是不是可以通过减小MoveOut和MergeOut的Interval来让Vertica尽快的做MoveOut和MergeOut。因此修改了Vertica的参数

 

SELECT SET_CONFIG_PARAMETER('MoveOutInterval', 60);  
SELECT SET_CONFIG_PARAMETER('MergeOutInterval', 30);

 

 

 

其实关于这个问题,还有几个参数可以调节,具体资料可以参考
Vertica Tuple Mover Parameters

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值