[ https://issues.apache.org/jira/browse/PHOENIX-5556?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
chenglei updated PHOENIX-5556: ------------------------------ Description: Load IndexMetaData is a somewhat expensive operation because it may deserialize from scan attribute. In following {code:java} 610 public void preBatchMutateWithExceptions(ObserverContext<RegionCoprocessorEnvironment> c, 611 MiniBatchOperationInProgress<Mutation> miniBatchOp) throws Throwable { 612 ignoreAtomicOperations(miniBatchOp); 613 BatchMutateContext context = new BatchMutateContext(this.builder.getIndexMetaData(miniBatchOp).getClientVersion()); setBatchMutateContext(c, context); Mutation firstMutation = miniBatchOp.getOperation(0); ReplayWrite replayWrite = this.builder.getReplayWrite(firstMutation); /* * Exclusively lock all rows so we get a consistent read * while determining the index updates */ if (replayWrite == null) { populateRowsToLock(miniBatchOp, context); lockRows(context); } long now = EnvironmentEdgeManager.currentTimeMillis(); // Add the table rows in the mini batch to the collection of pending rows. This will be used to detect // concurrent updates if (replayWrite == null) { populatePendingRows(context, now); } // First group all the updates for a single row into a single update to be processed Collection<? extends Mutation> mutations = groupMutations(miniBatchOp, now, replayWrite); // early exit if it turns out we don't have any edits if (mutations == null) { return; } long start = EnvironmentEdgeManager.currentTimeMillis(); prepareIndexMutations(c, miniBatchOp, context, mutations, now); metricSource.updateIndexPrepareTime(EnvironmentEdgeManager.currentTimeMillis() - start); {code} > Avoid repeatedly load IndexMetaData For IndexRegionObserver > ----------------------------------------------------------- > > Key: PHOENIX-5556 > URL: https://issues.apache.org/jira/browse/PHOENIX-5556 > Project: Phoenix > Issue Type: Bug > Affects Versions: 4.15.0, 5.1.0 > Reporter: Chenglei > Assignee: chenglei > Priority: Major > > Load IndexMetaData is a somewhat expensive operation because it may > deserialize from scan attribute. In following > {code:java} > 610 public void > preBatchMutateWithExceptions(ObserverContext<RegionCoprocessorEnvironment> c, > 611 MiniBatchOperationInProgress<Mutation> miniBatchOp) throws > Throwable { > 612 ignoreAtomicOperations(miniBatchOp); > 613 BatchMutateContext context = new > BatchMutateContext(this.builder.getIndexMetaData(miniBatchOp).getClientVersion()); > setBatchMutateContext(c, context); > Mutation firstMutation = miniBatchOp.getOperation(0); > ReplayWrite replayWrite = this.builder.getReplayWrite(firstMutation); > /* > * Exclusively lock all rows so we get a consistent read > * while determining the index updates > */ > if (replayWrite == null) { > populateRowsToLock(miniBatchOp, context); > lockRows(context); > } > long now = EnvironmentEdgeManager.currentTimeMillis(); > // Add the table rows in the mini batch to the collection of pending > rows. This will be used to detect > // concurrent updates > if (replayWrite == null) { > populatePendingRows(context, now); > } > // First group all the updates for a single row into a single update to > be processed > Collection<? extends Mutation> mutations = groupMutations(miniBatchOp, > now, replayWrite); > // early exit if it turns out we don't have any edits > if (mutations == null) { > return; > } > long start = EnvironmentEdgeManager.currentTimeMillis(); > prepareIndexMutations(c, miniBatchOp, context, mutations, now); > > metricSource.updateIndexPrepareTime(EnvironmentEdgeManager.currentTimeMillis() > - start); > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)