点燃从缓存或磁盘中获取的查询结果

Ignite query result fetched from cache or disk

启用 Ignite Native Persistence 后,有没有办法知道查询结果是从缓存还是磁盘中获取的?

我在 PARTITIONED 模式下使用 Apache Ignite 2.7.5 和 2 个节点 运行,每个节点的配置如下节点。

            <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
                <!-- Redefining the default region's settings -->
                <property name="pageSize" value="#{4 * 1024}"/>
                <!--<property name="writeThrottlingEnabled" value="true"/>-->
                <property name="defaultDataRegionConfiguration">
                    <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                        <property name="persistenceEnabled" value="true"/>
                        <property name="initialSize" value="#{105L * 1024 * 1024 * 1024}"/>
                        <property name="name" value="Default_Region"/>
                        <!--Setting the size of the default region to 4GB. -->
                        <property name="maxSize" value="#{120L * 1024 * 1024 * 1024}"/>
                        <property name="checkpointPageBufferSize"
                                  value="#{4096L * 1024 * 1024}"/>
                        <!--<property name="pageEvictionMode" value="RANDOM_2_LRU"/>-->
                    </bean>
                </property>
            </bean>

所有数据都存储在位于堆外内存中的所谓页面中,它可以是 RAM 也可以是磁盘,但是对于后者,Ignite 需要先将页面加载到堆外,并且它不直接从磁盘执行读取。数据处理需要堆内存,例如为 SQL 查询合并数据集、处理通信请求等。

没有可靠的方法来检测是否已将一段所需数据预加载到 RAM 中,但有一些指标可以帮助您了解集群的总体情况。 IE。页面驱逐发生的频率等等。

您可能需要检查数据区域的以下指标。

这三个估计加载到数据区域的数据大小:

  • TotalAllocatedPages
  • PagesFillFactor
  • 空数据页

启用持久性后,这些提供了有关我们使用磁盘进行读取的密集程度的信息(越小越好):

  • PagesReplaceRate
  • 阅读页数
  • 替换页数

一些可能有用的实现细节: Ignite Durable Memory, Ignite Persistent Store - under the hood