• vertica ROS和WOS错误


    频繁写入vertica,可能导致ROS和WOS错误。如下:

    java.sql.SQLTransientException: [Vertica][VJDBC](5065) ERROR: Too many ROS containers exist for the following projections:
    logs.op_logs_req_super (limit = 16384, ROS files = 16384, DV files = 0, new files = 16)
    at com.vertica.util.ServerErrorData.buildException(Unknown Source)
    at com.vertica.dataengine.VQueryExecutor.readCopyStartResponse(Unknown Source)
    at com.vertica.dataengine.VQueryExecutor.handleExecuteResponse(Unknown Source)
    at com.vertica.dataengine.VQueryExecutor.execute(Unknown Source)
    at com.vertica.jdbc.common.SPreparedStatement.executeBatch(Unknown Source)
    at com.vertica.jdbc.VerticaJdbc4PreparedStatementImpl.executeBatch(Unknown Source)

    以下是原因,以及解决方案。

    转载:

    碰到找个问题就不得不说说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. 针对第一个可能的原因,确实是我们的应用的需求的问题,这个目前来说我们没法改变。
    2. 对于第二个可能的原因,我们查了一下Vertica的资料,在Vertica中默认的MergeOutInterval是600,MoveOutInterval是300。这两个参数可以通过下面的命令来查看

    SELECT GET_CONFIG_PARAMETER('MoveOutInterval');
    SELECT GET_CONFIG_PARAMETER('MergeOutInterval');

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

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

    在修改了这两个参数以后,我们的应用确实在运行了很长时间后都没有再出现上面的问题了。

    ---------------------

    后来再次出现这个问题,修改连接池参数解决了问题:

    ALTER RESOURCE POOL TM MEMORYSIZE '4G' PLANNEDCONCURRENCY 6 MAXCONCURRENCY 10;

    -----------------------


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

    Vertica Tuple Mover Parameters

  • 相关阅读:
    (设计模式)组合模式
    redis 集群部署 (linux)
    redis 集群 配置文件
    redis 外部访问配置(bind正确配置)
    (设计模式)桥模式
    (springboot)freemarker(二)
    (springboot)入门(一)
    (设计模式)抽象工厂
    (设计模式)建造者模式
    (设计模式)原型
  • 原文地址:https://www.cnblogs.com/lavezhang/p/11249793.html
Copyright © 2020-2023  润新知