# 监控

# 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
    
    属性 类型 描述
    Id String 集群ID
    Tag String 集群标签
    操作 描述
    Tag(String) 设定新的集群标签
  • 编程方式:

    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.改变集群状态

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

  • 控制脚本

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

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

    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.启用缓存指标

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

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

    对于节点的每个缓存,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种方式启用:

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

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

      数据区MBean

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

      # 4.1.3.启用持久化相关指标

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

        也可以通过如下的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环境变量。

        示例:

        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>
        
        属性 类型 描述 作用域
        PagesFillFactor float 页面中数据的平均大小与页面大小的比率。启用原生持久化后,此指标仅适用于持久化存储(即磁盘上的页面)。 节点
        TotalUsedPages long 当前正在使用的数据页数。启用原生持久化后,此指标仅适用于持久化存储(即磁盘上的页面)。 节点
        PhysicalMemoryPages long 内存中分配的页数。 节点
        PhysicalMemorySize long 内存中分配的空间大小(字节)。 节点

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

        # 4.2.4.3.监控存储大小

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

        持久化存储大小

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

        MBean的ObjectName:

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

        数据区大小

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

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

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

        MBean的ObjectName:

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

        缓存组大小

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

        MBean的ObjectName:

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

        # 4.2.5.检查点操作监控

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

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

        MBean的ObjectName:

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

        # 4.2.6.再平衡监控

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

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

        MBean的ObjectName:

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

        # 4.2.7.拓扑监控

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

        MBean的ObjectName:

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

        MBean的ObjectName:

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

        # 4.2.8.缓存监控

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

        全局缓存MBean的ObjectName:

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

        本地缓存MBean的ObjectName:

        group=<Cache Name>,name="org.apache.ignite.internal.processors.cache.CacheLocalMetricsMXBeanImpl"
        
        属性 类型 描述 作用域
        CacheSize long 本地节点中该缓存的数据条目数。 节点
        # 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
        
        属性 类型 描述 作用域
        LockedKeysNumber long 该节点锁定的键数量。 节点
        TransactionsCommittedNumber long 该节点已提交的事务数。 节点
        TransactionsRolledBackNumber long 已回滚事务数。 节点
        OwnerTransactionsNumber long 该节点发起事务数。 节点
        TransactionsHoldingLockNumber long 节点上至少一个键上有锁的打开事务数。 节点

        # 4.2.10.客户端连接监控

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

        MBean的ObjectName:

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

        # 4.2.11.消息队列监控

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

        通信消息队列

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

        MBean的ObjectName:

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

        发现消息队列

        发现消息队列。

        MBean的ObjectName:

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

        # 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.指标导出器

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

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

          JMX

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

          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分钟)将指标输出到日志文件。

            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

            名称 类型 描述
            CpuLoad double CPU负载
            CurrentThreadCpuTime long ThreadMXBean#getCurrentThreadCpuTime()
            CurrentThreadUserTime long ThreadMXBean#getCurrentThreadUserTime()
            DaemonThreadCount Integer ThreadMXBean#getDaemonThreadCount()
            GcCpuLoad double GC的CPU负载
            PeakThreadCount Integer ThreadMXBean#getPeakThreadCount()
            SystemLoadAverage java.lang.Double OperatingSystemMXBean#getSystemLoadAverage()
            ThreadCount Integer ThreadMXBean#getThreadCount()
            TotalExecutedTasks long 已执行任务总数
            TotalStartedThreadCount long ThreadMXBean#getTotalStartedThreadCount()
            UpTime long RuntimeMxBean#getUptime()
            memory.heap.committed long MemoryUsage#getHeapMemoryUsage()#getCommitted()
            memory.heap.init long MemoryUsage#getHeapMemoryUsage()#getInit()
            memory.heap.used long MemoryUsage#getHeapMemoryUsage()#getUsed()
            memory.nonheap.committed long MemoryUsage#getNonHeapMemoryUsage()#getCommitted()
            memory.nonheap.init long MemoryUsage#getNonHeapMemoryUsage()#getInit()
            memory.nonheap.max long MemoryUsage#getNonHeapMemoryUsage()#getMax()
            memory.nonheap.used long MemoryUsage#getNonHeapMemoryUsage()#getUsed()

            # 5.2.2.缓存

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

            名称 类型 描述
            CacheEvictions long 缓存的退出的总数
            CacheGets long 缓存的读取总数
            CacheHits long 缓存的命中总数
            CacheMisses long 缓存的未命中总数
            CachePuts long 缓存的写入总数
            CacheRemovals long 缓存的删除总数
            CacheTxCommits long 缓存的事务提交总数
            CacheTxRollbacks long 缓存的事务回滚总数
            CacheSize long 本地缓存大小
            CommitTime histogram 提交时间(纳秒)
            CommitTimeTotal long 提交时间总数(纳秒)
            EntryProcessorHits long 缓存中存在的键调用总数
            EntryProcessorInvokeTimeNanos long 缓存调用总数(纳秒)
            EntryProcessorMaxInvocationTime long 到目前为止的最大缓存调用执行时间
            EntryProcessorMinInvocationTime long 到目前为止的最小缓存调用执行时间
            EntryProcessorMisses long 缓存中不存在的键调用总数
            EntryProcessorPuts long 触发更新的缓存调用总数
            EntryProcessorReadOnlyInvocations long 不触发更新的缓存调用总数
            EntryProcessorRemovals long 触发删除的缓存调用总数
            EstimatedRebalancingKeys long 预估的再平衡键数量
            GetTime histogram 读取时间(纳秒)
            GetTimeTotal long 缓存读取总时间(纳秒)
            HeapEntriesCount long 堆内缓存数
            IndexRebuildKeysProcessed long 索引重建期间已处理的键数量
            IsIndexRebuildInProgress boolean 如果索引在创建或重建过程中则为true
            OffHeapBackupEntriesCount long 堆外备份条目总数
            OffHeapEntriesCount long 堆外条目总数
            OffHeapEvictions long 堆外内存退出总量
            OffHeapGets long 堆外内存读取请求总数
            OffHeapHits long 堆外内存读取请求命中总数
            OffHeapMisses long 堆外内存读取请求未命中总数
            OffHeapPrimaryEntriesCount long 堆外主条目总数
            OffHeapPuts long 堆外内存写入请求总数
            OffHeapRemovals long 堆外内存删除总数
            PutTime histogram 写入时间(纳秒)
            PutTimeTotal long 缓存写入总时间(纳秒)
            QueryCompleted long 查询完成数
            QueryExecuted long 查询执行数
            QueryFailed long 查询失败数
            QueryMaximumTime long 查询最长执行时间
            QueryMinimalTime long 查询最短执行时间
            QuerySumTime long 查询总时间
            RebalanceClearingPartitionsLeft long 再平衡实际开始前需要清理的分区数
            RebalanceStartTime long 再平衡开始时间
            RebalancedKeys long 已再平衡的键数量
            RebalancingBytesRate long 预估的再平衡速度(字节)
            RebalancingKeysRate long 预估的再平衡速度(键数量)
            RemoveTime histogram 删除时间(纳秒)
            RemoveTimeTotal long 缓存删除总时间(纳秒)
            RollbackTime histogram 回滚时间(纳秒)
            RollbackTimeTotal long 回滚总时间(纳秒)
            TotalRebalancedBytes long 已再平衡字节数

            # 5.2.3.缓存组

            注册表名:cacheGroups.{group_name}

            名称 类型 描述
            AffinityPartitionsAssignmentMap java.util.Collections$EmptyMap 映射分区分配哈希表
            Caches java.util.ArrayList 缓存列表
            IndexBuildCountPartitionsLeft long 完成索引创建或重建所需处理的分区数
            LocalNodeMovingPartitionsCount Integer 该缓存组在本地节点上状态为MOVING的分区数
            LocalNodeOwningPartitionsCount Integer 该缓存组在本地节点上状态为OWNING的分区数
            LocalNodeRentingEntriesCount long 该缓存组在本地节点上的状态为RENTING的分区中要退出的数据量
            LocalNodeRentingPartitionsCount Integer 该缓存组在本地节点上的状态为RENTING的分区数
            MaximumNumberOfPartitionCopies Integer 该缓存组中的所有分区的最大分区副本数
            MinimumNumberOfPartitionCopies Integer 该缓存组中的所有分区的最小分区副本数
            MovingPartitionsAllocationMap java.util.Collections$EmptyMap 集群中状态为MOVING的分区的分配哈希表
            OwningPartitionsAllocationMap java.util.Collections$EmptyMap 集群中状态为OWNING的分区的分配哈希表
            PartitionIds java.util.ArrayList 本地分区ID列表
            SparseStorageSize long 组分配的存储空间,针对可能的稀疏性进行了调整(字节)
            StorageSize long 为缓存组分配的存储空间(字节)
            TotalAllocatedPages long 为缓存组分配的页面总数
            TotalAllocatedSize long 为缓存组分配的内存总大小(字节)
            ReencryptionBytesLeft long 为重新加密保留的字节数
            ReencryptionFinished boolean 重新加密是否完成标志

            # 5.2.4.事务

            注册表名:tx

            名称 类型 描述
            AllOwnerTransactions java.util.HashMap 本地节点持有的事务哈希表
            LockedKeysNumber long 当前节点锁定的键数量
            OwnerTransactionsNumber long 当前节点发起的正在运行的事务数
            TransactionsHoldingLockNumber long 至少锁定一个键的正在运行的事务数
            LastCommitTime long 上次提交时间
            nodeSystemTimeHistogram histogram 以直方图表示的节点事务系统时间
            nodeUserTimeHistogram histogram 以直方图表示的节点事务用户时间
            LastRollbackTime long 上次回滚时间
            totalNodeSystemTime long 节点的事务系统总时间
            totalNodeUserTime long 节点的事务用户总时间
            txCommits Integer 提交事务数
            txRollbacks Integer 回滚事务数

            # 5.2.5.分区映射交换

            注册表名:pme

            名称 类型 描述
            CacheOperationsBlockedDuration long 当前的PME过程缓存操作阻塞时间(毫秒)
            CacheOperationsBlockedDurationHistogram histogram 当前的PME过程缓存操作阻塞直方图(毫秒)
            Duration long 当前的PME持续时间(毫秒)
            DurationHistogram histogram 当前的PME持续直方图(毫秒)

            # 5.2.6.计算作业

            注册表名:compute.jobs

            名称 类型 描述
            compute.jobs.Active long 当前正在执行的活动作业数
            compute.jobs.Canceled long 仍在运行的已取消作业数
            compute.jobs.ExecutionTime long 作业的总执行时间
            compute.jobs.Finished long 已完成作业数
            compute.jobs.Rejected long 在最近的冲突解决操作之后,拒绝的作业数
            compute.jobs.Started long 已开始作业数
            compute.jobs.Waiting long 当前等待执行的排队作业数
            compute.jobs.WaitingTime long 作业在等待队列上花费的总时间

            # 5.2.7.线程池

            注册表名:threadPools.{thread_pool_name}

            名称 类型 描述
            ActiveCount long 正在执行任务的线程的近似数量
            CompletedTaskCount long 已完成执行的任务近似总数
            CorePoolSize long 核心线程数
            KeepAliveTime long 线程保持活动时间,即超过核心线程池大小的线程在被终止之前可能保持空闲的时间
            LargestPoolSize long 线程池中的并发最大线程数
            MaximumPoolSize long 最大允许线程数
            PoolSize long 线程池当前线程数
            QueueSize long 当前执行队列大小
            RejectedExecutionHandlerClass String 当前拒绝处理器类名
            Shutdown boolean 如果该执行器已关闭则为true
            TaskCount long 已计划执行的任务近似总数
            Terminated boolean 如果关闭后所有任务都已完成则为true
            Terminating long 如果终止但尚未终止则为true
            ThreadFactoryClass String 用于创建新线程的线程工厂类名

            # 5.2.8.缓存组IO

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

            名称 类型 描述
            LOGICAL_READS long 逻辑读数量
            PHYSICAL_READS long 物理读数量
            grpId Integer 组ID
            name String 索引名
            startTime long 统计数据收集开始时间

            # 5.2.9.有序索引

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

            名称 类型 描述
            LOGICAL_READS_INNER long 内部树节点的逻辑读取数
            LOGICAL_READS_LEAF long 末端树节点的逻辑读取数
            PHYSICAL_READS_INNER long 内部树节点的物理读取数
            PHYSICAL_READS_LEAF long 末端树节点的物理读取数
            indexName String 索引名
            name String 缓存名
            startTime long 统计数据收集开始时间

            # 5.2.10.哈希索引

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

            名称 类型 描述
            LOGICAL_READS_INNER long 内部树节点的逻辑读取数
            LOGICAL_READS_LEAF long 末端树节点的逻辑读取数
            PHYSICAL_READS_INNER long 内部树节点的物理读取数
            PHYSICAL_READS_LEAF long 末端树节点的物理读取数
            indexName String 索引名
            name String 缓存名
            startTime long 统计数据收集开始时间

            # 5.2.11.通信IO

            注册表名:io.communication

            名称 类型 描述
            OutboundMessagesQueueSize Integer 出站消息队列大小
            SentMessagesCount Integer 发送消息数量
            SentBytesCount long 发送字节数
            ReceivedBytesCount long 接收字节数
            ReceivedMessagesCount Integer 接收消息数量

            # 5.2.12.数据区IO

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

            名称 类型 描述
            AllocationRate long rateTimeInternal期间的平均分配率(每秒页面数)
            CheckpointBufferSize long 检查点缓冲区大小(字节)
            DirtyPages long 内存中还没有同步到持久化存储的页面数
            EmptyDataPages long 计算数据区中的空页面数,它只计算可重用的完全空闲的页面(比如包含在空闲列表的可重用桶中的页面)
            EvictionRate long 退出率(每秒页面数)
            LargeEntriesPagesCount long 完全被超过页面大小的大条目占用的页面数
            OffHeapSize long 堆外内存大小(字节)
            OffheapUsedSize long 堆外内存已使用大小(字节)
            PagesFillFactor double 已用空间的百分比
            PagesRead long 上次重启以来的页面读取数
            PagesReplaceAge long 内存中的页面被持久化存储中的页面替换的平均期限(毫秒)
            PagesReplaceRate long 内存中的页面被持久化存储中的页面替换的速率(每秒页面数)
            PagesReplaced long 从上次重启以来的页面替换数
            PagesWritten long 从上次重启以来的页面写入数
            PhysicalMemoryPages long 物理内存中驻留的页面数
            PhysicalMemorySize long 加载到内存中的页面总大小(字节)
            TotalAllocatedPages long 分配的页面总数
            TotalAllocatedSize long 数据区中分配的页面总大小(字节)
            TotalThrottlingTime long 限流线程总时间(毫秒),Ignite会限制在检查点执行过程中生成脏页面的线程
            UsedCheckpointBufferSize long 已使用的检查点缓冲区大小(字节)

            # 5.2.13.数据存储

            注册表名:io.datastorage

            名称 类型 描述
            CheckpointBeforeLockHistogram histogram 执行写锁定持续时间(毫秒)之前的检查点操作的直方图
            CheckpointFsyncHistogram histogram 检查点全同步持续时间(毫秒)的直方图
            CheckpointHistogram histogram 检查点持续时间(毫秒)的直方图
            CheckpointListenersExecuteHistogram histogram 写锁定持续时间(毫秒)下检查点执行监听器的直方图
            CheckpointLockHoldHistogram histogram 检查点锁定保持持续时间(毫秒)的直方图
            CheckpointLockWaitHistogram histogram 检查点锁定等待持续时间(毫秒)的直方图
            CheckpointMarkHistogram histogram 检查点标记持续时间(毫秒)的直方图
            CheckpointPagesWriteHistogram histogram 检查点页面写入持续时间(毫秒)的直方图
            CheckpointSplitAndSortPagesHistogram histogram 分割和排序检查点页面持续时间(毫秒)的直方图
            CheckpointTotalTime long 检查点总时间
            LastCheckpointCopiedOnWritePagesNumber long 上次检查点过程复制到临时检查点缓冲区的页面数
            LastCheckpointDataPagesNumber long 上次检查点过程的数据页面写入数
            LastCheckpointDuration long 上次检查点过程的持续时间(毫秒)
            LastCheckpointFsyncDuration long 上次检查点过程的同步阶段的持续时间(毫秒)
            LastCheckpointListenersExecuteDuration long 写锁定下检查点执行监听器的持续时间(毫秒)
            LastCheckpointLockHoldDuration long 检查点锁定保持的持续时间(毫秒)
            LastCheckpointLockWaitDuration long 上次检查点过程的锁等待时间(毫秒)
            LastCheckpointMarkDuration long 上次检查点过程的标记时间(毫秒)
            LastCheckpointPagesWriteDuration long 上次检查点过程的页面写入时间(毫秒)
            LastCheckpointTotalPagesNumber long 上次检查点过程的页面写入总数
            LastCheckpointSplitAndSortPagesDuration long 拆分和排序上次检查点的检查点页面的持续时间(毫秒)
            LastCheckpointStart long 最后一个检查点的开始时间戳
            LastCheckpointWalRecordFsyncDuration long 在上次检查点的开始处记录CheckpointRecord后WAL全同步的持续时间(毫秒)
            LastCheckpointWriteEntryDuration long 上次检查点中条目缓冲区写入文件的持续时间(毫秒)
            SparseStorageSize long 为可能的稀疏性而调整的已分配存储空间(字节)
            StorageSize long 分配的存储空间(字节)
            WalArchiveSegments Integer 当前WAL存档中的WAL段数量
            WalBuffPollSpinsRate long WAL缓冲区轮询在上一个时间间隔内的自旋数
            WalFsyncTimeDuration long FSYNC模式持续时间
            WalFsyncTimeNum long FSYNC模式总数量
            WalLastRollOverTime long 上一次WAL段翻转时间
            WalLoggingRate long 上一个时间间隔内WAL记录的每秒平均写入量
            WalTotalSize long WAL文件存储总大小(字节)
            WalWritingRate long 上一个时间间隔内WAL的每秒平均写入字节数

            # 5.2.14.集群

            注册表名:cluster

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

            # 6.系统视图

            警告

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

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

            限制

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

            # 6.1.查询系统视图

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

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

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

            执行一个查询:

            -- 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瘦客户端的同一个示例:

            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_NAME String 缓存名
            CACHE_ID int 缓存ID
            CACHE_TYPE String 缓存类型
            CACHE_MODE String 缓存模式
            ATOMICITY_MODE String 原子化模式
            CACHE_GROUP_NAME String 缓存组名
            AFFINITY String 关联函数的toString表示
            AFFINITY_MAPPER String 关联映射器的toString表示
            BACKUPS int 备份数
            CACHE_GROUP_ID int 缓存组ID
            CACHE_LOADER_FACTORY String 缓存加载器工厂的toString表示
            CACHE_STORE_FACTORY String 缓存存储器工厂的toString表示
            CACHE_WRITER_FACTORY String 缓存写入器工厂的toString表示
            DATA_REGION_NAME String 数据区名
            DEFAULT_LOCK_TIMEOUT long 锁超时(毫秒)
            EVICTION_FILTER String 退出过滤器的toString表示
            EVICTION_POLICY_FACTORY String 退出策略工厂的toString表示
            EXPIRY_POLICY_FACTORY String 过期策略工厂的toString表示
            INTERCEPTOR String 拦截器的toString表示
            IS_COPY_ON_READ boolean 缓存值副本是否保存在堆内的标志
            IS_EAGER_TTL boolean 是否立即从缓存中删除过期数据的标志
            IS_ENCRYPTION_ENABLED boolean 缓存数据开启加密则为true
            IS_EVENTS_DISABLED boolean 缓存事件禁用则为true
            IS_INVALIDATE boolean 如果值在近缓存中提交时无效(为空),则为true
            IS_LOAD_PREVIOUS_VALUE boolean 如果值在缓存中不存在时应该从存储中加载,则为true
            IS_MANAGEMENT_ENABLED boolean
            IS_NEAR_CACHE_ENABLED boolean 开启近缓存则为true
            IS_ONHEAP_CACHE_ENABLED boolean 开启堆内缓存则为true
            IS_READ_FROM_BACKUP boolean 如果开启从备份读则为true
            IS_READ_THROUGH boolean 如果开启通读则为true
            IS_SQL_ESCAPE_ALL boolean 如果所有的表名和字段名都用双引号转义则为true
            IS_SQL_ONHEAP_CACHE_ENABLED boolean 如果堆内缓存SQL开启则为true,开启时,查询引擎可以访问缓存的SQL数据,当相关的缓存数据发生变更或者退出时,这些数据也会失效退出
            IS_STATISTICS_ENABLED boolean
            IS_STORE_KEEP_BINARY boolean 缓存存储实现处理二进制对象而不是Java对象的标志
            IS_WRITE_BEHIND_ENABLED boolean 缓存存储开启后写模式标志
            IS_WRITE_THROUGH boolean 如果开启通写则为true
            MAX_CONCURRENT_ASYNC_OPERATIONS int 允许的最大并发异步操作数,如果为0,则不受限制
            MAX_QUERY_ITERATORS_COUNT int 可以存储的查询迭代器的最大值,当每页数据按需发给用户端时,存储迭代器用于支持查询分页
            NEAR_CACHE_EVICTION_POLICY_FACTORY String 近缓存退出策略工厂的toString表示
            NEAR_CACHE_START_SIZE int 启动后将用于预创建内部哈希表的近缓存初始缓存大小
            NODE_FILTER String 节点过滤器NodeFilter实现的toString表示
            PARTITION_LOSS_POLICY String 分区丢失策略的toString表示
            QUERY_DETAIL_METRICS_SIZE int 用于监控目的在内存中存储的查询详细指标的大小,如果为0则不会收集历史记录
            QUERY_PARALLELISM int 单节点查询并行度的查询执行引擎提示
            REBALANCE_BATCH_SIZE int 单次再平衡消息大小(字节)
            REBALANCE_BATCHES_PREFETCH_COUNT int 再平衡开始时节点生成的批次数
            REBALANCE_DELAY long 再平衡延迟时间(毫秒)
            REBALANCE_MODE String 再平衡模式
            REBALANCE_ORDER int 再平衡顺序
            REBALANCE_THROTTLE long 为了避免CPU和网络的过载,再平衡消息之间的等待时间(毫秒)
            REBALANCE_TIMEOUT long 再平衡超时(毫米)
            SQL_INDEX_MAX_INLINE_SIZE int 索引内联大小(字节)
            SQL_ONHEAP_CACHE_MAX_SIZE int SQL堆内缓存最大值,以行数计算,当到达最大值时最早的数据会被退出
            SQL_SCHEMA String 模式名
            TOPOLOGY_VALIDATOR String 拓扑验证器的toString表示
            WRITE_BEHIND_BATCH_SIZE int 后写缓存的缓存操作批次大小
            WRITE_BEHIND_COALESCING boolean 后写缓存存储操作的写合并标志。将具有相同键的存储操作(get或remove)组合或合并为单个操作,从而减少对底层缓存存储的压力
            WRITE_BEHIND_FLUSH_FREQUENCY long 后写缓存将数据刷新到底层存储的频率(毫秒)
            WRITE_BEHIND_FLUSH_SIZE int 后写缓存刷新数据大小,如果缓存数据量达到该值,所有的后写缓存数据都会刷新到底层存储,然后后写缓存会被清空
            WRITE_BEHIND_FLUSH_THREAD_COUNT int 执行后写缓存刷新的线程数
            WRITE_SYNCHRONIZATION_MODE String 写同步模式

            # 6.3.CACHE_GROUPS

            列名 数据类型 描述
            CACHE_GROUP_NAME String 缓存组名
            CACHE_COUNT int 缓存组中的缓存数
            DATA_REGION_NAME String 存储缓存组中数据的数据区
            CACHE_MODE String 默认缓存模式
            ATOMICITY_MODE String 默认原子化模式
            AFFINITY String 关联函数的toString表示
            BACKUPS int 备份数
            CACHE_GROUP_ID int 缓存组ID
            IS_SHARED boolean 缓存组为共享模式则为true
            NODE_FILTER String 节点过滤器NodeFilter的toString表示
            PARTITION_LOSS_POLICY String 分区丢失策略的toString表示
            PARTITIONS_COUNT int 分区数
            REBALANCE_DELAY long 再平衡延迟时间(毫秒)
            REBALANCE_MODE String 再平衡模式
            REBALANCE_ORDER int 再平衡组顺序
            TOPOLOGY_VALIDATOR String 拓扑验证器的toString表示

            # 6.4.TASKS

            列名 数据类型 描述
            AFFINITY_CACHE_NAME String 映射缓存名
            AFFINITY_PARTITION_ID int 映射分区ID
            END_TIME long 结束时间
            EXEC_NAME String 执行任务的线程池名
            INTERNAL boolean 如果是内部任务则为true
            JOB_ID UUID 计算作业ID
            START_TIME long 启动时间
            TASK_CLASS_NAME String 任务类名
            TASK_NAME String 任务名
            TASK_NODE_ID UUID 发起任务的节点ID
            USER_VERSION String 任务版本

            # 6.5.JOBS

            列名 数据类型 描述
            ID UUID 作业ID
            SESSION_ID UUID 作业的会话ID,注意,对于作业所属的任务,SESSION_ID等于TASKS.SESSION_ID
            ORIGIN_NODE_ID UUID 发起作业的节点ID
            TASK_NAME String 任务名
            TASK_CLASSNAME String 任务类名
            AFFINITY_CACHE_IDS String 如果使用IgniteCompute.affinity...方法执行作业,则为一个或多个缓存的ID,如果使用的IgniteCompute API未关联某个缓存,则为空
            AFFINITY_PARTITION_ID int 如果使用IgniteCompute.affinity...方法执行作业,则为一个或多个分区的ID,如果使用的IgniteCompute API未关联某分区,则为空
            CREATE_TIME long 作业创建时间
            START_TIME long 作业开始时间
            FINISH_TIME long 作业完成时间
            EXECUTOR_NAME String 任务执行器名
            IS_FINISHING boolean 作业已完成则为true
            IS_INTERNAL boolean 如果为内部作业则为true
            IS_STARTED boolean 如果作业已启动则为true
            IS_TIMEDOUT boolean 如果作业在完成之前超时则为true
            STATE String 可能值:
            ACTIVE:作业正在执行;
            PASSIVE:将作业添加到执行队列;
            CANCELED:作业被取消

            # 6.6.SERVICES

            列名 数据类型 描述
            SERVICE_ID UUID 服务ID
            NAME String 服务名
            SERVICE_CLASS String 服务类名
            CACHE_NAME String 缓存名
            ORIGIN_NODE_ID UUID 发起方节点ID
            TOTAL_COUNT int 服务实例总数
            MAX_PER_NODE_COUNT int 每节点最大服务数
            AFFINITY_KEY String 服务的关联键值
            NODE_FILTER String 节点过滤器NodeFilter的toString表示
            STATICALLY_CONFIGURED boolean 服务配置为静态则为true

            # 6.7.TRANSACTIONS

            列名 数据类型 描述
            ORIGINATING_NODE_ID UUID
            STATE String
            XID UUID
            LABEL String
            START_TIME long
            ISOLATION String
            CONCURRENCY String
            KEYS_COUNT int
            CACHE_IDS String
            COLOCATED boolean
            DHT boolean
            DURATION long
            IMPLICIT boolean
            IMPLICIT_SINGLE boolean
            INTERNAL boolean
            LOCAL boolean
            LOCAL_NODE_ID UUID
            NEAR boolean
            ONE_PHASE_COMMIT boolean
            OTHER_NODE_ID UUID
            SUBJECT_ID UUID
            SYSTEM boolean
            THREAD_ID long
            TIMEOUT long
            TOP_VER String

            # 6.8.NODES

            列名 数据类型 描述
            NODE_ID UUID 节点ID
            CONSISTENT_ID String 节点的一致性ID
            VERSION String 节点的版本
            IS_CLIENT boolean 节点是否为客户端节点
            IS_DAEMON boolean 节点是否为守护节点
            NODE_ORDER long 节点在拓扑中的顺序
            ADDRESSES String 节点的地址
            HOSTNAMES String 节点的主机名
            IS_LOCAL boolean 节点是否为本地节点

            # 6.9.NODE_ATTRIBUTES

            列名 数据类型 描述
            NODE_ID UUID 节点ID
            NAME String 属性名
            VALUE String 属性值

            # 6.10.BASELINE_NODES

            列名 数据类型 描述
            CONSISTENT_ID String 节点一致性ID
            ONLINE boolean 节点的运行状态

            # 6.11.CLIENT_CONNECTIONS

            列名 数据类型 描述
            CONNECTION_ID long 连接ID
            LOCAL_ADDRESS IP地址 本地节点的IP地址
            REMOTE_ADDRESS IP地址 远程节点的IP地址
            TYPE String 连接类型
            USER String 用户名
            VERSION String 协议版本

            # 6.12.STRIPED_THREADPOOL_QUEUE

            列名 数据类型 描述
            STRIPE_INDEX int 平行线程的索引值
            DESCRIPTION String 任务的toString表示
            THREAD_NAME String 平行线程名
            TASK_NAME String 任务类名

            # 6.13.DATASTREAM_THREADPOOL_QUEUE

            列名 数据类型 描述
            STRIPE_INDEX int 平行线程索引值
            DESCRIPTION String 任务的toString表示
            THREAD_NAME String 平行线程名
            TASK_NAME String 任务类名

            # 6.14.SCAN_QUERIES

            列名 数据类型 描述
            ORIGIN_NODE_ID UUID 发起查询的节点ID
            QUERY_ID long 查询ID
            CACHE_NAME String 缓存名
            CACHE_ID int 缓存ID
            CACHE_GROUP_ID int 缓存组ID
            CACHE_GROUP_NAME String 缓存组名
            START_TIME long 查询开始时间
            DURATION long 查询期限
            CANCELED boolean 如果取消了则为true
            FILTER String 过滤器的toString表示
            KEEP_BINARY boolean 如果开启了keepBinary则为true
            LOCAL boolean 如果仅为本地查询则为true
            PAGE_SIZE int 页面大小
            PARTITION int 查询分区ID
            SUBJECT_ID UUID 发起查询的用户ID
            TASK_NAME String 任务名
            TOPOLOGY String 拓扑版本
            TRANSFORMER String 转换器的toString表示

            # 6.15.CONTINUOUS_QUERIES

            列名 数据类型 描述
            CACHE_NAME String 缓存名
            LOCAL_LISTENER String 本地监听器的toString表示
            REMOTE_FILTER String 远程过滤器的toString表示
            REMOTE_TRANSFORMER String 远程转换器的toString表示
            LOCAL_TRANSFORMED_LISTENER String 本地转换监听器的toString表示
            LAST_SEND_TIME long 事件批次上次发给持续查询发起节点的时间
            AUTO_UNSUBSCRIBE boolean 当节点断开或发起节点离开时,如果持续查询应该停止,则为true
            BUFFER_SIZE int 事件批次缓冲区大小
            DELAYED_REGISTER boolean 如果在相应缓存启动时就启动持续查询,则为true
            INTERVAL long 通知间隔时间
            IS_EVENTS boolean 如果用于订阅远程事件则为true
            IS_MESSAGING boolean 如果用于订阅消息则为true
            IS_QUERY boolean 如果用户启动了持续查询则为true
            KEEP_BINARY boolean 如果开启了keepBinary则为true
            NODE_ID UUID 发起节点ID
            NOTIFY_EXISTING boolean 如果监听器应通知现有条目则为true
            OLD_VALUE_REQUIRED boolean 如果事件中应包含条目的旧值则为true
            ROUTINE_ID UUID 查询ID
            TOPIC String 查询主题名

            # 6.16.SQL_QUERIES

            列名 数据类型 描述
            QUERY_ID UUID 查询ID
            SQL String 查询文本
            ORIGIN_NODE_ID UUID 发起查询的节点ID
            START_TIME date 查询开始时间
            DURATION long 查询执行期限
            LOCAL boolean 如果仅为本地查询则为true
            SCHEMA_NAME String 模式名

            # 6.17.SQL_QUERIES_HISTORY

            列名 数据类型 描述
            SCHEMA_NAME String 模式名
            SQL String SQL文本
            LOCAL boolean 如果仅为本地查询则为true
            EXECUTIONS long 执行次数
            FAILURES long 失败次数
            DURATION_MIN long 最短执行期限
            DURATION_MAX long 最长执行期限
            LAST_START_TIME date 上次执行时间

            # 6.18.SCHEMAS

            列名 数据类型 描述
            NAME String 模式名
            PREDEFINED boolean 如果是预定义模式则为true

            # 6.19.NODE_METRICS

            列名 数据类型 描述
            NODE_ID UUID 节点ID
            LAST_UPDATE_TIME TIMESTAMP 指标数据上次更新的时间
            MAX_ACTIVE_JOBS INT 节点曾经的最大并发作业数
            CUR_ACTIVE_JOBS INT 节点当前正在运行的活跃作业数
            AVG_ACTIVE_JOBS FLOAT 节点并发执行的平均活跃作业数
            MAX_WAITING_JOBS INT 节点曾经的最大等待作业数
            CUR_WAITING_JOBS INT 节点当前正在等待执行的作业数
            AVG_WAITING_JOBS FLOAT 节点的平均等待作业数
            MAX_REJECTED_JOBS INT 在一次冲突解决操作期间一次性的最大拒绝作业数
            CUR_REJECTED_JOBS INT 最近一次冲突解决操作中的拒绝作业数
            AVG_REJECTED_JOBS FLOAT 在冲突解决操作期间的平均拒绝作业数
            TOTAL_REJECTED_JOBS INT 节点启动后在冲突解决期间的拒绝作业总数
            MAX_CANCELED_JOBS INT 节点的并发最大取消作业数
            CUR_CANCELED_JOBS INT 节点仍在运行的已取消作业数
            AVG_CANCELED_JOBS FLOAT 节点的并发平均取消作业数
            TOTAL_CANCELED_JOBS INT 节点启动后取消作业总数
            MAX_JOBS_WAIT_TIME TIME 节点中的作业执行前在队列中的最大等待时间
            CUR_JOBS_WAIT_TIME TIME 节点当前正在等待执行的作业的最长等待时间
            AVG_JOBS_WAIT_TIME TIME 节点中的作业执行前在队列中的平均等待时间
            MAX_JOBS_EXECUTE_TIME TIME 节点作业的最长执行时间
            CUR_JOBS_EXECUTE_TIME TIME 节点当前正在执行的作业的执行时间
            AVG_JOBS_EXECUTE_TIME TIME 节点作业的平均执行时间
            TOTAL_JOBS_EXECUTE_TIME TIME 节点启动后已完成的作业的执行总时间
            TOTAL_EXECUTED_JOBS INT 节点启动后处理的作业总数
            TOTAL_EXECUTED_TASKS INT 节点处理过的任务总数
            TOTAL_BUSY_TIME TIME 节点处理作业花费的总时间
            TOTAL_IDLE_TIME TIME 节点的总空闲(未执行任何作业)时间
            CUR_IDLE_TIME TIME 节点执行最近的作业后的空闲时间
            BUSY_TIME_PERCENTAGE FLOAT 节点执行作业和空闲的时间占比
            IDLE_TIME_PERCENTAGE FLOAT 节点空闲和执行作业的时间占比
            TOTAL_CPU INT JVM的可用CPU数量
            CUR_CPU_LOAD DOUBLE 在范围(0, 1)中以分数表示的CPU使用率
            AVG_CPU_LOAD DOUBLE 在范围(0, 1)中以分数表示的CPU平均使用率
            CUR_GC_CPU_LOAD DOUBLE 上次指标更新后花费在GC上的平均时间,指标默认2秒更新一次
            HEAP_MEMORY_INIT LONG JVM最初从操作系统申请用于内存管理的堆内存量(字节)。如果初始内存大小未定义,则显示-1
            HEAP_MEMORY_USED LONG 当前用于对象分配的堆大小,堆由一个或多个内存池组成,该值为所有堆内存池中使用的堆内存总数
            HEAP_MEMORY_COMMITED LONG JVM使用的堆内存量(字节),这个内存量保证由JVM使用,堆由一个或多个内存池组成,该值为所有堆内存池中JVM使用的堆内存总数
            HEAP_MEMORY_MAX LONG 用于内存管理的最大堆内存量(字节),如果最大内存量未指定,则显示-1
            HEAP_MEMORY_TOTAL LONG 堆内存总量(字节),如果总内存量未指定,则显示-1
            NONHEAP_MEMORY_INIT LONG JVM最初从操作系统申请用于内存管理的非堆内存量(字节)。如果初始内存大小未定义,则显示-1
            NONHEAP_MEMORY_USED LONG JVM当前使用的非堆内存量,非堆内存由一个或多个内存池组成,该值为所有非堆内存池中使用的非堆内存总数
            NONHEAP_MEMORY_COMMITED LONG JVM使用的非堆内存量(字节),这个内存量保证由JVM使用。非堆内存由一个或多个内存池组成,该值为所有非堆内存池中使用的非堆内存总数
            NONHEAP_MEMORY_MAX LONG 可用于内存管理的最大非堆内存量(字节),如果最大内存量未指定,则显示-1
            NONHEAP_MEMORY_TOTAL LONG 可用于内存管理的非堆内存总量(字节),如果总内存量未指定,则显示-1
            UPTIME TIME JVM的正常运行时间
            JVM_START_TIME TIMESTAMP JVM的启动时间
            NODE_START_TIME TIMESTAMP 节点的启动时间
            LAST_DATA_VERSION LONG 数据网格为所有缓存操作赋予的不断增长的版本数,该值为节点的最新数据版本
            CUR_THREAD_COUNT INT 包括守护和非守护线程在内的所有有效线程总数
            MAX_THREAD_COUNT INT JVM启动或峰值重置后的最大有效线程数
            TOTAL_THREAD_COUNT LONG JVM启动后启动的线程总数
            CUR_DAEMON_THREAD_COUNT INT 当前的有效守护线程数
            SENT_MESSAGES_COUNT INT 节点发送的通信消息总量
            SENT_BYTES_COUNT LONG 发送的字节量
            RECEIVED_MESSAGES_COUNT INT 节点接收的通信消息总量
            RECEIVED_BYTES_COUNT LONG 接收的字节量
            OUTBOUND_MESSAGES_QUEUE INT 出站消息队列大小

            # 6.20.TABLES

            列名 数据类型 描述
            TABLE_NAME String 表名
            SCHEMA_NAME String 表所属模式名
            CACHE_NAME String 表对应的缓存名
            CACHE_ID int 表对应的缓存ID
            AFFINITY_KEY_COLUMN String 关联键列名
            KEY_ALIAS String 主键列别名
            VALUE_ALIAS String 值列别名
            KEY_TYPE_NAME String 主键类型名
            VALUE_TYPE_NAME String 值类型名
            IS_INDEX_REBUILD_IN_PROGRESS boolean 如果表索引正在重建过程中则为true

            # 6.21.TABLE_COLUMNS

            列名 数据类型 描述
            COLUMN_NAME String 列名
            TABLE_NAME String 表名
            SCHEMA_NAME String 模式名
            AFFINITY_COLUMN boolean 如果该列为关联键则为true
            AUTO_INCREMENT boolean 如果是自增字段则为true
            DEFAULT_VALUE String 默认值
            NULLABLE boolean 如果允许为空则为true
            PK boolean 如果是主键则为true
            PRECISION int 列精度
            SCALE int 列标度
            TYPE String 列类型

            # 6.22.VIEWS

            列名 数据类型 描述
            NAME String 视图名
            SCHEMA String 模式名
            DESCRIPTION String 描述

            # 6.23.VIEW_COLUMNS

            列名 数据类型 描述
            COLUMN_NAME String 列名
            VIEW_NAME String 视图名
            SCHEMA_NAME String 模式名
            DEFAULT_VALUE String 默认值
            NULLABLE boolean 如果允许为空则为true
            PRECISION int 列精度
            SCALE int 列标度
            TYPE String 列类型

            # 6.24.INDEXES

            列名 数据类型 描述
            INDEX_NAME String 索引名
            INDEX_TYPE String 索引类型
            COLUMNS String 索引中的列名
            SCHEMA_NAME String 模式名
            TABLE_NAME String 表名
            CACHE_NAME String 缓存名
            CACHE_ID int 缓存ID
            INLINE_SIZE int 内联大小(字节)
            IS_PK boolean 是否为主键索引
            IS_UNIQUE boolean 是否为唯一索引

            # 6.25.PAGE_LISTS

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

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

            # 6.25.1.CACHE_GROUP_PAGE_LISTS

            列名 数据类型 描述
            CACHE_GROUP_ID int 缓存组ID
            PARTITION_ID int 分区ID
            NAME String 页面列表名
            BUCKET_NUMBER int 存储桶号
            BUCKET_SIZE long 存储桶中页面数
            STRIPES_COUNT int 存储桶使用的平行线程数,平行线程用于避免争用
            CACHED_PAGES_COUNT int 此存储桶的堆内页面列表缓存中的页面数

            # 6.25.2.DATA_REGION_PAGE_LISTS

            列名 数据类型 描述
            NAME String 页面列表名
            BUCKET_NUMBER int 存储桶号
            BUCKET_SIZE long 存储桶中页面数
            STRIPES_COUNT int 存储桶使用的平行线程数,平行线程用于避免争用
            CACHED_PAGES_COUNT int 此存储桶的堆内页面列表缓存中的页面数

            # 6.26.PARTITION_STATES

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

            # 6.27.BINARY_METADATA

            列名 数据类型 描述
            TYPE_ID int 类型ID
            TYPE_NAME String 类型名字
            AFF_KEY_FIELD_NAME String 关联键字段名
            FIELDS_COUNT int 字段数量
            FIELDS String 记录对象字段
            SCHEMAS_IDS String 该类型注册的模式ID
            IS_ENUM boolean 是否为枚举类型

            # 6.28.METASTORAGE

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

            # 7.追踪

            警告

            这是一个试验性API。

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

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

            下列Ignite API支持追踪:

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

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

            # 7.1.配置追踪

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

              # 7.2.启用追踪采样

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

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

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

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

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

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

              # 7.2.1.通过控制脚本

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

              export IGNITE_ENABLE_EXPERIMENTAL_COMMAND=true
              

              启用对某API的追踪:

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

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

              # 7.2.2.通过编程方式

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

              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
              //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.open SQL查询游标打开
              sql.cursor.close SQL查询游标关闭
              sql.cursor.cancel SQL查询游标取消
              sql.query.parse SQL查询解析 sql.parser.cache.hit:是否由于缓存结果而跳过了对SQL查询的解析
              sql.query.execute.request SQL查询执行请求的处理 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.response SQL查询执行失败消息的处理
              sql.dml.query.execute.request SQL DML查询执行请求的处理 sql.query.text:SQL查询文本
              sql.dml.query.response 查询发起节点对SQL DML查询执行结果的处理
              sql.query.cancel.request SQL查询取消请求的处理
              sql.iterator.open SQL查询迭代器打开
              sql.iterator.close SQL查询迭代器关闭
              sql.page.fetch 获取SQL查询结果页面 sql.page.rows:结果页面包含的行数
              sql.page.wait 等待从远程节点接收SQL查询结果页面
              sql.index.range.request SQL索引范围请求的处理 sql.index:SQL索引名,sql.table:SQL表名,sql.index.range.rows:索引范围请求结果包含的行数
              sql.index.range.response SQL索引范围响应的处理
              sql.dml.query.execute SQL DML查询的执行
              sql.command.query.execute SQL命令查询的执行,可能是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.process SQL批处理更新的处理

              # 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_SIZE Long 32Gb 最大性能统计文件大小(字节)。当超出文件大小时,性能统计信息收集将停止
              IGNITE_PERF_STAT_BUFFER_SIZE Integer 32Mb 性能统计信息堆外缓冲区大小(字节)
              IGNITE_PERF_STAT_FLUSH_SIZE Integer 8Mb 要刷新的最小性能统计批次大小(字节)
              IGNITE_PERF_STAT_CACHED_STRINGS_THRESHOLD Integer 1024 最大性能统计缓存字符串阈值。超过阈值时,将停止字符串缓存

              18624049226

              最后更新时间:: 11/25/2022, 4:58:37 PM