This is an automated email from the ASF dual-hosted git repository. leirui pushed a commit to branch research/M4-visualization in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit b24dbd33b034bf71f505476f9b9f97e481ef318f Author: Lei Rui <[email protected]> AuthorDate: Tue Jun 13 22:08:35 2023 +0800 [important] four-layer metrics design done, from client, server execute&fetch, dataset&executor, basic ops ABCD, improved D search array 4 functions --- .../dataset/groupby/LocalGroupByExecutor4CPV.java | 18 ++ .../iotdb/tsfile/read/common/ChunkSuit4CPV.java | 40 ++- .../iotdb/tsfile/read/common/IOMonitor2.java | 282 +++++++++++++++++---- .../iotdb/tsfile/read/reader/page/PageReader.java | 3 + 4 files changed, 289 insertions(+), 54 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java index b4c59643688..92026420e17 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor4CPV.java @@ -38,6 +38,8 @@ import org.apache.iotdb.tsfile.file.metadata.statistics.IntegerStatistics; import org.apache.iotdb.tsfile.file.metadata.statistics.LongStatistics; import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.common.ChunkSuit4CPV; +import org.apache.iotdb.tsfile.read.common.IOMonitor2; +import org.apache.iotdb.tsfile.read.common.IOMonitor2.Operation; import org.apache.iotdb.tsfile.read.common.TimeRange; import org.apache.iotdb.tsfile.read.filter.GroupByFilter; import org.apache.iotdb.tsfile.read.filter.basic.Filter; @@ -93,6 +95,7 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor { TsFileFilter fileFilter, boolean ascending) throws StorageEngineException, QueryProcessException { + long start = System.nanoTime(); this.tsDataType = dataType; // this.mergeReader = new PriorityMergeReader(); @@ -225,6 +228,8 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor { } catch (IOException e) { throw new QueryProcessException(e.getMessage()); } + + IOMonitor2.addMeasure(Operation.M4_LSM_INIT_LOAD_ALL_CHUNKMETADATAS, System.nanoTime() - start); } @Override @@ -309,16 +314,29 @@ public class LocalGroupByExecutor4CPV implements GroupByExecutor { result.reset(); } + long start = System.nanoTime(); getCurrentChunkListFromFutureChunkList(curStartTime, curEndTime, startTime, endTime, interval); + IOMonitor2.addMeasure(Operation.M4_LSM_MERGE_M4_TIME_SPAN, System.nanoTime() - start); if (currentChunkList.size() == 0) { return results; } + start = System.nanoTime(); calculateFirstPoint(currentChunkList, startTime, endTime, interval, curStartTime); + IOMonitor2.addMeasure(Operation.M4_LSM_FP, System.nanoTime() - start); + + start = System.nanoTime(); calculateLastPoint(currentChunkList, startTime, endTime, interval, curStartTime); + IOMonitor2.addMeasure(Operation.M4_LSM_LP, System.nanoTime() - start); + + start = System.nanoTime(); calculateBottomPoint(currentChunkList, startTime, endTime, interval, curStartTime); + IOMonitor2.addMeasure(Operation.M4_LSM_BP, System.nanoTime() - start); + + start = System.nanoTime(); calculateTopPoint(currentChunkList, startTime, endTime, interval, curStartTime); + IOMonitor2.addMeasure(Operation.M4_LSM_TP, System.nanoTime() - start); return results; } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java index 0834348a268..67520439d22 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/ChunkSuit4CPV.java @@ -29,6 +29,7 @@ import org.apache.iotdb.tsfile.file.metadata.statistics.LongStatistics; import org.apache.iotdb.tsfile.file.metadata.statistics.MinMaxInfo; import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.file.metadata.statistics.StepRegress; +import org.apache.iotdb.tsfile.read.common.IOMonitor2.Operation; import org.apache.iotdb.tsfile.read.reader.page.PageReader; import java.io.IOException; @@ -245,10 +246,12 @@ public class ChunkSuit4CPV { * @return the position of the point, starting from 0 */ public int updateFPwithTheClosetPointEqualOrAfter(long targetTimestamp) throws IOException { + long start = System.nanoTime(); + int estimatedPos; if (TSFileDescriptor.getInstance().getConfig().isUseChunkIndex()) { StepRegress stepRegress = chunkMetadata.getStatistics().getStepRegress(); // infer position starts from 1, so minus 1 here - int estimatedPos = (int) Math.round(stepRegress.infer(targetTimestamp)) - 1; + estimatedPos = (int) Math.round(stepRegress.infer(targetTimestamp)) - 1; // search from estimatePos in the timeBuffer to find the closet timestamp equal to or larger // than the given timestamp @@ -256,15 +259,18 @@ public class ChunkSuit4CPV { while (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) { estimatedPos++; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } } else if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) { while (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) { estimatedPos--; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } if (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) { estimatedPos++; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } // else equal } // else equal this.startPos = estimatedPos; // note this @@ -298,16 +304,16 @@ public class ChunkSuit4CPV { default: throw new IOException("Unsupported data type!"); } - return estimatedPos; } else { // search from estimatePos in the timeBuffer to find the closet timestamp equal to or larger // than the given timestamp - int estimatedPos = -1; + estimatedPos = -1; pageReader.timeBuffer.position(0); pageReader.valueBuffer.position(pageReader.timeBufferLength); while (pageReader.timeBuffer.remaining() > 0) { estimatedPos++; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; long t = pageReader.timeBuffer.getLong(); if (t >= targetTimestamp) { break; @@ -346,6 +352,8 @@ public class ChunkSuit4CPV { } return estimatedPos; } + IOMonitor2.addMeasure(Operation.SEARCH_ARRAY_b_genFP, System.nanoTime() - start); + return estimatedPos; } /** @@ -356,10 +364,12 @@ public class ChunkSuit4CPV { * @return the position of the point, starting from 0 */ public int updateLPwithTheClosetPointEqualOrBefore(long targetTimestamp) throws IOException { + long start = System.nanoTime(); + int estimatedPos; if (TSFileDescriptor.getInstance().getConfig().isUseChunkIndex()) { StepRegress stepRegress = chunkMetadata.getStatistics().getStepRegress(); // infer position starts from 1, so minus 1 here - int estimatedPos = (int) Math.round(stepRegress.infer(targetTimestamp)) - 1; + estimatedPos = (int) Math.round(stepRegress.infer(targetTimestamp)) - 1; // search from estimatePos in the timeBuffer to find the closet timestamp equal to or smaller // than the given timestamp @@ -367,15 +377,18 @@ public class ChunkSuit4CPV { while (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) { estimatedPos--; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } } else if (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) { while (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) { estimatedPos++; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) { estimatedPos--; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } // else equal } // else equal this.endPos = estimatedPos; // note this @@ -413,12 +426,13 @@ public class ChunkSuit4CPV { } else { // to find the closet timestamp equal to or smaller // than the given timestamp - int estimatedPos = -1; + estimatedPos = -1; pageReader.timeBuffer.position(0); pageReader.valueBuffer.position(pageReader.timeBufferLength); while (pageReader.timeBuffer.remaining() > 0) { estimatedPos++; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; long t = pageReader.timeBuffer.getLong(); if (t >= targetTimestamp) { break; @@ -426,6 +440,7 @@ public class ChunkSuit4CPV { } if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) { IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; estimatedPos--; } // else equals no need to minus 1 @@ -460,8 +475,9 @@ public class ChunkSuit4CPV { default: throw new IOException("Unsupported data type!"); } - return estimatedPos; } + IOMonitor2.addMeasure(Operation.SEARCH_ARRAY_b_genLP, System.nanoTime() - start); + return estimatedPos; } /** @@ -471,6 +487,8 @@ public class ChunkSuit4CPV { * @return true if exists; false not exist */ public boolean checkIfExist(long targetTimestamp) throws IOException { + long start = System.nanoTime(); + boolean exist; if (TSFileDescriptor.getInstance().getConfig().isUseChunkIndex()) { StepRegress stepRegress = chunkMetadata.getStatistics().getStepRegress(); // infer position starts from 1, so minus 1 here @@ -483,22 +501,25 @@ public class ChunkSuit4CPV { while (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) { estimatedPos--; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } } else if (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) { while (pageReader.timeBuffer.getLong(estimatedPos * 8) < targetTimestamp) { estimatedPos++; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } if (pageReader.timeBuffer.getLong(estimatedPos * 8) > targetTimestamp) { estimatedPos--; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } // else equal } // else equal // since we have constrained that targetTimestamp must be within the chunk time range // [startTime, endTime], // estimatedPos will not be out of range. - return pageReader.timeBuffer.getLong(estimatedPos * 8) == targetTimestamp; + exist = pageReader.timeBuffer.getLong(estimatedPos * 8) == targetTimestamp; } else { // search from estimatePos in the timeBuffer to find the closet timestamp equal to or smaller // than the given timestamp @@ -510,6 +531,7 @@ public class ChunkSuit4CPV { if (!flag) { estimatedPos++; IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; } long t = pageReader.timeBuffer.getLong(); if (t >= targetTimestamp) { @@ -520,8 +542,10 @@ public class ChunkSuit4CPV { // since we have constrained that targetTimestamp must be within the chunk time range // [startTime, endTime], // estimatedPos will not be out of range. - return pageReader.timeBuffer.getLong(estimatedPos * 8) == targetTimestamp; + exist = pageReader.timeBuffer.getLong(estimatedPos * 8) == targetTimestamp; } + IOMonitor2.addMeasure(Operation.SEARCH_ARRAY_a_verifBPTP, System.nanoTime() - start); + return exist; } public void updateFP(MinMaxInfo point) { diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IOMonitor2.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IOMonitor2.java index d9eeaf30b6c..9c17f371e34 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IOMonitor2.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/IOMonitor2.java @@ -19,10 +19,8 @@ package org.apache.iotdb.tsfile.read.common; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - public class IOMonitor2 { + public enum DataSetType { // dataSet, executor, reader, file NONE, RawQueryDataSetWithoutValueFilter, @@ -33,12 +31,21 @@ public class IOMonitor2 { public enum Operation { DCP_Server_Query_Execute("DCP_Server_Query_Execute"), DCP_Server_Query_Fetch("DCP_Server_Query_Fetch"), - DCP_SeriesScanOperator_hasNext("DCP_SeriesScanOperator_hasNext"), DCP_A_GET_CHUNK_METADATAS("DCP_A_GET_CHUNK_METADATAS"), DCP_B_READ_MEM_CHUNK("DCP_B_READ_MEM_CHUNK"), DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA( "DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA"), - DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS("DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS"); + DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS("DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS"), + SEARCH_ARRAY_a_verifBPTP("SEARCH_ARRAY_a_verifBPTP"), + SEARCH_ARRAY_b_genFP("SEARCH_ARRAY_b_genFP"), + SEARCH_ARRAY_b_genLP("SEARCH_ARRAY_b_genLP"), + SEARCH_ARRAY_c_genBPTP("SEARCH_ARRAY_c_genBPTP"), + M4_LSM_INIT_LOAD_ALL_CHUNKMETADATAS("M4_LSM_INIT_LOAD_ALL_CHUNKMETADATAS"), + M4_LSM_MERGE_M4_TIME_SPAN("M4_LSM_MERGE_M4_TIME_SPAN"), + M4_LSM_FP("M4_LSM_FP"), + M4_LSM_LP("M4_LSM_LP"), + M4_LSM_BP("M4_LSM_BP"), + M4_LSM_TP("M4_LSM_TP"); public String getName() { return name; @@ -51,23 +58,14 @@ public class IOMonitor2 { } } - /** - * [Raw data query metrics] - server端execute&fetch的次数和耗时 - - * SeriesScanOperator.hasNext的次数和耗时(问题:root.hasNext执行次数等于decode - * page次数,但是SeriesScanOperator.hasNext次数大于那个次数?破案了:是root.isFinished->SeriesScanOperator.isFinished里面调用了hasNext,和root.hasNext里调用SeriesScanOperator.hasNext的次数加起来就对了。) - * - A:从磁盘解读chunk元数据的次数和耗时 - B:从磁盘加载chunk数据的次数和耗时 - C:解压缩所有page构造pageReaderList的次数和耗时 - - * D:解码page并遍历点的次数和耗时 (遍历点数不用统计,因为一定是全量点) - */ - public static int DCP_Server_Query_Execute_count = 0; + public static DataSetType dataSetType = DataSetType.NONE; + public static int DCP_Server_Query_Execute_count = 0; public static long DCP_Server_Query_Execute_ns = 0; public static int DCP_Server_Query_Fetch_count = 0; public static long DCP_Server_Query_Fetch_ns = 0; - public static int DCP_SeriesScanOperator_hasNext_count = 0; - public static long DCP_SeriesScanOperator_hasNext_ns = 0; - public static int DCP_A_GET_CHUNK_METADATAS_count = 0; public static long DCP_A_GET_CHUNK_METADATAS_ns = 0; @@ -77,25 +75,49 @@ public class IOMonitor2 { public static int DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_count = 0; public static long DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_ns = 0; + public static long DCP_D_traversedPointNum = 0; public static int DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_count = 0; public static long DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_ns = 0; - public static long DCP_D_traversedPointNum = 0; + public static int SEARCH_ARRAY_a_verifBPTP_count = 0; + public static long SEARCH_ARRAY_a_verifBPTP_ns = 0; - public static DataSetType dataSetType = DataSetType.NONE; + public static int SEARCH_ARRAY_b_genFP_count = 0; + public static long SEARCH_ARRAY_b_genFP_ns = 0; + + public static int SEARCH_ARRAY_b_genLP_count = 0; + public static long SEARCH_ARRAY_b_genLP_ns = 0; + + public static int SEARCH_ARRAY_c_genBPTP_count = 0; + public static long SEARCH_ARRAY_c_genBPTP_ns = 0; + + public static int M4_LSM_init_loadAllChunkMetadatas_count = 0; + public static long M4_LSM_init_loadAllChunkMetadatas_ns = 0; - private static final Logger DEBUG_LOGGER = LoggerFactory.getLogger("IOMonitor2"); + public static int M4_LSM_merge_M4_time_span_count = 0; + public static long M4_LSM_merge_M4_time_span_ns = 0; + + public static int M4_LSM_FP_count = 0; + public static long M4_LSM_FP_ns = 0; + + public static int M4_LSM_LP_count = 0; + public static long M4_LSM_LP_ns = 0; + + public static int M4_LSM_BP_count = 0; + public static long M4_LSM_BP_ns = 0; + + public static int M4_LSM_TP_count = 0; + public static long M4_LSM_TP_ns = 0; private static void reset() { + dataSetType = DataSetType.NONE; + DCP_Server_Query_Execute_count = 0; DCP_Server_Query_Execute_ns = 0; DCP_Server_Query_Fetch_count = 0; DCP_Server_Query_Fetch_ns = 0; - DCP_SeriesScanOperator_hasNext_count = 0; - DCP_SeriesScanOperator_hasNext_ns = 0; - DCP_A_GET_CHUNK_METADATAS_count = 0; DCP_A_GET_CHUNK_METADATAS_ns = 0; @@ -105,17 +127,39 @@ public class IOMonitor2 { DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_count = 0; DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_ns = 0; + DCP_D_traversedPointNum = 0; DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_count = 0; DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_ns = 0; - DCP_D_traversedPointNum = 0; + SEARCH_ARRAY_a_verifBPTP_count = 0; + SEARCH_ARRAY_a_verifBPTP_ns = 0; + SEARCH_ARRAY_b_genFP_count = 0; + SEARCH_ARRAY_b_genFP_ns = 0; + SEARCH_ARRAY_b_genLP_count = 0; + SEARCH_ARRAY_b_genLP_ns = 0; + SEARCH_ARRAY_c_genBPTP_count = 0; + SEARCH_ARRAY_c_genBPTP_ns = 0; - dataSetType = DataSetType.NONE; + M4_LSM_init_loadAllChunkMetadatas_count = 0; + M4_LSM_init_loadAllChunkMetadatas_ns = 0; + + M4_LSM_merge_M4_time_span_count = 0; + M4_LSM_merge_M4_time_span_ns = 0; + + M4_LSM_FP_count = 0; + M4_LSM_FP_ns = 0; + + M4_LSM_LP_count = 0; + M4_LSM_LP_ns = 0; + + M4_LSM_BP_count = 0; + M4_LSM_BP_ns = 0; + + M4_LSM_TP_count = 0; + M4_LSM_TP_ns = 0; } public static void addMeasure(Operation operation, long elapsedTimeInNanosecond) { - // TODO tmp for debug - // DEBUG_LOGGER.info(operation.getName() + ": " + elapsedTimeInNanosecond + " ns"); switch (operation) { case DCP_Server_Query_Execute: DCP_Server_Query_Execute_count++; @@ -125,10 +169,6 @@ public class IOMonitor2 { DCP_Server_Query_Fetch_count++; DCP_Server_Query_Fetch_ns += elapsedTimeInNanosecond; break; - case DCP_SeriesScanOperator_hasNext: - DCP_SeriesScanOperator_hasNext_count++; - DCP_SeriesScanOperator_hasNext_ns += elapsedTimeInNanosecond; - break; case DCP_A_GET_CHUNK_METADATAS: DCP_A_GET_CHUNK_METADATAS_count++; DCP_A_GET_CHUNK_METADATAS_ns += elapsedTimeInNanosecond; @@ -145,6 +185,46 @@ public class IOMonitor2 { DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_count++; DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_ns += elapsedTimeInNanosecond; break; + case SEARCH_ARRAY_a_verifBPTP: + SEARCH_ARRAY_a_verifBPTP_count++; + SEARCH_ARRAY_a_verifBPTP_ns += elapsedTimeInNanosecond; + break; + case SEARCH_ARRAY_b_genFP: + SEARCH_ARRAY_b_genFP_count++; + SEARCH_ARRAY_b_genFP_ns += elapsedTimeInNanosecond; + break; + case SEARCH_ARRAY_b_genLP: + SEARCH_ARRAY_b_genLP_count++; + SEARCH_ARRAY_b_genLP_ns += elapsedTimeInNanosecond; + break; + case SEARCH_ARRAY_c_genBPTP: + SEARCH_ARRAY_c_genBPTP_count++; + SEARCH_ARRAY_c_genBPTP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_INIT_LOAD_ALL_CHUNKMETADATAS: + M4_LSM_init_loadAllChunkMetadatas_count++; + M4_LSM_init_loadAllChunkMetadatas_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_MERGE_M4_TIME_SPAN: + M4_LSM_merge_M4_time_span_count++; + M4_LSM_merge_M4_time_span_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_FP: + M4_LSM_FP_count++; + M4_LSM_FP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_LP: + M4_LSM_LP_count++; + M4_LSM_LP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_BP: + M4_LSM_BP_count++; + M4_LSM_BP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_TP: + M4_LSM_TP_count++; + M4_LSM_TP_ns += elapsedTimeInNanosecond; + break; default: System.out.println("not supported operation type"); // this will not happen break; @@ -161,10 +241,6 @@ public class IOMonitor2 { DCP_Server_Query_Fetch_count += count; DCP_Server_Query_Fetch_ns += elapsedTimeInNanosecond; break; - case DCP_SeriesScanOperator_hasNext: - DCP_SeriesScanOperator_hasNext_count += count; - DCP_SeriesScanOperator_hasNext_ns += elapsedTimeInNanosecond; - break; case DCP_A_GET_CHUNK_METADATAS: DCP_A_GET_CHUNK_METADATAS_count += count; DCP_A_GET_CHUNK_METADATAS_ns += elapsedTimeInNanosecond; @@ -181,6 +257,46 @@ public class IOMonitor2 { DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_count += count; DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_ns += elapsedTimeInNanosecond; break; + case SEARCH_ARRAY_a_verifBPTP: + SEARCH_ARRAY_a_verifBPTP_count += count; + SEARCH_ARRAY_a_verifBPTP_ns += elapsedTimeInNanosecond; + break; + case SEARCH_ARRAY_b_genFP: + SEARCH_ARRAY_b_genFP_count += count; + SEARCH_ARRAY_b_genFP_ns += elapsedTimeInNanosecond; + break; + case SEARCH_ARRAY_b_genLP: + SEARCH_ARRAY_b_genLP_count += count; + SEARCH_ARRAY_b_genLP_ns += elapsedTimeInNanosecond; + break; + case SEARCH_ARRAY_c_genBPTP: + SEARCH_ARRAY_c_genBPTP_count += count; + SEARCH_ARRAY_c_genBPTP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_INIT_LOAD_ALL_CHUNKMETADATAS: + M4_LSM_init_loadAllChunkMetadatas_count += count; + M4_LSM_init_loadAllChunkMetadatas_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_MERGE_M4_TIME_SPAN: + M4_LSM_merge_M4_time_span_count += count; + M4_LSM_merge_M4_time_span_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_FP: + M4_LSM_FP_count += count; + M4_LSM_FP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_LP: + M4_LSM_LP_count += count; + M4_LSM_LP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_BP: + M4_LSM_BP_count += count; + M4_LSM_BP_ns += elapsedTimeInNanosecond; + break; + case M4_LSM_TP: + M4_LSM_TP_count += count; + M4_LSM_TP_ns += elapsedTimeInNanosecond; + break; default: System.out.println("not supported operation type"); // this will not happen break; @@ -202,22 +318,59 @@ public class IOMonitor2 { .append(DCP_Server_Query_Fetch_ns) .append("\n"); stringBuilder - .append("SeriesScanOperator_hasNext_ns") + .append("M4_LSM_init_loadAllChunkMetadatas_ns") + .append(",") + .append(M4_LSM_init_loadAllChunkMetadatas_ns) + .append("\n"); + stringBuilder + .append("M4_LSM_merge_M4_time_span_ns") + .append(",") + .append(M4_LSM_merge_M4_time_span_ns) + .append("\n"); + stringBuilder.append("M4_LSM_FP_ns").append(",").append(M4_LSM_FP_ns).append("\n"); + stringBuilder.append("M4_LSM_LP_ns").append(",").append(M4_LSM_LP_ns).append("\n"); + stringBuilder.append("M4_LSM_BP_ns").append(",").append(M4_LSM_BP_ns).append("\n"); + stringBuilder.append("M4_LSM_TP_ns").append(",").append(M4_LSM_TP_ns).append("\n"); + stringBuilder + .append("DCP_A_GET_CHUNK_METADATAS_ns") + .append(",") + .append(DCP_A_GET_CHUNK_METADATAS_ns) + .append("\n"); + stringBuilder + .append("DCP_B_READ_MEM_CHUNK_ns") .append(",") - .append(DCP_SeriesScanOperator_hasNext_ns) + .append(DCP_B_READ_MEM_CHUNK_ns) .append("\n"); - stringBuilder.append("A_ns").append(",").append(DCP_A_GET_CHUNK_METADATAS_ns).append("\n"); - stringBuilder.append("B_ns").append(",").append(DCP_B_READ_MEM_CHUNK_ns).append("\n"); stringBuilder - .append("C_ns") + .append("DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_ns") .append(",") .append(DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_ns) .append("\n"); stringBuilder - .append("D_ns") + .append("DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_ns") .append(",") .append(DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_ns) .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_a_verifBPTP_ns") + .append(",") + .append(SEARCH_ARRAY_a_verifBPTP_ns) + .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_b_genFP_ns") + .append(",") + .append(SEARCH_ARRAY_b_genFP_ns) + .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_b_genLP_ns") + .append(",") + .append(SEARCH_ARRAY_b_genLP_ns) + .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_c_genBPTP_ns") + .append(",") + .append(SEARCH_ARRAY_c_genBPTP_ns) + .append("\n"); stringBuilder .append("Server_Query_Execute_cnt") @@ -230,22 +383,59 @@ public class IOMonitor2 { .append(DCP_Server_Query_Fetch_count) .append("\n"); stringBuilder - .append("SeriesScanOperator_hasNext_cnt") + .append("M4_LSM_init_loadAllChunkMetadatas_cnt") + .append(",") + .append(M4_LSM_init_loadAllChunkMetadatas_count) + .append("\n"); + stringBuilder + .append("M4_LSM_merge_M4_time_span_cnt") .append(",") - .append(DCP_SeriesScanOperator_hasNext_count) + .append(M4_LSM_merge_M4_time_span_count) .append("\n"); - stringBuilder.append("A_cnt").append(",").append(DCP_A_GET_CHUNK_METADATAS_count).append("\n"); - stringBuilder.append("B_cnt").append(",").append(DCP_B_READ_MEM_CHUNK_count).append("\n"); + stringBuilder.append("M4_LSM_FP_cnt").append(",").append(M4_LSM_FP_count).append("\n"); + stringBuilder.append("M4_LSM_LP_cnt").append(",").append(M4_LSM_LP_count).append("\n"); + stringBuilder.append("M4_LSM_BP_cnt").append(",").append(M4_LSM_BP_count).append("\n"); + stringBuilder.append("M4_LSM_TP_cnt").append(",").append(M4_LSM_TP_count).append("\n"); stringBuilder - .append("C_cnt") + .append("DCP_A_GET_CHUNK_METADATAS_cnt") + .append(",") + .append(DCP_A_GET_CHUNK_METADATAS_count) + .append("\n"); + stringBuilder + .append("DCP_B_READ_MEM_CHUNK_cnt") + .append(",") + .append(DCP_B_READ_MEM_CHUNK_count) + .append("\n"); + stringBuilder + .append("DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_cnt") .append(",") .append(DCP_C_DESERIALIZE_PAGEHEADER_DECOMPRESS_PAGEDATA_count) .append("\n"); stringBuilder - .append("D_cnt") + .append("DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_cnt") .append(",") .append(DCP_D_DECODE_PAGEDATA_TRAVERSE_POINTS_count) .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_a_verifBPTP_cnt") + .append(",") + .append(SEARCH_ARRAY_a_verifBPTP_count) + .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_b_genFP_cnt") + .append(",") + .append(SEARCH_ARRAY_b_genFP_count) + .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_b_genLP_cnt") + .append(",") + .append(SEARCH_ARRAY_b_genLP_count) + .append("\n"); + stringBuilder + .append("SEARCH_ARRAY_c_genBPTP_cnt") + .append(",") + .append(SEARCH_ARRAY_c_genBPTP_count) + .append("\n"); stringBuilder .append("DCP_D_traversedPointNum") .append(",") diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java index 420a32735ac..cc667ab3844 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java @@ -168,6 +168,7 @@ public class PageReader implements IPageReader { } public void updateBPTP(ChunkSuit4CPV chunkSuit4CPV) { + long start = System.nanoTime(); deleteCursor = 0; // TODO DEBUG Statistics statistics = null; switch (dataType) { @@ -187,6 +188,7 @@ public class PageReader implements IPageReader { int count = 0; // update here, not in statistics for (int pos = chunkSuit4CPV.startPos; pos <= chunkSuit4CPV.endPos; pos++) { IOMonitor.incPointsTravered(); + IOMonitor2.DCP_D_traversedPointNum++; long timestamp = timeBuffer.getLong(pos * 8); switch (dataType) { case INT64: @@ -229,6 +231,7 @@ public class PageReader implements IPageReader { } else { chunkSuit4CPV.statistics.setCount(0); // otherwise count won't be zero } + IOMonitor2.addMeasure(Operation.SEARCH_ARRAY_c_genBPTP, System.nanoTime() - start); } /** @return the returned BatchData may be empty, but never be null */
