It's amazing, let's simplify the problem.

1.Start a node using the following configuration file

<beansxmlns="http://www.springframework.org/schema/beans";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd";>
<beanid="ignite.cfg"class="org.apache.ignite.configuration.IgniteConfiguration">
<propertyname="peerClassLoadingEnabled"value="true"/>
<propertyname="metricExporterSpi">
<list>
<beanclass="org.apache.ignite.spi.metric.sql.SqlViewMetricExporterSpi"/>
</list>
</property>
</bean>
</beans>

2.Use sqlline to connect the current cluster:

./sqlline.sh --verbose=true -u jdbc:ignite:thin://localhost

3.Execute the following SQL in the `apache-ignite-2.9.1-bin/examples/sql/world.sql`file:

CREATETABLECity (
ID INT,
NameVARCHAR,
CountryCode CHAR(3),
District VARCHAR,
PopulationINT,
PRIMARYKEY(ID, CountryCode)
) WITH"template=partitioned, backups=1, affinityKey=CountryCode, CACHE_NAME=City, KEY_TYPE=demo.model.CityKey, VALUE_TYPE=demo.model.City"; INSERTINTOCity(ID, Name, CountryCode, District, Population) VALUES(1,'Kabul','AFG','Kabol',1780000);

4.Execute the following code:
        IgniteConfiguration cfg = new IgniteConfiguration();
        cfg.setClientMode(true);
        cfg.setPeerClassLoadingEnabled(true);
        cfg.setMetricExporterSpi(new SqlViewMetricExporterSpi());
        Ignite ignite = Ignition.start(cfg);

        IgniteCache cache = ignite.cache("City");

        String sql = "SELECT count(*) FROM CITY;";
        cache.query(new SqlFieldsQuery(sql)).getAll();
5.Execute the following SQL in the SQLLine:
select * from sys.metrics where name like 'cache.City.Query%';
6.Got it!

在 2021/2/1 下午4:39, Ilya Kasnacheev 写道:
Hello!

No, this is not correct.

Even if table is created through JDBC, nodes will collect metrics for its SqlFieldsQuery's: | cache.SQL_PUBLIC_PERSON.QueryCompleted | 2                              |                                | | cache.SQL_PUBLIC_PERSON.QueryExecuted | 2                              |                                | | cache.SQL_PUBLIC_PERSON.QueryFailed | 0                              |                                | | cache.SQL_PUBLIC_PERSON.QueryMaximumTime | 63                             |                                | | cache.SQL_PUBLIC_PERSON.QueryMinimalTime | 21                             |                                | | cache.SQL_PUBLIC_PERSON.QuerySumTime | 84                             |                                |

Regards,
--
Ilya Kasnacheev


сб, 30 янв. 2021 г. в 05:10, 38797715 <38797...@qq.com <mailto:38797...@qq.com>>:

    Hello Ilya,

    I got it.
    If the table is created through JDBC, the metric data will be 0.
    Only when the CREATE TABLE statement is executed through
    SqlFieldsQuery, the data will be counted.

    I think it's a bug,Ilya, can you confirm again?

    在 2021/1/30 上午12:06, Ilya Kasnacheev 写道:
    Hello!

    I can see some values on the server when executing SqlFieldsQuery
    on the same server:
    | cache.foo.QueryCompleted       | 3
                                 |                                |
    | cache.foo.QueryExecuted        | 3
                                 |                                |
    | cache.foo.QueryFailed          | 0
                                 |                                |
    | cache.foo.QueryMaximumTime     | 350
                               |                                |
    | cache.foo.QueryMinimalTime     | 101
                               |                                |
    | cache.foo.QuerySumTime         | 665
                               |                                |

    I can also see them on client, but you need to a) specify
    ClientConnectorConfiguration on client node with non-default
    port, b) connect to that port with JDBC, and c) Enable metrics
    exporter SPI on the client node. Then I can see the same, after
    running SqlFieldQuery's on client:
    | cache.foo.QueryCompleted       | 3
                                 |                                |
    | cache.foo.QueryExecuted        | 3
                                 |                                |
    | cache.foo.QueryFailed          | 0
                                 |                                |
    | cache.foo.QueryMaximumTime     | 269
                               |                                |
    | cache.foo.QueryMinimalTime     | 20
                                |                                |
    | cache.foo.QuerySumTime         | 424
                               |                                |

    Regards,
-- Ilya Kasnacheev


    чт, 28 янв. 2021 г. в 14:42, 38797715 <38797...@qq.com
    <mailto:38797...@qq.com>>:

        Hello Ilya,

        if use sqlline execute sql,the feedback result of the
        following statement is correct.

        SELECT * FROM sys.metrics WHERE name LIKE 'sql%' ORDER BY name;

        I used SqlFieldsQuery again to do the above tests, and the
        results were all 0. I think there may be a issue in this.

        在 2021/1/28 下午6:52, Ilya Kasnacheev 写道:
        Hello!

        I think these metrics will be gathered for
        ScanQuery/SqlFieldsQuery executed via native Java Query API,
        but they will not be gathered for statements executed via JDBC.

        One obvious reason is that Java Query API's queries are
        bound to a specific cache. JDBC query is not bound to
        specific cache: JDBC query may operate on zero or more
        caches. We could map these queries back to participating
        caches, but I don't see that we do that.

        You could still  use sql.queries.user. metrics:
        SELECT * FROM sys.metrics WHERE name LIKE 'sql%' ORDER BY name;

        Regards,
-- Ilya Kasnacheev


        ср, 27 янв. 2021 г. в 15:29, 38797715 <38797...@qq.com
        <mailto:38797...@qq.com>>:

            Hello Ilya,

            The test method is as follows:

            Start 2 nodes on the localhost.
            Use the CREATE TABLE statement to create a table;
            Use the COPY command to load some data;
            Access to cluster through sqlline;
            Execute select count (*) from T;
            Execute select * from sys.metrics  WHERE name LIKE
            '%cache.T%';
            At this time, you will find that the relevant data are
            all 0, but the value of OffHeapEntriesCount is still
            correct.

            If you use sqlline to access another node, the result is
            the same.

            The configuration file to start the cluster is as follows:

            
<beanid="ignite.cfg"class="org.apache.ignite.configuration.IgniteConfiguration">
            <propertyname="peerClassLoadingEnabled"value="true"/>
            
<propertyname="consistentId"value="#{systemEnvironment['CONSISTENTID']}"/>
            <propertyname="metricExporterSpi">
            <list>
            
<beanclass="org.apache.ignite.spi.metric.sql.SqlViewMetricExporterSpi"/>
            </list>
            </property>
            <propertyname="cacheConfiguration">
            <list>
            
<beanid="partitioned-cache-template"abstract="true"class="org.apache.ignite.configuration.CacheConfiguration">
            <propertyname="name"value="cache-partitioned*"/>
            <propertyname="cacheMode"value="PARTITIONED"/>
            <propertyname="backups"value="0"/>
            <propertyname="statisticsEnabled"value="true"/>
            <propertyname="queryParallelism"value="2"/>
            <propertyname="partitionLossPolicy"value="READ_WRITE_SAFE"/>
            </bean>
            
<beanid="replicated-cache-template"abstract="true"class="org.apache.ignite.configuration.CacheConfiguration">
            <propertyname="name"value="cache-replicated*"/>
            <propertyname="cacheMode"value="REPLICATED"/>
            <propertyname="statisticsEnabled"value="true"/>
            <propertyname="partitionLossPolicy"value="READ_WRITE_SAFE"/>
            </bean>
            </list>
            </property>
            <!-- Enabling Apache Ignite Persistent Store. -->
            <propertyname="dataStorageConfiguration">
            
<beanclass="org.apache.ignite.configuration.DataStorageConfiguration">
            <propertyname="metricsEnabled"value="true"/>
            <propertyname="defaultDataRegionConfiguration">
            
<beanclass="org.apache.ignite.configuration.DataRegionConfiguration">
            <propertyname="persistenceEnabled"value="true"/>
            <propertyname="metricsEnabled"value="true"/>
            <propertyname="maxSize"value="#{2L * 1024 * 1024 * 1024}"/>
            </bean>
            </property>
            </bean>
            </property>
            </bean>
            在 2021/1/27 下午6:24, Ilya Kasnacheev 写道:
            Hello!

            These values are per-node, as far as I know. Is it
            possible that you have connected to a node which does
            not handle any queries (as reducer, anyway)?

            Regards,
-- Ilya Kasnacheev


            вт, 26 янв. 2021 г. в 13:48, 38797715 <38797...@qq.com
            <mailto:38797...@qq.com>>:

                Hi,

                We found that SYS.METRICS View some data is always
                0, such as
                
QueryCompleted,QueryExecuted,QuerySumTime,QueryCompleted,QuerySumTime

                and QueryMaximumTime. This is a bug? Or what
                configuration is needed? Or
                the related functions have not been implemented yet?

Reply via email to