Skip to content

监控

1.介绍

本章节介绍Ignite的监控和指标。首先会介绍可用于监控的方法,然后再深入介绍Ignite的细节,包括一个JMX指标和MBean的列表。

1.1.概述

Ignite中监控的基本任务涉及指标,访问指标有几种方法:

1.2.监控什么

可以监控:

  • 单独的每个节点;
  • 节点之间的连接;
  • 整个集群。

注意,节点由几个层次组成:硬件、操作系统、虚拟机(JVM等)和应用,所有这些层级及其之间的网络都需要检查。

  • 硬件(Hypervisor):CPU/内存/磁盘⇒系统日志/云供应商的日志;
  • 操作系统;
  • JVM:GC日志、JMX、Java Flight Recorder、线程转储、堆转储等;
  • 应用:日志、JMX、吞吐量/延迟、测试查询;
    • 对于基于日志的监控,关键是主动采取行动,观察日志中的趋势等信息,而不仅仅是等到出现问题后才检查日志。
  • 网络:连通性监控、网络硬件监控、TCP转储。

对于配置硬件、操作系统和网络监控,这些就可以了。如果要监控应用层(组成内存计算解决方案的节点),则需要通过JMX/Beans或以编程方式访问指标系统来执行特定于Ignite的监控。

1.3.全局与节点级指标

通过不同的指标公开的信息具有不同的作用域(适用性),并且根据取得指标的节点不同,可能也会有所不同。以下列表说明了不同指标的作用域:

全局指标

通常提供有关集群的信息,例如:节点数、集群状态,该信息在集群的任何节点上都可用。

节点级指标

提供获取指标的节点的专有信息,例如:内存消耗量、数据区指标、WAL大小、队列大小等。

与缓存相关的指标可以是全局的,也可以是节点级的。例如,缓存中的条目总数是全局指标,可以在任意节点上获取。还可以获取存储在某节点上的缓存条目数,这时他就是节点级的指标。

2.集群ID和标签

集群ID是集群的唯一标识符,该标识符在集群首次启动时自动生成。集群标签是可以分配给集群的用户友好名称。可以使用这些值在所使用的监控系统中对集群进行标识。

集群的默认标签是自动生成的,但是可以修改,标签的长度限制为280个字符。

可以使用以下方法查看集群ID以及查看或更改集群标签:

  • 通过控制脚本

  • JMX Bean:

    group=IgniteCluster,name=IgniteClusterMXBeanImpl
    属性类型描述
    IdString集群ID
    TagString集群标签
    操作描述
    Tag(String)设定新的集群标签
  • 编程方式:

    java
    Ignite ignite = Ignition.start();
    
    // get the cluster id
    java.util.UUID clusterId = ignite.cluster().id();
    
    // change the cluster tag
    ignite.cluster().tag("new_tag");

3.集群状态

3.1.概述

Ignite集群有3种状态:ACTIVEACTIVE_READ_ONLYINACTIVE

首次启动纯内存集群(无持久化数据区)时,该集群处于ACTIVE状态,首次启动开启持久化数据区的集群时,该集群为INACTIVE状态。

  • INACTIVE:禁止所有操作;

    当将集群状态从ACTIVE更改为INACTIVE(冻结 )时,集群将撤销已分配的所有内存资源。

    警告

    冻结会在所有集群节点上撤销已分配的所有内存资源,包括应用的数据,并禁用公开的集群API。如果有没有由持久化存储(原生持久化存储或外部存储)备份的缓存,则将丢失数据,并且必须重新加载这些缓存。

  • ACTIVE:这是集群的正常状态,可以执行任何操作;

  • ACTIVE_READ_ONLY:只读状态,仅允许读取操作。

    任何尝试创建缓存或修改现有缓存中的数据都会触发IgniteClusterReadOnlyException异常,DDL或者修改数据的DML也是禁止的。

3.2.改变集群状态

可以通过多种方式更改集群状态:

  • 控制脚本

    shell
    control.sh --set-state ACTIVE_READ_ONLY
  • REST命令

    http://localhost:8080/ignite?cmd=setstate&state=ACTIVE_READ_ONLY
  • 以编程方式:

    java
    Ignite ignite = Ignition.start();
    
    ignite.cluster().state(ClusterState.ACTIVE_READ_ONLY);
  • JMX Bean:

    Mbean的对象名称:

    group="Kernal",name=IgniteKernal
    操作描述
    clusterState()获取当前集群状态
    clusterState(String)设置集群状态

4.指标

4.1.配置指标

指标收集不是一项无代价操作,可能会影响应用的性能。因此默认情况下会禁用某些指标。

4.1.1.启用缓存指标

缓存指标显示有关缓存中存储的数据量,缓存操作的总数和频率等的统计信息,以及一些其他的缓存配置属性。

要启用缓存指标,对要监控的每个缓存使用下面介绍的一种方法:

xml
<property name="cacheConfiguration">
    <list>
        <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <property name="name" value="mycache"/>
            <!-- Enable statistics for the cache. -->
            <property name="statisticsEnabled" value="true"/>
        </bean>
    </list>
</property>
java
IgniteConfiguration cfg = new IgniteConfiguration();

CacheConfiguration cacheCfg = new CacheConfiguration("test-cache");

// Enable statistics for the cache.
cacheCfg.setStatisticsEnabled(true);

cfg.setCacheConfiguration(cacheCfg);

// Start the node.
Ignite ignite = Ignition.start(cfg);
csharp
var cfg = new IgniteConfiguration
{
    CacheConfiguration = new[]
    {
        new CacheConfiguration("my-cache")
        {
            EnableStatistics = true
        }
    }
};

var ignite = Ignition.Start(cfg);

对于节点的每个缓存,Ignite会创建2个JMX Beans:一个是缓存的节点级信息,另一个是缓存的全局(集群范围)信息。

本地缓存信息MBean

```
group=<Cache_Name>,name="org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl"
```

全局缓存信息MBean

```
group=<Cache_Name>,name="org.apache.ignite.internal.processors.cache.CacheClusterMetricsMXBeanImpl"
```

4.1.2.启用数据区指标

数据区指标暴露了数据区的有关信息,包括数据区的内存和存储大小,需要收集哪个数据区的信息,就为哪个数据区开启指标收集。

数据区指标可以通过2种方式启用:

下面的示例演示了如何为默认的数据区和一个自定义数据区开启指标收集:

xml
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
    <property name="dataStorageConfiguration">
        <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
            <property name="defaultDataRegionConfiguration">
                <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                    <!-- enable mertrics for the default data region -->
                    <property name="metricsEnabled" value="true"/>
                    <!-- other properties -->
                </bean>
            </property>
            <property name="dataRegionConfigurations">
                <list>
                    <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                        <!-- Custom region name. -->
                        <property name="name" value="myDataRegion"/>
                        <!-- Enable metrics for this data region  -->
                        <property name="metricsEnabled" value="true"/>

                        <property name="persistenceEnabled" value="true"/>
                        <!-- other properties -->
                    </bean>
                </list>
            </property>
        </bean>
    </property>
</bean>
java
IgniteConfiguration cfg = new IgniteConfiguration();

DataStorageConfiguration storageCfg = new DataStorageConfiguration();

DataRegionConfiguration defaultRegion = new DataRegionConfiguration();
defaultRegion.setMetricsEnabled(true);

storageCfg.setDefaultDataRegionConfiguration(defaultRegion);

// Create a new data region.
DataRegionConfiguration regionCfg = new DataRegionConfiguration();

// Region name.
regionCfg.setName("myDataRegion");

// Enable metrics for this region.
regionCfg.setMetricsEnabled(true);

// Set the data region configuration.
storageCfg.setDataRegionConfigurations(regionCfg);

// Other properties

// Apply the new configuration.
cfg.setDataStorageConfiguration(storageCfg);

Ignite ignite = Ignition.start(cfg);
csharp
var cfg = new IgniteConfiguration
{
    DataStorageConfiguration = new DataStorageConfiguration
    {
        DefaultDataRegionConfiguration = new DataRegionConfiguration
        {
            Name = DataStorageConfiguration.DefaultDataRegionName,
            MetricsEnabled = true
        },
        DataRegionConfigurations = new[]
        {
            new DataRegionConfiguration
            {
                Name = "myDataRegion",
                MetricsEnabled = true
            }
        }
    }
};

var ignite = Ignition.Start(cfg);

数据区指标可以在运行时通过下面的JMX Bean启用/禁用:

数据区MBean

```
org.apache:group=DataRegionMetrics,name=<Data Region Name>
```

4.1.3.启用持久化相关指标

持久化相关的指标可以通过数据存储的配置启用/禁用:

xml
<bean class="org.apache.ignite.configuration.IgniteConfiguration" id="ignite.cfg">
    <property name="dataStorageConfiguration">
        <bean class="org.apache.ignite.configuration.DataStorageConfiguration">

          <!-- persistent storage metrics -->
            <property name="metricsEnabled" value="true"/>

            <property name="defaultDataRegionConfiguration">
                <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
                    <property name="persistenceEnabled" value="true"/>

                    <!-- enable mertrics for the default data region -->
                    <!--property name="metricsEnabled" value="true"/-->
                    <!-- other properties -->
                </bean>
            </property>
        </bean>
    </property>
</bean>
java
IgniteConfiguration cfg = new IgniteConfiguration();

DataStorageConfiguration storageCfg = new DataStorageConfiguration();
storageCfg.setMetricsEnabled(true);

// Apply the new configuration.
cfg.setDataStorageConfiguration(storageCfg);

Ignite ignite = Ignition.start(cfg);
csharp
var cfg = new IgniteConfiguration
{
    DataStorageConfiguration = new DataStorageConfiguration
    {
        MetricsEnabled = true
    }
};

var ignite = Ignition.Start(cfg);

也可以通过如下的MBean在运行时启用持久化相关的指标:

持久化存储MBean

```
org.apache:group="Persistent Store",name=DataStorageMetrics
```
|操作|描述|
|---|---|
|EnableMetrics|启用持久化数据存储指标|

4.2.JMX指标

4.2.1.概述

Ignite 2.8版本中引入了一个新的收集指标的机制,旨在替换下面的所有遗留的指标,具体请参见新指标系统

Ignite公开了大量可用于监控集群或应用的指标。可以使用JMX和监控工具(例如JConsole)通过JMX访问这些指标,也可以通过编程方式访问它们。

本章节会收集最有用的指标,并根据监控任务将它们分为各种常见类别。

4.2.2.为Ignite开启JMX

JMX默认是禁用的,可通过如下的环境变量启用JMX。

  • 对于control.sh,配置CONTROL_JVM_OPTS环境变量;
  • 对于ignite.sh,配置JVM_OPTS环境变量。

示例:

shell
JVM_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=${JMX_PORT} \
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

4.2.3.理解MBean的ObjectName

每个JMX MBean都有一个ObjectName。ObjectName用于标识bean,ObjectName由域和键属性列表组成,并且可以表示为字符串,如下所示:

domain: key1 = value1 , key2 = value2

所有Ignite指标都具有相同的域:org.apache.<classloaderId>classloaderId是可选的(如果配置IGNITE_MBEAN_APPEND_CLASS_LOADER_ID=false,则会忽略)。此外每个指标都有两个属性:groupname,例如:

org.apache:group=SPIs,name=TcpDiscoverySpi

该MBean提供了与节点发现有关的各种指标。

MBean的ObjectName可用于在UI工具(如JConsole)中标识bean。例如,JConsole以树状结构显示MBean,其中所有Bean首先按域分组,然后按group属性分组:

4.2.4.数据量监控

如果不使用原生持久化(即所有数据都保存在内存中),则需要监视内存使用情况。如果使用了原生持久化,则除了内存外,还应该监控磁盘上数据存储的大小。

加载到节点中的数据大小可在不同级别上聚合,可以监控以下内容:

  • 节点在磁盘或内存上保存的数据总大小。此数量是每个已配置的数据区(在最简单的情况下,仅默认数据区)的大小加上系统数据区的大小;
  • 该节点上某数据区的大小,数据区大小是所有缓存组的大小之和;
  • 该节点上某缓存/缓存组的大小,包括备份分区。

可以分别为每个级别启用/禁用这些指标,并通过下面列出的不同JMX Bean公开这些指标。

4.2.4.1.分配空间和数据实际大小

无法获取数据的确切大小(无论是在内存中还是在磁盘上),不过有两种估算方法。

可以获得用于存储数据的已分配空间大小(这里的“空间”指的是内存或磁盘上的空间,具体取决于是否使用原生持久化)。当存储空间已满并且需要添加更多条目时,将进一步分配空间。但是从缓存中删除条目时,不会释放空间。后续写入新数据时,该空间可以重用。因此当从缓存中删除条目时,分配的大小不会减小。分配的大小在数据存储、数据区和缓存组指标级别都有效,该指标称为TotalAllocatedSize

还可以通过将使用中的数据页数乘以填充因子来估算实际数据大小。填充因子是页面中数据大小与页面大小之比,是所有页面的平均值。正在使用的页面数和填充因子在数据区指标级别有效。

将所有数据区的估计大小加起来就可以知道节点上的估计数据总量。

4.2.4.2.监控内存使用量

可以通过以下MBean监控每个数据区的内存数据量:

MBean的ObjectName:

group=DataRegionMetrics,name=<Data Region name>
属性类型描述作用域
PagesFillFactorfloat页面中数据的平均大小与页面大小的比率。启用原生持久化后,此指标仅适用于持久化存储(即磁盘上的页面)。节点
TotalUsedPageslong当前正在使用的数据页数。启用原生持久化后,此指标仅适用于持久化存储(即磁盘上的页面)。节点
PhysicalMemoryPageslong内存中分配的页数。节点
PhysicalMemorySizelong内存中分配的空间大小(字节)。节点

如果有多个数据区,则将所有数据区的大小加起来就可以知道节点上数据的总大小。

4.2.4.3.监控存储大小

开启持久化存储后,会将所有的应用数据保存在磁盘上。每个节点在磁盘上持有的总数据量由持久化存储(应用数据)、WAL文件WAL存档文件组成。

持久化存储大小

要监控磁盘上的持久化存储的大小,可以使用下面的指标:

MBean的ObjectName:

group="Persistent Store",name=DataStorageMetrics
属性类型描述作用域
TotalAllocatedSizelong磁盘上为整个数据存储分配的空间大小(字节)。注意当禁用原生持久化时,此指标将显示内存中已分配空间的总大小。节点
WalTotalSizelongWAL文件的总大小(字节),包括WAL存档文件。节点
WalArchiveSegmentsint存档中的WAL段数量。节点
操作描述
enableMetrics在运行时启用与持久化存储有关的指标收集。
disableMetrics禁用指标收集。

数据区大小

Ignite会为每个数据区创建一个单独的JMX Bean,以公开有关该数据区的特定信息。数据区的指标收集默认是禁用的,可以在数据区配置中启用,也可以在运行时通过JMX启用(请参见下面的Bean操作)。

节点上数据区的大小包括该数据区中所有缓存拥有的所有分区(包括备份分区)的大小。

以下MBean中提供了数据区指标:

MBean的ObjectName:

group=DataRegionMetrics,name=<Data Region name>
属性类型描述作用域
TotalAllocatedSizelong分配给该数据区的空间大小(字节)。注意当禁用原生持久化时,此指标将显示内存中已分配空间的总大小。节点
PagesFillFactorfloat页面中的平均数据量与页面大小的比率。节点
TotalUsedPageslong当前正在使用的数据页数。节点
PhysicalMemoryPageslong内存中存储的该数据区中的数据页数。节点
PhysicalMemorySizelong内存中分配的空间大小(字节)。节点
操作描述
enableMetrics在运行时启用数据区的指标收集。
disableMetrics禁用指标收集。

缓存组大小

如果不使用缓存组,则每个缓存将属于其自己的组。每个缓存组都有一个单独的JMX Bean,Bean的名称与组的名称相对应。

MBean的ObjectName:

group="Cache groups",name=<Cache group name>
属性类型描述作用域
TotalAllocatedSizelong分配给该缓存组的空间大小(字节)。节点

4.2.5.检查点操作监控

检查点可能会拖慢集群的操作,因此可能需要监控每个检查点操作花费多少时间,以便可以调整影响检查点的属性。可能还需要监控磁盘性能,以查看速度下降是否是由外部原因引起的。

有关性能优化,请参见页面写入限流检查点缓冲区大小

MBean的ObjectName:

group="Persistent Store",name=DataStorageMetrics
属性类型描述作用域
DirtyPageslong内存中已更改但尚未同步到磁盘的页面数。这些将在下一个检查点期间写入磁盘。节点
LastCheckpointDurationlong最后一次检查点花费时间(毫秒)。节点
CheckpointBufferSizelong检查点缓冲区大小。全局

4.2.6.再平衡监控

再平衡是在集群节点之间移动分区以使数据始终平衡分布的过程,当新节点加入或现有节点离开集群时,将触发再平衡。

如果有多个缓存,则会按顺序平衡数据,再平衡过程的进度可以通过几个指标来监控。

MBean的ObjectName:

group=<cache name>,name=org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl
属性类型描述作用域
RebalancingStartTimelong该指标为缓存再平衡本地分区的开始时间(毫秒)。如果本地分区不参与再平衡,则该指标将返回0。节点
EstimatedRebalancingFinishTimelong再平衡过程预计完成时间。节点
KeysToRebalanceLeftlong待平衡的键数量,可根据该指标了解再平衡过程何时结束。节点

4.2.7.拓扑监控

拓扑是指集群中的节点集。有许多指标可以显示有关集群拓扑的信息。如果拓扑更改得太频繁或其大小与预期值不同,则可能要调查是否存在网络问题。

MBean的ObjectName:

group=Kernal,name=ClusterMetricsMXBeanImpl
属性类型描述作用域
TotalServerNodeslong集群中服务端节点数。全局
TotalClientNodeslong集群中客户端节点数。全局
TotalBaselineNodeslong基线拓扑中的注册节点数。当一个节点故障时,它在拓扑中仍是注册状态,用户需要手动对其进行远程管理。全局
ActiveBaselineNodeslong基线拓扑中的当前在线节点数。全局

MBean的ObjectName:

group=SPIs,name=TcpDiscoverySpi
属性类型描述作用域
CoordinatorString当前协调器节点的节点ID。全局
CoordinatorNodeFormattedString有关协调器节点的详细信息。全局

4.2.8.缓存监控

对于每个缓存,Ignite将创建两个JMX MBean,一个MBean显示有关缓存的集群范围信息,例如缓存中的条目总数。另一个MBean显示有关缓存的本地信息,例如位于本地节点上的缓存的条目数。

全局缓存MBean的ObjectName:

group=<Cache_Name>,name="org.apache.ignite.internal.processors.cache.CacheClusterMetricsMXBeanImpl"
属性类型描述作用域
CacheSizelong缓存的总数据条目数。全局

本地缓存MBean的ObjectName:

group=<Cache Name>,name="org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl"
属性类型描述作用域
CacheSizelong本地节点中该缓存的数据条目数。节点
4.2.8.1.索引创建和重建监控

要估算重建缓存索引所需的时间,可以使用下列的指标之一:

  1. IsIndexRebuildInProgress:当前索引是否正在创建或者重建;
  2. IndexBuildCountPartitionsLeft:索引重建的剩余分区数(按分区组);

注意,IndexBuildCountPartitionsLeft指标仅允许估计要重建的大约剩余索引数。要获得更准确的估计,需使用IndexRebuildKeyProcessed缓存指标:

  • org.apache.ignite.mxbean.CacheMetricsMXBean#isIndexRebuildInProgress,该指标可以知道某缓存的索引是否正在重建,注意目前只有本地的org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl#isIndexRebuildInProgress指标可用;
  • org.apache.ignite.mxbean.CacheMetricsMXBean#getIndexRebuildKeysProcessed,该指标可以知道重建索引已处理的键数量。如果正在重建过程中,它会给出当前重建索引已处理的键数量,否则会给出重建索引的键总数。每次重建开始之前会重置这些值。注意目前只有本地的org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl#getIndexRebuildKeysProcessed指标可用。

4.2.9.事务监控

注意,如果事务跨越多个节点(即如果由于事务执行而更改的键位于多个节点上),则每个节点上的计数器都会增加。例如,“TransactionsCommittedNumber”计数器将在存储受事务影响的键的每个节点上增加。

MBean的ObjectName:

group=TransactionMetrics,name=TransactionMetricsMxBeanImpl
属性类型描述作用域
LockedKeysNumberlong该节点锁定的键数量。节点
TransactionsCommittedNumberlong该节点已提交的事务数。节点
TransactionsRolledBackNumberlong已回滚事务数。节点
OwnerTransactionsNumberlong该节点发起事务数。节点
TransactionsHoldingLockNumberlong节点上至少一个键上有锁的打开事务数。节点

4.2.10.客户端连接监控

与JDBC/ODBC/瘦客户端连接有关的指标。

MBean的ObjectName:

group=Clients,name=ClientListenerProcessor
属性类型描述作用域
Connectionsjava.util.List<String>字符串列表,每个字符串都包含了和连接有关的信息。节点
操作描述
dropConnection(id)断开指定的连接。
dropAllConnections断开所有客户端连接。

4.2.11.消息队列监控

当线程池队列不断增长时,意味着节点无法跟上负载,或者在处理队列中的消息时出错。队列大小的持续增长会导致OOM错误。

通信消息队列

出站通信消息队列包含正在等待发送到其他节点的通信消息。如果大小不断增加,则说明存在问题。

MBean的ObjectName:

group=SPIs,name=TcpCommunicationSpi
属性类型描述作用域
OutboundMessagesQueueSizeint出站通信消息队列大小。节点

发现消息队列

发现消息队列。

MBean的ObjectName:

group=SPIs,name=TcpDiscoverySpi
属性类型描述作用域
MessageWorkerQueueSizeint等待发送到其他节点的发现消息队列的大小。节点
AvgMessageProcessingTimelong平均消息处理时间。节点

5.新指标系统

5.1.介绍

5.1.1.概述

Ignite 2.8引入了一种用于收集指标的新机制,该机制旨在取代旧版指标系统。本章节会介绍新系统以及如何使用它来监控集群。

下面会介绍Ignite中新指标系统的基本概念。首先,有不同的指标,每个指标都有一个名称和一个返回值。返回值可以是一个简单的值,比如Stringlongdouble,也可以表示为一个Java对象。一些指标表示直方图

然后,有多种导出指标的方法,称为导出器。换句话说,导出器是访问指标的不同方法,每个导出器都可以访问所有的可用指标。

Ignite包括以下导出器:

  • JMX;
  • SQL视图;
  • 日志文件;
  • OpenCensus。

通过实现MetricExporterSpi接口可以创建自定义的导出器。

5.1.2.指标注册表

指标被分为几类(称为注册表)。每个注册表都有一个名称。注册表中某个指标的全名由注册表名称,后跟一个点和指标名称组成<register_name>.<metric_name>。例如,数据存储指标的注册表为io.datastorage。返回存储大小的指标为io.datastorage.StorageSize

所有的注册表及其包含的指标的列表在这里

5.1.3.指标导出器

如果要启用指标,需要在节点配置中配置一个或多个指标导出器。这是节点级的配置,意味着可以仅在某个节点上启用指标。

xml
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="metricExporterSpi">
        <list>
            <bean class="org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi"/>
            <bean class="org.apache.ignite.spi.metric.log.LogExporterSpi"/>
            <bean class="org.apache.ignite.spi.metric.opencensus.OpenCensusMetricExporterSpi"/>
        </list>
    </property>
</bean>
java
IgniteConfiguration cfg = new IgniteConfiguration();

cfg.setMetricExporterSpi(new JmxMetricExporterSpi());

Ignite ignite = Ignition.start(cfg);

下面的章节会介绍Ignite中默认可用的导出器。

JMX

org.apache.ignite.spi.metric.jmx.JmxMetricExporterSpi会通过JMX Beans暴露指标信息。

java
IgniteConfiguration cfg = new IgniteConfiguration();

JmxMetricExporterSpi jmxExporter = new JmxMetricExporterSpi();

//export cache metrics only
jmxExporter.setExportFilter(mreg -> mreg.name().startsWith("cache."));

cfg.setMetricExporterSpi(jmxExporter);

SQL视图

SqlViewMetricExporterSpi默认是启用的,其会通过SYS.METRICS视图暴露指标信息,每个指标会显示为一行记录,可以使用任何支持SQL的工具查看指标。

> select name, value from SYS.METRICS where name LIKE 'cache.myCache.%';
+-----------------------------------+--------------------------------+
|                NAME               |             VALUE              |
+-----------------------------------+--------------------------------+
| cache.myCache.CacheTxRollbacks    | 0                              |
| cache.myCache.OffHeapRemovals     | 0                              |
| cache.myCache.QueryCompleted      | 0                              |
| cache.myCache.QueryFailed         | 0                              |
| cache.myCache.EstimatedRebalancingKeys | 0                         |
| cache.myCache.CacheEvictions      | 0                              |
| cache.myCache.CommitTime          | [J@2eb66498                    |
....

Log

org.apache.ignite.spi.metric.log.LogExporterSpi在INFO级别以固定间隔(默认为1分钟)将指标输出到日志文件。

xml
<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="metricExporterSpi">
        <list>
            <bean class="org.apache.ignite.spi.metric.log.LogExporterSpi"/>
        </list>
    </property>
</bean>
java
IgniteConfiguration cfg = new IgniteConfiguration();

LogExporterSpi logExporter = new LogExporterSpi();
logExporter.setPeriod(600_000);

//export cache metrics only
logExporter.setExportFilter(mreg -> mreg.name().startsWith("cache."));

cfg.setMetricExporterSpi(logExporter);

Ignite ignite = Ignition.start(cfg);

OpenCensus

org.apache.ignite.spi.metric.opencensus.OpenCensusMetricExporterSpi实现了与OpenCensus库的集成。

OpenCensus导出器使用方法:

配置参数:

  • filter:谓词过滤指标;
  • period:导出时间间隔;
  • sendInstanceName:如果启用,则将Ignite实例名的标签添加到每个指标;
  • sendNodeId:如果启用,则将具有Ignite节点ID的标签添加到每个指标;
  • sendConsistentId:如果启用,则将具有Ignite节点一致性ID的标签添加到每个指标。

5.1.4.直方图

表示直方图的指标仅在JMX导出器中可用。直方图指标作为一组值导出,其中每个值对应于某个存储桶,可通过单独的JMX Bean属性使用。直方图指标的属性名称具有以下格式:

{metric_name}_{low_bound}_{high_bound}

这里:

  • {metric_name}:指标名称;
  • {low_bound}:边界的起点,0是第一个界限;
  • {high_bound}:界限的终点,inf是最后的界限;

范围为[10,100]时的指标名称示例:

  • histogram_0_10:小于10;
  • histogram_10_100:10至100;
  • histogram_100_inf:超过100。

5.2.指标

本章节介绍指标注册表(分类)以及每个注册表中的可用指标。

5.2.1.系统

注册表名:sys

名称类型描述
CpuLoaddoubleCPU负载
CurrentThreadCpuTimelongThreadMXBean#getCurrentThreadCpuTime()
CurrentThreadUserTimelongThreadMXBean#getCurrentThreadUserTime()
DaemonThreadCountIntegerThreadMXBean#getDaemonThreadCount()
GcCpuLoaddoubleGC的CPU负载
PeakThreadCountIntegerThreadMXBean#getPeakThreadCount()
SystemLoadAveragejava.lang.DoubleOperatingSystemMXBean#getSystemLoadAverage()
ThreadCountIntegerThreadMXBean#getThreadCount()
TotalExecutedTaskslong已执行任务总数
TotalStartedThreadCountlongThreadMXBean#getTotalStartedThreadCount()
UpTimelongRuntimeMxBean#getUptime()
memory.heap.committedlongMemoryUsage#getHeapMemoryUsage()#getCommitted()
memory.heap.initlongMemoryUsage#getHeapMemoryUsage()#getInit()
memory.heap.usedlongMemoryUsage#getHeapMemoryUsage()#getUsed()
memory.nonheap.committedlongMemoryUsage#getNonHeapMemoryUsage()#getCommitted()
memory.nonheap.initlongMemoryUsage#getNonHeapMemoryUsage()#getInit()
memory.nonheap.maxlongMemoryUsage#getNonHeapMemoryUsage()#getMax()
memory.nonheap.usedlongMemoryUsage#getNonHeapMemoryUsage()#getUsed()

5.2.2.缓存

注册表名:cache.{cache_name}.{near}

名称类型描述
CacheEvictionslong缓存的退出的总数
CacheGetslong缓存的读取总数
CacheHitslong缓存的命中总数
CacheMisseslong缓存的未命中总数
CachePutslong缓存的写入总数
CacheRemovalslong缓存的删除总数
CacheTxCommitslong缓存的事务提交总数
CacheTxRollbackslong缓存的事务回滚总数
CacheSizelong本地缓存大小
CommitTimehistogram提交时间(纳秒)
CommitTimeTotallong提交时间总数(纳秒)
EntryProcessorHitslong缓存中存在的键调用总数
EntryProcessorInvokeTimeNanoslong缓存调用总数(纳秒)
EntryProcessorMaxInvocationTimelong到目前为止的最大缓存调用执行时间
EntryProcessorMinInvocationTimelong到目前为止的最小缓存调用执行时间
EntryProcessorMisseslong缓存中不存在的键调用总数
EntryProcessorPutslong触发更新的缓存调用总数
EntryProcessorReadOnlyInvocationslong不触发更新的缓存调用总数
EntryProcessorRemovalslong触发删除的缓存调用总数
EstimatedRebalancingKeyslong预估的再平衡键数量
GetTimehistogram读取时间(纳秒)
GetTimeTotallong缓存读取总时间(纳秒)
HeapEntriesCountlong堆内缓存数
IndexRebuildKeysProcessedlong索引重建期间已处理的键数量
IsIndexRebuildInProgressboolean如果索引在创建或重建过程中则为true
OffHeapBackupEntriesCountlong堆外备份条目总数
OffHeapEntriesCountlong堆外条目总数
OffHeapEvictionslong堆外内存退出总量
OffHeapGetslong堆外内存读取请求总数
OffHeapHitslong堆外内存读取请求命中总数
OffHeapMisseslong堆外内存读取请求未命中总数
OffHeapPrimaryEntriesCountlong堆外主条目总数
OffHeapPutslong堆外内存写入请求总数
OffHeapRemovalslong堆外内存删除总数
PutTimehistogram写入时间(纳秒)
PutTimeTotallong缓存写入总时间(纳秒)
QueryCompletedlong查询完成数
QueryExecutedlong查询执行数
QueryFailedlong查询失败数
QueryMaximumTimelong查询最长执行时间
QueryMinimalTimelong查询最短执行时间
QuerySumTimelong查询总时间
RebalanceClearingPartitionsLeftlong再平衡实际开始前需要清理的分区数
RebalanceStartTimelong再平衡开始时间
RebalancedKeyslong已再平衡的键数量
RebalancingBytesRatelong预估的再平衡速度(字节)
RebalancingKeysRatelong预估的再平衡速度(键数量)
RemoveTimehistogram删除时间(纳秒)
RemoveTimeTotallong缓存删除总时间(纳秒)
RollbackTimehistogram回滚时间(纳秒)
RollbackTimeTotallong回滚总时间(纳秒)
TotalRebalancedByteslong已再平衡字节数

5.2.3.缓存组

注册表名:cacheGroups.{group_name}

名称类型描述
AffinityPartitionsAssignmentMapjava.util.Collections$EmptyMap映射分区分配哈希表
Cachesjava.util.ArrayList缓存列表
IndexBuildCountPartitionsLeftlong完成索引创建或重建所需处理的分区数
LocalNodeMovingPartitionsCountInteger该缓存组在本地节点上状态为MOVING的分区数
LocalNodeOwningPartitionsCountInteger该缓存组在本地节点上状态为OWNING的分区数
LocalNodeRentingEntriesCountlong该缓存组在本地节点上的状态为RENTING的分区中要退出的数据量
LocalNodeRentingPartitionsCountInteger该缓存组在本地节点上的状态为RENTING的分区数
MaximumNumberOfPartitionCopiesInteger该缓存组中的所有分区的最大分区副本数
MinimumNumberOfPartitionCopiesInteger该缓存组中的所有分区的最小分区副本数
MovingPartitionsAllocationMapjava.util.Collections$EmptyMap集群中状态为MOVING的分区的分配哈希表
OwningPartitionsAllocationMapjava.util.Collections$EmptyMap集群中状态为OWNING的分区的分配哈希表
PartitionIdsjava.util.ArrayList本地分区ID列表
SparseStorageSizelong组分配的存储空间,针对可能的稀疏性进行了调整(字节)
StorageSizelong为缓存组分配的存储空间(字节)
TotalAllocatedPageslong为缓存组分配的页面总数
TotalAllocatedSizelong为缓存组分配的内存总大小(字节)
ReencryptionBytesLeftlong为重新加密保留的字节数
ReencryptionFinishedboolean重新加密是否完成标志

5.2.4.事务

注册表名:tx

名称类型描述
AllOwnerTransactionsjava.util.HashMap本地节点持有的事务哈希表
LockedKeysNumberlong当前节点锁定的键数量
OwnerTransactionsNumberlong当前节点发起的正在运行的事务数
TransactionsHoldingLockNumberlong至少锁定一个键的正在运行的事务数
LastCommitTimelong上次提交时间
nodeSystemTimeHistogramhistogram以直方图表示的节点事务系统时间
nodeUserTimeHistogramhistogram以直方图表示的节点事务用户时间
LastRollbackTimelong上次回滚时间
totalNodeSystemTimelong节点的事务系统总时间
totalNodeUserTimelong节点的事务用户总时间
txCommitsInteger提交事务数
txRollbacksInteger回滚事务数

5.2.5.分区映射交换

注册表名:pme

名称类型描述
CacheOperationsBlockedDurationlong当前的PME过程缓存操作阻塞时间(毫秒)
CacheOperationsBlockedDurationHistogramhistogram当前的PME过程缓存操作阻塞直方图(毫秒)
Durationlong当前的PME持续时间(毫秒)
DurationHistogramhistogram当前的PME持续直方图(毫秒)

5.2.6.计算作业

注册表名:compute.jobs

名称类型描述
compute.jobs.Activelong当前正在执行的活动作业数
compute.jobs.Canceledlong仍在运行的已取消作业数
compute.jobs.ExecutionTimelong作业的总执行时间
compute.jobs.Finishedlong已完成作业数
compute.jobs.Rejectedlong在最近的冲突解决操作之后,拒绝的作业数
compute.jobs.Startedlong已开始作业数
compute.jobs.Waitinglong当前等待执行的排队作业数
compute.jobs.WaitingTimelong作业在等待队列上花费的总时间

5.2.7.线程池

注册表名:threadPools.{thread_pool_name}

名称类型描述
ActiveCountlong正在执行任务的线程的近似数量
CompletedTaskCountlong已完成执行的任务近似总数
CorePoolSizelong核心线程数
KeepAliveTimelong线程保持活动时间,即超过核心线程池大小的线程在被终止之前可能保持空闲的时间
LargestPoolSizelong线程池中的并发最大线程数
MaximumPoolSizelong最大允许线程数
PoolSizelong线程池当前线程数
QueueSizelong当前执行队列大小
RejectedExecutionHandlerClassString当前拒绝处理器类名
Shutdownboolean如果该执行器已关闭则为true
TaskCountlong已计划执行的任务近似总数
Terminatedboolean如果关闭后所有任务都已完成则为true
Terminatinglong如果终止但尚未终止则为true
ThreadFactoryClassString用于创建新线程的线程工厂类名

5.2.8.缓存组IO

注册表名:io.statistics.cacheGroups.{group_name}

名称类型描述
LOGICAL_READSlong逻辑读数量
PHYSICAL_READSlong物理读数量
grpIdInteger组ID
nameString索引名
startTimelong统计数据收集开始时间

5.2.9.有序索引

注册表名:io.statistics.sortedIndexes.{cache_name}.{index_name}

名称类型描述
LOGICAL_READS_INNERlong内部树节点的逻辑读取数
LOGICAL_READS_LEAFlong末端树节点的逻辑读取数
PHYSICAL_READS_INNERlong内部树节点的物理读取数
PHYSICAL_READS_LEAFlong末端树节点的物理读取数
indexNameString索引名
nameString缓存名
startTimelong统计数据收集开始时间

5.2.10.哈希索引

注册表名:io.statistics.hashIndexes.{cache_name}.{index_name}

名称类型描述
LOGICAL_READS_INNERlong内部树节点的逻辑读取数
LOGICAL_READS_LEAFlong末端树节点的逻辑读取数
PHYSICAL_READS_INNERlong内部树节点的物理读取数
PHYSICAL_READS_LEAFlong末端树节点的物理读取数
indexNameString索引名
nameString缓存名
startTimelong统计数据收集开始时间

5.2.11.通信IO

注册表名:io.communication

名称类型描述
OutboundMessagesQueueSizeInteger出站消息队列大小
SentMessagesCountInteger发送消息数量
SentBytesCountlong发送字节数
ReceivedBytesCountlong接收字节数
ReceivedMessagesCountInteger接收消息数量

5.2.12.数据区IO

注册表名:io.dataregion.{data_region_name}

名称类型描述
AllocationRatelongrateTimeInternal期间的平均分配率(每秒页面数)
CheckpointBufferSizelong检查点缓冲区大小(字节)
DirtyPageslong内存中还没有同步到持久化存储的页面数
EmptyDataPageslong计算数据区中的空页面数,它只计算可重用的完全空闲的页面(比如包含在空闲列表的可重用桶中的页面)
EvictionRatelong退出率(每秒页面数)
LargeEntriesPagesCountlong完全被超过页面大小的大条目占用的页面数
OffHeapSizelong堆外内存大小(字节)
OffheapUsedSizelong堆外内存已使用大小(字节)
PagesFillFactordouble已用空间的百分比
PagesReadlong上次重启以来的页面读取数
PagesReplaceAgelong内存中的页面被持久化存储中的页面替换的平均期限(毫秒)
PagesReplaceRatelong内存中的页面被持久化存储中的页面替换的速率(每秒页面数)
PagesReplacedlong从上次重启以来的页面替换数
PagesWrittenlong从上次重启以来的页面写入数
PhysicalMemoryPageslong物理内存中驻留的页面数
PhysicalMemorySizelong加载到内存中的页面总大小(字节)
TotalAllocatedPageslong分配的页面总数
TotalAllocatedSizelong数据区中分配的页面总大小(字节)
TotalThrottlingTimelong限流线程总时间(毫秒),Ignite会限制在检查点执行过程中生成脏页面的线程
UsedCheckpointBufferSizelong已使用的检查点缓冲区大小(字节)

5.2.13.数据存储

注册表名:io.datastorage

名称类型描述
CheckpointBeforeLockHistogramhistogram执行写锁定持续时间(毫秒)之前的检查点操作的直方图
CheckpointFsyncHistogramhistogram检查点全同步持续时间(毫秒)的直方图
CheckpointHistogramhistogram检查点持续时间(毫秒)的直方图
CheckpointListenersExecuteHistogramhistogram写锁定持续时间(毫秒)下检查点执行监听器的直方图
CheckpointLockHoldHistogramhistogram检查点锁定保持持续时间(毫秒)的直方图
CheckpointLockWaitHistogramhistogram检查点锁定等待持续时间(毫秒)的直方图
CheckpointMarkHistogramhistogram检查点标记持续时间(毫秒)的直方图
CheckpointPagesWriteHistogramhistogram检查点页面写入持续时间(毫秒)的直方图
CheckpointSplitAndSortPagesHistogramhistogram分割和排序检查点页面持续时间(毫秒)的直方图
CheckpointTotalTimelong检查点总时间
LastCheckpointCopiedOnWritePagesNumberlong上次检查点过程复制到临时检查点缓冲区的页面数
LastCheckpointDataPagesNumberlong上次检查点过程的数据页面写入数
LastCheckpointDurationlong上次检查点过程的持续时间(毫秒)
LastCheckpointFsyncDurationlong上次检查点过程的同步阶段的持续时间(毫秒)
LastCheckpointListenersExecuteDurationlong写锁定下检查点执行监听器的持续时间(毫秒)
LastCheckpointLockHoldDurationlong检查点锁定保持的持续时间(毫秒)
LastCheckpointLockWaitDurationlong上次检查点过程的锁等待时间(毫秒)
LastCheckpointMarkDurationlong上次检查点过程的标记时间(毫秒)
LastCheckpointPagesWriteDurationlong上次检查点过程的页面写入时间(毫秒)
LastCheckpointTotalPagesNumberlong上次检查点过程的页面写入总数
LastCheckpointSplitAndSortPagesDurationlong拆分和排序上次检查点的检查点页面的持续时间(毫秒)
LastCheckpointStartlong最后一个检查点的开始时间戳
LastCheckpointWalRecordFsyncDurationlong在上次检查点的开始处记录CheckpointRecord后WAL全同步的持续时间(毫秒)
LastCheckpointWriteEntryDurationlong上次检查点中条目缓冲区写入文件的持续时间(毫秒)
SparseStorageSizelong为可能的稀疏性而调整的已分配存储空间(字节)
StorageSizelong分配的存储空间(字节)
WalArchiveSegmentsInteger当前WAL存档中的WAL段数量
WalBuffPollSpinsRatelongWAL缓冲区轮询在上一个时间间隔内的自旋数
WalFsyncTimeDurationlongFSYNC模式持续时间
WalFsyncTimeNumlongFSYNC模式总数量
WalLastRollOverTimelong上一次WAL段翻转时间
WalLoggingRatelong上一个时间间隔内WAL记录的每秒平均写入量
WalTotalSizelongWAL文件存储总大小(字节)
WalWritingRatelong上一个时间间隔内WAL的每秒平均写入字节数

5.2.14.集群

注册表名:cluster

名称类型描述
ActiveBaselineNodesInteger在线基线节点总数
Rebalancedboolean如果集群已完全达到平衡状态,则为True。注意无论实际分区状态如何,非激活集群的此度量值始终为False
TotalBaselineNodesInteger基线节点总数
TotalClientNodesInteger客户端节点总数
TotalServerNodesInteger服务端节点总数

6.系统视图

警告

系统视图是一个试验性特性,未来的版本可能会发生变更。

Ignite提供了许多内置SQL视图,他们包含有关集群节点和节点指标的信息。这些视图在SYS模式中。有关如何访问非默认模式的信息,请参见理解模式章节的内容。

限制

  1. 无法在SYS模式中创建对象;
  2. SYS模式中的系统视图无法与用户表相关联。

6.1.查询系统视图

使用SQLLine工具可以查询系统视图。

shell
./sqlline.sh -u jdbc:ignite:thin://127.0.0.1/SYS

如果节点运行在远程服务器上,需要将127.0.0.1改成实际的服务器地址。

执行一个查询:

sql
-- get the list of nodes
select * from NODES;

-- view the CPU load as a percentage for a specific node
select CUR_CPU_LOAD * 100 from NODE_METRICS where NODE_ID = 'a1b77663-b37f-4ddf-87a6-1e2d684f3bae'

使用Java瘦客户端的同一个示例:

java
ClientConfiguration cfg = new ClientConfiguration().setAddresses("127.0.0.1:10800");

try (IgniteClient igniteClient = Ignition.startClient(cfg)) {

    // getting the id of the first node
    UUID nodeId = (UUID) igniteClient.query(new SqlFieldsQuery("SELECT * from NODES").setSchema("IGNITE"))
    .getAll().iterator().next().get(0);

    double cpu_load = (Double) igniteClient
    .query(new SqlFieldsQuery("select CUR_CPU_LOAD * 100 from NODE_METRICS where NODE_ID = ? ")
    .setSchema("IGNITE").setArgs(nodeId.toString()))
    .getAll().iterator().next().get(0);

    System.out.println("node's cpu load = " + cpu_load);

} catch (ClientException e) {
    System.err.println(e.getMessage());
} catch (Exception e) {
    System.err.format("Unexpected failure: %s\n", e);
}

6.2.CACHES

列名类型描述
CACHE_NAMEString缓存名
CACHE_IDint缓存ID
CACHE_TYPEString缓存类型
CACHE_MODEString缓存模式
ATOMICITY_MODEString原子化模式
CACHE_GROUP_NAMEString缓存组名
AFFINITYString关联函数的toString表示
AFFINITY_MAPPERString关联映射器的toString表示
BACKUPSint备份数
CACHE_GROUP_IDint缓存组ID
CACHE_LOADER_FACTORYString缓存加载器工厂的toString表示
CACHE_STORE_FACTORYString缓存存储器工厂的toString表示
CACHE_WRITER_FACTORYString缓存写入器工厂的toString表示
DATA_REGION_NAMEString数据区名
DEFAULT_LOCK_TIMEOUTlong锁超时(毫秒)
EVICTION_FILTERString退出过滤器的toString表示
EVICTION_POLICY_FACTORYString退出策略工厂的toString表示
EXPIRY_POLICY_FACTORYString过期策略工厂的toString表示
INTERCEPTORString拦截器的toString表示
IS_COPY_ON_READboolean缓存值副本是否保存在堆内的标志
IS_EAGER_TTLboolean是否立即从缓存中删除过期数据的标志
IS_ENCRYPTION_ENABLEDboolean缓存数据开启加密则为true
IS_EVENTS_DISABLEDboolean缓存事件禁用则为true
IS_INVALIDATEboolean如果值在近缓存中提交时无效(为空),则为true
IS_LOAD_PREVIOUS_VALUEboolean如果值在缓存中不存在时应该从存储中加载,则为true
IS_MANAGEMENT_ENABLEDboolean
IS_NEAR_CACHE_ENABLEDboolean开启近缓存则为true
IS_ONHEAP_CACHE_ENABLEDboolean开启堆内缓存则为true
IS_READ_FROM_BACKUPboolean如果开启从备份读则为true
IS_READ_THROUGHboolean如果开启通读则为true
IS_SQL_ESCAPE_ALLboolean如果所有的表名和字段名都用双引号转义则为true
IS_SQL_ONHEAP_CACHE_ENABLEDboolean如果堆内缓存SQL开启则为true,开启时,查询引擎可以访问缓存的SQL数据,当相关的缓存数据发生变更或者退出时,这些数据也会失效退出
IS_STATISTICS_ENABLEDboolean
IS_STORE_KEEP_BINARYboolean缓存存储实现处理二进制对象而不是Java对象的标志
IS_WRITE_BEHIND_ENABLEDboolean缓存存储开启后写模式标志
IS_WRITE_THROUGHboolean如果开启通写则为true
MAX_CONCURRENT_ASYNC_OPERATIONSint允许的最大并发异步操作数,如果为0,则不受限制
MAX_QUERY_ITERATORS_COUNTint可以存储的查询迭代器的最大值,当每页数据按需发给用户端时,存储迭代器用于支持查询分页
NEAR_CACHE_EVICTION_POLICY_FACTORYString近缓存退出策略工厂的toString表示
NEAR_CACHE_START_SIZEint启动后将用于预创建内部哈希表的近缓存初始缓存大小
NODE_FILTERString节点过滤器NodeFilter实现的toString表示
PARTITION_LOSS_POLICYString分区丢失策略的toString表示
QUERY_DETAIL_METRICS_SIZEint用于监控目的在内存中存储的查询详细指标的大小,如果为0则不会收集历史记录
QUERY_PARALLELISMint单节点查询并行度的查询执行引擎提示
REBALANCE_BATCH_SIZEint单次再平衡消息大小(字节)
REBALANCE_BATCHES_PREFETCH_COUNTint再平衡开始时节点生成的批次数
REBALANCE_DELAYlong再平衡延迟时间(毫秒)
REBALANCE_MODEString再平衡模式
REBALANCE_ORDERint再平衡顺序
REBALANCE_THROTTLElong为了避免CPU和网络的过载,再平衡消息之间的等待时间(毫秒)
REBALANCE_TIMEOUTlong再平衡超时(毫米)
SQL_INDEX_MAX_INLINE_SIZEint索引内联大小(字节)
SQL_ONHEAP_CACHE_MAX_SIZEintSQL堆内缓存最大值,以行数计算,当到达最大值时最早的数据会被退出
SQL_SCHEMAString模式名
TOPOLOGY_VALIDATORString拓扑验证器的toString表示
WRITE_BEHIND_BATCH_SIZEint后写缓存的缓存操作批次大小
WRITE_BEHIND_COALESCINGboolean后写缓存存储操作的写合并标志。将具有相同键的存储操作(get或remove)组合或合并为单个操作,从而减少对底层缓存存储的压力
WRITE_BEHIND_FLUSH_FREQUENCYlong后写缓存将数据刷新到底层存储的频率(毫秒)
WRITE_BEHIND_FLUSH_SIZEint后写缓存刷新数据大小,如果缓存数据量达到该值,所有的后写缓存数据都会刷新到底层存储,然后后写缓存会被清空
WRITE_BEHIND_FLUSH_THREAD_COUNTint执行后写缓存刷新的线程数
WRITE_SYNCHRONIZATION_MODEString写同步模式

6.3.CACHE_GROUPS

列名数据类型描述
CACHE_GROUP_NAMEString缓存组名
CACHE_COUNTint缓存组中的缓存数
DATA_REGION_NAMEString存储缓存组中数据的数据区
CACHE_MODEString默认缓存模式
ATOMICITY_MODEString默认原子化模式
AFFINITYString关联函数的toString表示
BACKUPSint备份数
CACHE_GROUP_IDint缓存组ID
IS_SHAREDboolean缓存组为共享模式则为true
NODE_FILTERString节点过滤器NodeFilter的toString表示
PARTITION_LOSS_POLICYString分区丢失策略的toString表示
PARTITIONS_COUNTint分区数
REBALANCE_DELAYlong再平衡延迟时间(毫秒)
REBALANCE_MODEString再平衡模式
REBALANCE_ORDERint再平衡组顺序
TOPOLOGY_VALIDATORString拓扑验证器的toString表示

6.4.TASKS

列名数据类型描述
AFFINITY_CACHE_NAMEString映射缓存名
AFFINITY_PARTITION_IDint映射分区ID
END_TIMElong结束时间
EXEC_NAMEString执行任务的线程池名
INTERNALboolean如果是内部任务则为true
JOB_IDUUID计算作业ID
START_TIMElong启动时间
TASK_CLASS_NAMEString任务类名
TASK_NAMEString任务名
TASK_NODE_IDUUID发起任务的节点ID
USER_VERSIONString任务版本

6.5.JOBS

列名数据类型描述
IDUUID作业ID
SESSION_IDUUID作业的会话ID,注意,对于作业所属的任务,SESSION_ID等于TASKS.SESSION_ID
ORIGIN_NODE_IDUUID发起作业的节点ID
TASK_NAMEString任务名
TASK_CLASSNAMEString任务类名
AFFINITY_CACHE_IDSString如果使用IgniteCompute.affinity...方法执行作业,则为一个或多个缓存的ID,如果使用的IgniteCompute API未关联某个缓存,则为空
AFFINITY_PARTITION_IDint如果使用IgniteCompute.affinity...方法执行作业,则为一个或多个分区的ID,如果使用的IgniteCompute API未关联某分区,则为空
CREATE_TIMElong作业创建时间
START_TIMElong作业开始时间
FINISH_TIMElong作业完成时间
EXECUTOR_NAMEString任务执行器名
IS_FINISHINGboolean作业已完成则为true
IS_INTERNALboolean如果为内部作业则为true
IS_STARTEDboolean如果作业已启动则为true
IS_TIMEDOUTboolean如果作业在完成之前超时则为true
STATEString可能值:
ACTIVE:作业正在执行;
PASSIVE:将作业添加到执行队列;
CANCELED:作业被取消

6.6.SERVICES

列名数据类型描述
SERVICE_IDUUID服务ID
NAMEString服务名
SERVICE_CLASSString服务类名
CACHE_NAMEString缓存名
ORIGIN_NODE_IDUUID发起方节点ID
TOTAL_COUNTint服务实例总数
MAX_PER_NODE_COUNTint每节点最大服务数
AFFINITY_KEYString服务的关联键值
NODE_FILTERString节点过滤器NodeFilter的toString表示
STATICALLY_CONFIGUREDboolean服务配置为静态则为true

6.7.TRANSACTIONS

列名数据类型描述
ORIGINATING_NODE_IDUUID
STATEString
XIDUUID
LABELString
START_TIMElong
ISOLATIONString
CONCURRENCYString
KEYS_COUNTint
CACHE_IDSString
COLOCATEDboolean
DHTboolean
DURATIONlong
IMPLICITboolean
IMPLICIT_SINGLEboolean
INTERNALboolean
LOCALboolean
LOCAL_NODE_IDUUID
NEARboolean
ONE_PHASE_COMMITboolean
OTHER_NODE_IDUUID
SUBJECT_IDUUID
SYSTEMboolean
THREAD_IDlong
TIMEOUTlong
TOP_VERString

6.8.NODES

列名数据类型描述
NODE_IDUUID节点ID
CONSISTENT_IDString节点的一致性ID
VERSIONString节点的版本
IS_CLIENTboolean节点是否为客户端节点
IS_DAEMONboolean节点是否为守护节点
NODE_ORDERlong节点在拓扑中的顺序
ADDRESSESString节点的地址
HOSTNAMESString节点的主机名
IS_LOCALboolean节点是否为本地节点

6.9.NODE_ATTRIBUTES

列名数据类型描述
NODE_IDUUID节点ID
NAMEString属性名
VALUEString属性值

6.10.BASELINE_NODES

列名数据类型描述
CONSISTENT_IDString节点一致性ID
ONLINEboolean节点的运行状态

6.11.CLIENT_CONNECTIONS

列名数据类型描述
CONNECTION_IDlong连接ID
LOCAL_ADDRESSIP地址本地节点的IP地址
REMOTE_ADDRESSIP地址远程节点的IP地址
TYPEString连接类型
USERString用户名
VERSIONString协议版本

6.12.STRIPED_THREADPOOL_QUEUE

列名数据类型描述
STRIPE_INDEXint平行线程的索引值
DESCRIPTIONString任务的toString表示
THREAD_NAMEString平行线程名
TASK_NAMEString任务类名

6.13.DATASTREAM_THREADPOOL_QUEUE

列名数据类型描述
STRIPE_INDEXint平行线程索引值
DESCRIPTIONString任务的toString表示
THREAD_NAMEString平行线程名
TASK_NAMEString任务类名

6.14.SCAN_QUERIES

列名数据类型描述
ORIGIN_NODE_IDUUID发起查询的节点ID
QUERY_IDlong查询ID
CACHE_NAMEString缓存名
CACHE_IDint缓存ID
CACHE_GROUP_IDint缓存组ID
CACHE_GROUP_NAMEString缓存组名
START_TIMElong查询开始时间
DURATIONlong查询期限
CANCELEDboolean如果取消了则为true
FILTERString过滤器的toString表示
KEEP_BINARYboolean如果开启了keepBinary则为true
LOCALboolean如果仅为本地查询则为true
PAGE_SIZEint页面大小
PARTITIONint查询分区ID
SUBJECT_IDUUID发起查询的用户ID
TASK_NAMEString任务名
TOPOLOGYString拓扑版本
TRANSFORMERString转换器的toString表示

6.15.CONTINUOUS_QUERIES

列名数据类型描述
CACHE_NAMEString缓存名
LOCAL_LISTENERString本地监听器的toString表示
REMOTE_FILTERString远程过滤器的toString表示
REMOTE_TRANSFORMERString远程转换器的toString表示
LOCAL_TRANSFORMED_LISTENERString本地转换监听器的toString表示
LAST_SEND_TIMElong事件批次上次发给持续查询发起节点的时间
AUTO_UNSUBSCRIBEboolean当节点断开或发起节点离开时,如果持续查询应该停止,则为true
BUFFER_SIZEint事件批次缓冲区大小
DELAYED_REGISTERboolean如果在相应缓存启动时就启动持续查询,则为true
INTERVALlong通知间隔时间
IS_EVENTSboolean如果用于订阅远程事件则为true
IS_MESSAGINGboolean如果用于订阅消息则为true
IS_QUERYboolean如果用户启动了持续查询则为true
KEEP_BINARYboolean如果开启了keepBinary则为true
NODE_IDUUID发起节点ID
NOTIFY_EXISTINGboolean如果监听器应通知现有条目则为true
OLD_VALUE_REQUIREDboolean如果事件中应包含条目的旧值则为true
ROUTINE_IDUUID查询ID
TOPICString查询主题名

6.16.SQL_QUERIES

列名数据类型描述
QUERY_IDUUID查询ID
SQLString查询文本
ORIGIN_NODE_IDUUID发起查询的节点ID
START_TIMEdate查询开始时间
DURATIONlong查询执行期限
LOCALboolean如果仅为本地查询则为true
SCHEMA_NAMEString模式名

6.17.SQL_QUERIES_HISTORY

列名数据类型描述
SCHEMA_NAMEString模式名
SQLStringSQL文本
LOCALboolean如果仅为本地查询则为true
EXECUTIONSlong执行次数
FAILURESlong失败次数
DURATION_MINlong最短执行期限
DURATION_MAXlong最长执行期限
LAST_START_TIMEdate上次执行时间

6.18.SCHEMAS

列名数据类型描述
NAMEString模式名
PREDEFINEDboolean如果是预定义模式则为true

6.19.NODE_METRICS

列名数据类型描述
NODE_IDUUID节点ID
LAST_UPDATE_TIMETIMESTAMP指标数据上次更新的时间
MAX_ACTIVE_JOBSINT节点曾经的最大并发作业数
CUR_ACTIVE_JOBSINT节点当前正在运行的活跃作业数
AVG_ACTIVE_JOBSFLOAT节点并发执行的平均活跃作业数
MAX_WAITING_JOBSINT节点曾经的最大等待作业数
CUR_WAITING_JOBSINT节点当前正在等待执行的作业数
AVG_WAITING_JOBSFLOAT节点的平均等待作业数
MAX_REJECTED_JOBSINT在一次冲突解决操作期间一次性的最大拒绝作业数
CUR_REJECTED_JOBSINT最近一次冲突解决操作中的拒绝作业数
AVG_REJECTED_JOBSFLOAT在冲突解决操作期间的平均拒绝作业数
TOTAL_REJECTED_JOBSINT节点启动后在冲突解决期间的拒绝作业总数
MAX_CANCELED_JOBSINT节点的并发最大取消作业数
CUR_CANCELED_JOBSINT节点仍在运行的已取消作业数
AVG_CANCELED_JOBSFLOAT节点的并发平均取消作业数
TOTAL_CANCELED_JOBSINT节点启动后取消作业总数
MAX_JOBS_WAIT_TIMETIME节点中的作业执行前在队列中的最大等待时间
CUR_JOBS_WAIT_TIMETIME节点当前正在等待执行的作业的最长等待时间
AVG_JOBS_WAIT_TIMETIME节点中的作业执行前在队列中的平均等待时间
MAX_JOBS_EXECUTE_TIMETIME节点作业的最长执行时间
CUR_JOBS_EXECUTE_TIMETIME节点当前正在执行的作业的执行时间
AVG_JOBS_EXECUTE_TIMETIME节点作业的平均执行时间
TOTAL_JOBS_EXECUTE_TIMETIME节点启动后已完成的作业的执行总时间
TOTAL_EXECUTED_JOBSINT节点启动后处理的作业总数
TOTAL_EXECUTED_TASKSINT节点处理过的任务总数
TOTAL_BUSY_TIMETIME节点处理作业花费的总时间
TOTAL_IDLE_TIMETIME节点的总空闲(未执行任何作业)时间
CUR_IDLE_TIMETIME节点执行最近的作业后的空闲时间
BUSY_TIME_PERCENTAGEFLOAT节点执行作业和空闲的时间占比
IDLE_TIME_PERCENTAGEFLOAT节点空闲和执行作业的时间占比
TOTAL_CPUINTJVM的可用CPU数量
CUR_CPU_LOADDOUBLE在范围(0, 1)中以分数表示的CPU使用率
AVG_CPU_LOADDOUBLE在范围(0, 1)中以分数表示的CPU平均使用率
CUR_GC_CPU_LOADDOUBLE上次指标更新后花费在GC上的平均时间,指标默认2秒更新一次
HEAP_MEMORY_INITLONGJVM最初从操作系统申请用于内存管理的堆内存量(字节)。如果初始内存大小未定义,则显示-1
HEAP_MEMORY_USEDLONG当前用于对象分配的堆大小,堆由一个或多个内存池组成,该值为所有堆内存池中使用的堆内存总数
HEAP_MEMORY_COMMITEDLONGJVM使用的堆内存量(字节),这个内存量保证由JVM使用,堆由一个或多个内存池组成,该值为所有堆内存池中JVM使用的堆内存总数
HEAP_MEMORY_MAXLONG用于内存管理的最大堆内存量(字节),如果最大内存量未指定,则显示-1
HEAP_MEMORY_TOTALLONG堆内存总量(字节),如果总内存量未指定,则显示-1
NONHEAP_MEMORY_INITLONGJVM最初从操作系统申请用于内存管理的非堆内存量(字节)。如果初始内存大小未定义,则显示-1
NONHEAP_MEMORY_USEDLONGJVM当前使用的非堆内存量,非堆内存由一个或多个内存池组成,该值为所有非堆内存池中使用的非堆内存总数
NONHEAP_MEMORY_COMMITEDLONGJVM使用的非堆内存量(字节),这个内存量保证由JVM使用。非堆内存由一个或多个内存池组成,该值为所有非堆内存池中使用的非堆内存总数
NONHEAP_MEMORY_MAXLONG可用于内存管理的最大非堆内存量(字节),如果最大内存量未指定,则显示-1
NONHEAP_MEMORY_TOTALLONG可用于内存管理的非堆内存总量(字节),如果总内存量未指定,则显示-1
UPTIMETIMEJVM的正常运行时间
JVM_START_TIMETIMESTAMPJVM的启动时间
NODE_START_TIMETIMESTAMP节点的启动时间
LAST_DATA_VERSIONLONG数据网格为所有缓存操作赋予的不断增长的版本数,该值为节点的最新数据版本
CUR_THREAD_COUNTINT包括守护和非守护线程在内的所有有效线程总数
MAX_THREAD_COUNTINTJVM启动或峰值重置后的最大有效线程数
TOTAL_THREAD_COUNTLONGJVM启动后启动的线程总数
CUR_DAEMON_THREAD_COUNTINT当前的有效守护线程数
SENT_MESSAGES_COUNTINT节点发送的通信消息总量
SENT_BYTES_COUNTLONG发送的字节量
RECEIVED_MESSAGES_COUNTINT节点接收的通信消息总量
RECEIVED_BYTES_COUNTLONG接收的字节量
OUTBOUND_MESSAGES_QUEUEINT出站消息队列大小

6.20.TABLES

列名数据类型描述
TABLE_NAMEString表名
SCHEMA_NAMEString表所属模式名
CACHE_NAMEString表对应的缓存名
CACHE_IDint表对应的缓存ID
AFFINITY_KEY_COLUMNString关联键列名
KEY_ALIASString主键列别名
VALUE_ALIASString值列别名
KEY_TYPE_NAMEString主键类型名
VALUE_TYPE_NAMEString值类型名
IS_INDEX_REBUILD_IN_PROGRESSboolean如果表索引正在重建过程中则为true

6.21.TABLE_COLUMNS

列名数据类型描述
COLUMN_NAMEString列名
TABLE_NAMEString表名
SCHEMA_NAMEString模式名
AFFINITY_COLUMNboolean如果该列为关联键则为true
AUTO_INCREMENTboolean如果是自增字段则为true
DEFAULT_VALUEString默认值
NULLABLEboolean如果允许为空则为true
PKboolean如果是主键则为true
PRECISIONint列精度
SCALEint列标度
TYPEString列类型

6.22.VIEWS

列名数据类型描述
NAMEString视图名
SCHEMAString模式名
DESCRIPTIONString描述

6.23.VIEW_COLUMNS

列名数据类型描述
COLUMN_NAMEString列名
VIEW_NAMEString视图名
SCHEMA_NAMEString模式名
DEFAULT_VALUEString默认值
NULLABLEboolean如果允许为空则为true
PRECISIONint列精度
SCALEint列标度
TYPEString列类型

6.24.INDEXES

列名数据类型描述
INDEX_NAMEString索引名
INDEX_TYPEString索引类型
COLUMNSString索引中的列名
SCHEMA_NAMEString模式名
TABLE_NAMEString表名
CACHE_NAMEString缓存名
CACHE_IDint缓存ID
INLINE_SIZEint内联大小(字节)
IS_PKboolean是否为主键索引
IS_UNIQUEboolean是否为唯一索引

6.25.PAGE_LISTS

页面列表是一种数据结构,用于存储部分空闲的数据页面(空闲列表)和完全空闲的已分配页面(重用列表)的列表。空闲列表和重用列表的目的是快速找到具有足够可用空间来保存条目的页面,或者确定不存在这样的页面然后分配新页面。页面列表按存储桶进行组织。每个存储桶组都引用具有大约相同的可用空间大小的页面。

如果启用了原生持久化,则将为每个缓存组的每个分区创建页面列表。要查看此类页面列表,请使用CACHE_GROUP_PAGE_LISTS系统视图。如果禁用了原生持久化,则会为每个数据区创建页面列表,这时应使用DATA_REGION_PAGE_LISTS系统视图。这些视图包含有关每个页面列表的每个存储区的信息,这些信息对于了解可以在不分配新页面的情况下将多少数据插入到缓存中也很有用,还有助于监测页面列表利用率的偏差。

6.25.1.CACHE_GROUP_PAGE_LISTS

列名数据类型描述
CACHE_GROUP_IDint缓存组ID
PARTITION_IDint分区ID
NAMEString页面列表名
BUCKET_NUMBERint存储桶号
BUCKET_SIZElong存储桶中页面数
STRIPES_COUNTint存储桶使用的平行线程数,平行线程用于避免争用
CACHED_PAGES_COUNTint此存储桶的堆内页面列表缓存中的页面数

6.25.2.DATA_REGION_PAGE_LISTS

列名数据类型描述
NAMEString页面列表名
BUCKET_NUMBERint存储桶号
BUCKET_SIZElong存储桶中页面数
STRIPES_COUNTint存储桶使用的平行线程数,平行线程用于避免争用
CACHED_PAGES_COUNTint此存储桶的堆内页面列表缓存中的页面数

6.26.PARTITION_STATES

列名数据类型描述
CACHE_GROUP_IDint缓存组ID
PARTITION_IDint分区ID
NODE_IDUUID节点ID
STATEString分区状态。可能值:MOVING:分区正在从另一个节点加载到该节点;OWNING:该节点是主/备所有者;RENTING:此节点不是主/备所有者(当前正在被驱逐);EVICTED:分区已被驱逐;LOST:分区状态无效,不应使用该分区
IS_PRIMARYboolean主分区标志

6.27.BINARY_METADATA

列名数据类型描述
TYPE_IDint类型ID
TYPE_NAMEString类型名字
AFF_KEY_FIELD_NAMEString关联键字段名
FIELDS_COUNTint字段数量
FIELDSString记录对象字段
SCHEMAS_IDSString该类型注册的模式ID
IS_ENUMboolean是否为枚举类型

6.28.METASTORAGE

列名数据类型描述
NAMEString名称
VALUEString元素的字符串或原始二进制(如果由于某种原因无法反序列化数据)表示形式

7.追踪

警告

这是一个试验性API。

Ignite中的许多API都可以通过OpenCensus进行追踪。可以收集在集群中执行的各种任务的分布式追踪,来诊断各种问题。

建议在阅读本章节之前先熟悉OpenCensus

下列Ignite API支持追踪:

  • 发现;
  • 通信;
  • 交换;
  • 事务;
  • SQL查询。

要查看追踪信息,必须将其导出到外部系统。可以使用OpenCensus的导出器,也可以自己开发导出器,但是不管怎样,导出器都必须在Ignite中注册,具体请参考导出追踪

7.1.配置追踪

启用OpenCensus追踪是在节点的配置中进行的,集群中的所有节点必须使用相同的追踪配置。

xml
<bean class="org.apache.ignite.configuration.IgniteConfiguration">

    <property name="tracingSpi">
        <bean class="org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi"/>
    </property>

</bean>
java
IgniteConfiguration cfg = new IgniteConfiguration();

cfg.setTracingSpi(new org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi());

Ignite ignite = Ignition.start(cfg);

7.2.启用追踪采样

使用以上配置启动集群后,Ignite不会收集追踪信息,必须在运行时为某API启用追踪采样。追踪采样可以随意打开和关闭,例如仅在遇到问题时才打开。

可以通过2种方式执行此操作:

  • 通过命令行的控制脚本;
  • 通过编程方式。

追踪信息是以一定的概率采样率采集的,速率是介于0.0和1.0之间的一个值(包括0和1.0):0表示不采样,1表示始终采样。

当采样率为大于0的值时,Ignite就会收集追踪信息。要禁用追踪收集,可以将采样率设为0。

以下章节介绍了启用追踪采样的两种方式:

7.2.1.通过控制脚本

转到Ignite安装目录的{IGNITE_HOME}/bin,在控制脚本中启用实验性命令:

shell
export IGNITE_ENABLE_EXPERIMENTAL_COMMAND=true

启用对某API的追踪:

shell
./control.sh --tracing-configuration set --scope TX --sampling-rate 1

参考控制脚本章节的内容,可以了解所有参数的列表。

7.2.2.通过编程方式

启动节点后,可以按以下方式启用追踪采样:

java
Ignite ignite = Ignition.start();

ignite.tracingConfiguration().set(
        new TracingConfigurationCoordinates.Builder(Scope.TX).build(),
        new TracingConfigurationParameters.Builder().withSamplingRate(1).build());

--scope参数指定要追踪的API,下列API支持追踪:

  • DISCOVERY:发现事件;
  • EXCHANGE:交换事件;
  • COMMUNICATION:通信事件;
  • TX:事务;
  • SQL:SQL查询。

--sampling-rate是概率采样率,值在数字01之间:

  • 0:表示没有采样;
  • 1:表示始终采样。

7.3.导出追踪

要查看追踪信息,需要使用导出器将其导出到外部系统。OpenCensus直接支持很多导出器,也可以编写自定义的导出器。具体可参考OpenCensus导出器

本章节中将介绍如何将追踪信息导出到Zipkin

  1. 按照本文档在主机上启动Zipkin;
  2. 在启动Ignite的应用中注册ZipkinTraceExporter
java
//register Zipkin exporter
ZipkinTraceExporter.createAndRegister(
        ZipkinExporterConfiguration.builder().setV2Url("http://localhost:9411/api/v2/spans")
                .setServiceName("ignite-cluster").build());

IgniteConfiguration cfg = new IgniteConfiguration().setClientMode(true)
        .setTracingSpi(new org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi());

Ignite ignite = Ignition.start(cfg);

//enable trace sampling for transactions with 100% sampling rate
ignite.tracingConfiguration().set(
        new TracingConfigurationCoordinates.Builder(Scope.TX).build(),
        new TracingConfigurationParameters.Builder().withSamplingRate(1).build());

//create a transactional cache
IgniteCache<Integer, String> cache = ignite
        .getOrCreateCache(new CacheConfiguration<Integer, String>("myCache")
                .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL));

IgniteTransactions transactions = ignite.transactions();

// start a transaction
try (Transaction tx = transactions.txStart()) {
    //do some operations
    cache.put(1, "test value");

    System.out.println(cache.get(1));

    cache.put(1, "second value");

    tx.commit();
}

try {
    //This code here is to wait until the trace is exported to Zipkin.
    //If your application doesn't stop here, you don't need this piece of code.
    Thread.sleep(5_000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
  1. 在浏览器中打开http://localhost:9411/zipkin,然后点击搜索图标,事务追踪如下图所示:

7.4.分析追踪数据

追踪记录了某事件执行的信息,每条追踪信息都由一棵跨度树组成,跨度是系统为了处理事件而执行的单个工作单元。

由于Ignite的分布式特性,一个操作通常涉及多个节点,因此追踪信息可以包括来自多个节点的跨度,每个跨度始终包含有关执行相应操作的节点的信息。

在上面显示的事务追踪图中,可以看到该追踪包含与以下操作关联的跨度:

  • 获取锁(transactions.colocated.lock.map);
  • 读(transactions.near.enlist.read);
  • 写(transactions.near.enlist.write);
  • 提交(transactions.commit);
  • 关闭(transactions.close)。

提交操作又包括两个操作:准备和完成。

可以单击每个跨度以查看附加到其上的注释和标签:

7.5.追踪SQL查询

追踪采样配置中将scope参数值配置为SQL,可以开启SQL查询的追踪功能,开启该功能之后,在任何集群节点上执行的每个SQL查询都会产生单独的追踪。

警告

对SQL查询启用追踪会严重降低SQL引擎的性能。

下表列出了可以作为SQL查询追踪树一部分的每个跨度的说明、标签列表和注释。

提示

根据SQL查询类型及其执行计划,SQL查询跨度树中可能不存在某些跨度。

跨度名描述标签和注释
sql.query在释放查询发起节点上的已用资源之前,从注册时刻开始执行的SQL查询sql.query.text:SQL查询文本,sql.schema:SQL模式
sql.cursor.openSQL查询游标打开
sql.cursor.closeSQL查询游标关闭
sql.cursor.cancelSQL查询游标取消
sql.query.parseSQL查询解析sql.parser.cache.hit:是否由于缓存结果而跳过了对SQL查询的解析
sql.query.execute.requestSQL查询执行请求的处理sql.query.text:SQL查询文本
sql.next.page.request获取本地SQL查询执行结果下一页请求的处理
sql.page.response节点本地SQL查询执行结果页面消息的处理
sql.query.execute通过H2 SQL引擎执行查询sql.query.text:SQL查询文本
sql.page.prepare从游标读取行并准备结果页sql.page.rows:结果页面包含的行数
sql.fail.responseSQL查询执行失败消息的处理
sql.dml.query.execute.requestSQL DML查询执行请求的处理sql.query.text:SQL查询文本
sql.dml.query.response查询发起节点对SQL DML查询执行结果的处理
sql.query.cancel.requestSQL查询取消请求的处理
sql.iterator.openSQL查询迭代器打开
sql.iterator.closeSQL查询迭代器关闭
sql.page.fetch获取SQL查询结果页面sql.page.rows:结果页面包含的行数
sql.page.wait等待从远程节点接收SQL查询结果页面
sql.index.range.requestSQL索引范围请求的处理sql.index:SQL索引名,sql.table:SQL表名,sql.index.range.rows:索引范围请求结果包含的行数
sql.index.range.responseSQL索引范围响应的处理
sql.dml.query.executeSQL DML查询的执行
sql.command.query.executeSQL命令查询的执行,可能是DDL查询或者Ignite原生命令
sql.partitions.reserve保留用于执行查询的数据分区显示为某缓存保留数据分区的注释消息:Cache partitions were reserved [cache=<name of the cache>, partitions=[<partitions numbers>]
sql.cache.update由于执行SQL DML查询而导致的缓存更新sql.cache.updates:由于DML查询而要更新的缓存条目数
sql.batch.processSQL批处理更新的处理

8.性能统计

警告

该功能是试验性的,未来的版本中可能会修改。

8.1.概述

Ignite内置了用于分析集群的工具,可以从集群中收集性能统计然后生成性能报告。

8.2.收集统计数据

启动和停止统计信息收集通过JMX接口实现。

每个节点都以二进制文件的形式收集性能统计信息,该文件位于Ignite_work_directory/perf_stat/目录下,名称是node-{nodeId}-{index}.prf

性能统计文件用于离线构建报告。

节点使用堆外循环缓冲区临时存储序列化的统计信息。当达到刷新大小时,写入线程会将缓冲区刷新到文件。如果缓冲区由于磁盘速度慢而溢出,则会跳过某些统计信息,其行为可通过如下参数进行自定义。

每个统计信息收集过程都会在节点上创建一个新文件,下一个文件具有相同的名称和相应的索引,示例如下:

  • node-faedc6c9-3542-4610-ae10-4ff7e0600000.prf
  • node-faedc6c9-3542-4610-ae10-4ff7e0600000-1.prf
  • node-faedc6c9-3542-4610-ae10-4ff7e0600000-2.prf

8.3.生成报告

Ignite提供了通过性能统计文件生成报告的工具,该工具发布于ignite-extensions仓库:performance-statistics-ext

遵循下面的步骤可以生成性能报告:

  1. 停止收集统计信息并将文件从所有节点放在某空目录下。例如:
    /path_to_files/
        ├── node-162c7147-fef8-4ea2-bd25-8653c41fc7fa.prf
        ├── node-7b8a7c5c-f3b7-46c3-90da-e66103c00001.prf
        └── node-faedc6c9-3542-4610-ae10-4ff7e0600000.prf
  2. 在工具的二进制包中执行如下的命令:
performance-statistics-tool/build-report.sh path_to_files

性能报告位于性能统计文件路径下的一个新文件夹中:path_to_files/report_yyyy-MM-dd_HH-mm-ss/,在浏览器中打开report_yyyy-MM-dd_HH-mm-ss/index.html可以看到报告。

8.4.管理

下面的章节介绍了与JMX接口和系统属性有关的信息。

8.4.1.JMX

可以通过PerformanceStatisticsMBean接口来管理性能统计收集:

方法描述
start()在集群中启动性能统计收集
stop()在集群中停止性能统计收集
started()性能统计收集已启动则为true

8.4.2.系统属性

属性类型默认值描述
IGNITE_PERF_STAT_FILE_MAX_SIZELong32Gb最大性能统计文件大小(字节)。当超出文件大小时,性能统计信息收集将停止
IGNITE_PERF_STAT_BUFFER_SIZEInteger32Mb性能统计信息堆外缓冲区大小(字节)
IGNITE_PERF_STAT_FLUSH_SIZEInteger8Mb要刷新的最小性能统计批次大小(字节)
IGNITE_PERF_STAT_CACHED_STRINGS_THRESHOLDInteger1024最大性能统计缓存字符串阈值。超过阈值时,将停止字符串缓存

18624049226