首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Ignite查询失败

Apache Ignite查询失败
EN

Stack Overflow用户
提问于 2019-12-28 22:30:58
回答 2查看 170关注 0票数 0

我的Ignite表有350万行,而且还在不断增加。

如果我运行一个查询来获取所有行,或者获取最新的100k行,那么它将失败,并停止节点的执行。

代码语言:javascript
复制
SELECT * FROM <TableName>;
SELECT * FROM <TableName> ORDER By ID DESC LIMIT 100000;

无论是获取前100k行还是获取最新的100k行都是有效的。

代码语言:javascript
复制
SELECT * FROM <TableName> ORDER By ID LIMIT 100000;
SELECT * FROM EVENTSDATA WHERE ID > (SELECT Max(ID) FROM EVENTSDATA - 100000) LIMIT 100000;

我的Ignite配置文件:

代码语言:javascript
复制
<property name="memoryPolicies">
 <list>
  <bean class="org.apache.ignite.configuration.MemoryPolicyConfiguration">
    <!--<property name="name" value="2GB_Region_Eviction"/>-->
    <property name="initialSize" value="#{4 * 1024 * 1024 * 1024}"/>
    <property name="maxSize" value="#{12L * 1024 * 1024 * 1024}"/>
    <!--<property name="pageEvictionMode" value="RANDOM_2_LRU"/>-->
  </bean>
 </list>
</property>
  <property name="dataStorageConfiguration">
     <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
        <property name="defaultDataRegionConfiguration">
           <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
              <property name="initialSize" value="#{1 * 1024 * 1024 * 1024}"/>
              <property name="maxSize" value="#{8L * 1024 * 1024 * 1024}" />
              <!-- 50 GB. -->
              <property name="persistenceEnabled" value="true" />
           </bean>
        </property>
     </bean>
  </property>
  <property name="discoverySpi">
     <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
        <property name="ipFinder">
           <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
            <property name="addresses">
              <list>
                <value>127.0.0.1:47500..47509</value>
              </list>
            </property>
           </bean>
        </property>
     </bean>
  </property>

我们遵循第一种方法,如图所示。

有人能向我推荐查询优化或apache Ignite配置吗?

EN

回答 2

Stack Overflow用户

发布于 2019-12-30 03:35:19

最有可能的情况是,当Java Heap达到饱和时,由于内存不足异常或长时间GC暂停而导致节点失败。一种主要技术是增加堆大小和调优failureDetection超时。

但是在采用这种方法之前,我不确定是否真的需要用SQL读取整个表。如果您需要遍历重要的数据子集,那么使用带有scan查询或本地SQL查询的计算任务:https://www.gridgain.com/docs/latest/developers-guide/collocated-computations

至于SQL调优,请查看此页面:https://www.gridgain.com/docs/latest/perf-troubleshooting-guide/sql-tuning

票数 2
EN

Stack Overflow用户

发布于 2020-01-31 00:45:11

尝试使用“惰性”模式进行查询: SqlFieldsQuery#setLazy。它非常适用于使用简单过滤器(没有聚合和子查询)的简单普通SELECT。在这种情况下,引擎迭代数据,而不是将所有结果集加载到堆中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59511798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档