美文网首页
Apache Phoenix(十九)新特性之指标

Apache Phoenix(十九)新特性之指标

作者: 我知他风雨兼程途径日暮不赏 | 来源:发表于2020-03-04 13:37 被阅读0次

    Phoenix给出了各种指标,这些指标提供了对Phoenix客户机在执行各种SQL语句时发生的情况的洞察。这些指标在客户端JVM中以两种方式收集:

    • 请求水平指标:在单独的SQL语句级别收集
    • 全局指标:在客户端JVM级别收集

    请求水平指标有助于以更细粒度的级别计算Phoenix执行的每条SQL语句的工作量。这些指标可以分为三类:

    • 变异指标
    • 扫描任务指标
    • 总体查询指标

    变异指标(Mutation Metrics)

    • MUTATION_BATCH_SIZE:突变的批量大小
    • MUTATION_BYTES:突变的大小(以字节为单位)
    • MUTATION_COMMIT_TIME:提交突变所需要的时间

    扫描任务指标(Scan Task Metrics)

    • NUM_PARALLEL_SCANS:并行执行的扫描次数。
    • SCAN_BYTES:扫描读取的字节数
    • MEMORY_CHUNK_BYTES:内存管理器分配的字节数
    • MEMORY_WAIT_TIME:等待通过内存管理器分配内存所需的时间(以毫秒为单位)
    • SPOOL_FILE_SIZE:以字节创建的spool文件的大小
    • SPOOL_FILE_COUNTER :创建的spool文件的数量
    • CACHE_REFRESH_SPLITS_COUNTER:Phoenix的元数据缓存由于分裂而刷新的次数
    • TASK_QUEUE_WAIT_TIME:任务必须在线程池执行器的队列中等待(以毫秒为单位)。
    • TASK_END_TO_END_TIME:任务从创建到完成所花费的毫秒时间。
    • TASK_EXECUTION_TIME:以毫秒为单位的任务执行时间。
    • TASK_EXECUTED_COUNTER:提交给线程池执行程序的任务数的计数器。
    • TASK_REJECTED_COUNTER:线程池执行程序拒绝的任务数的计数器。

    总体查询指标(Overall Query Metrics)

    • QUERY_TIMEOUT_COUNTER:查询超时的次数
    • QUERY_FAILED_COUNTER:查询失败的次数
    • WALL_CLOCK_TIME_MS:整个查询执行所用的wall时间。
    • RESULT_SET_TIME_MS:使用resultSet.next()读取所有记录所用的wall时间
      下面是一些如何使用SQL语句级指标的例子:
    • 日志和报告查询执行细节,语句执行后可以用于分析。
    • 根据持续时间报告顶级SQL查询。要使用的指标:WALL_CLOCK_TIME_MS
    • 检查查询是否因为超时而失败。使用的指标:QUERY_TIMEOUT_COUNTER > 0。
    • 监视从HBase写入或读取SQL语句的字节数。要使用的指标:MUTATION_BYTES和SCAN_BYTES
    • 检查查询是否做了太多的工作,或者是否需要进行调优。可以使用的指标标准有:TASK_EXECUTED_COUNTER、TASK_QUEUE_WAIT_TIME、WALL_CLOCK_TIME_MS
    • 检查一个成功的查询是否面临线程饥饿,即线程池中的线程数量可能需要增加。TASK_EXECUTION_TIME和TASK_END_TO_END_TIME之间的比较大的差异就是这种情况的表现。
      可以为每个Phoenix JDBC连接打开/关闭请求级别指标。下面是一个如何做到这一点的例子:
     Properties props = new Properties();
        props.setProperty(QueryServices.COLLECT_REQUEST_LEVEL_METRICS, “true”);
        try (Connection conn = DriverManager.getConnection(getUrl(), props)) {
            .....
        }
    

    一个典型的模式,一个如何可以获得的查询读取指标:

    Map<String, Map<String, Long>> overAllQueryMetrics = null;
        Map<String, Map<String, Long>> requestReadMetrics = null;
        try (ResultSet rs = stmt.executeQuery()) {
              while(rs.next()) {
                  .....
              }
              overAllQueryMetrics = PhoenixRuntime.getOverAllReadRequestMetrics(rs);
              requestReadMetrics = PhoenixRuntime.getRequestReadMetrics(rs);
              // log or report metrics as needed
              PhoenixRuntime.resetMetrics(rs);
        }
    

    你也可以通过这样做来获得DML语句的写相关指标(每个表收集):

    Map<String, Map<String, Long>> mutationWriteMetrics = null;
        Map<String, Map<String, Long>> mutationReadMetrics = null;
        try (Connection conn = DriverManager.getConnection(url)) {
              conn.createStatement.executeUpdate(dml1);
              ....
              conn.createStatement.executeUpdate(dml2);
              ...
              conn.createStatement.executeUpdate(dml3);
              ...
              conn.commit();
              mutationWriteMetrics = PhoenixRuntime.getWriteMetricsForMutationsSinceLastReset(conn);
              mutationReadMetrics = PhoenixRuntime.getReadMetricsForMutationsSinceLastReset(conn);
              PhoenixRuntime.resetMetrics(rs);
        }
    

    另一方面,全局指标是在Phoenix客户机的JVM级别收集的。这些指标可以用来建立一个趋势,并从客户的角度来观察phoenix内部的发展趋势。除了上述报告的请求级指标外,全局指标还包括以下计数器:

    • MUTATION_SQL_COUNTER:计数器,用于突变sql语句的数目
    • SELECT_SQL_COUNTER:计数器的数量的sql查询
    • OPEN_PHOENIX_CONNECTIONS_COUNTER:打开phoenix连接的数量
      全局指标可能有助于监视和调优执行环境的各个方面。例如:指标TASK_REJECTED_COUNTER的增加可能是提交了太多工作的征兆,或者是phoenix线程池队列深度或线程数量或者两者都需要增加的事实。类似地,TASK_EXECUTION_TIME在一段时间内的峰值可能是几种情况的症状,包括超载的区域服务器、网络故障、客户端或区域服务器正在进行垃圾收集,等等。
      通过设置属性phoenix.query.global.metrics可以打开/关闭(默认情况下为打开)全局客户端指标集合。在客户端hbase-site.xml中启用true/false。下面是一个代码片段,展示了如何通过使用定期运行的调度作业来记录/报告全局指标:
       ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
        service.submit(new Runnable() {
    
            @Override
            public void run() {
                Collection<GlobalMetric> metrics = PhoenixRuntime.getGlobalPhoenixClientMetrics();
                for (GlobalMetric m : metrics) {
                    ... // log or report for trending purposes
                }
    
            }
        });
    

    相关文章

      网友评论

          本文标题:Apache Phoenix(十九)新特性之指标

          本文链接:https://www.haomeiwen.com/subject/kzzplhtx.html