[ 
https://issues.apache.org/jira/browse/PHOENIX-6052?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17644219#comment-17644219
 ] 

Aman Poonia commented on PHOENIX-6052:
--------------------------------------

This seems like a good idea. I was looking at the the related code for the same
{code:java}
// code placeholder
private void sendMutations() {

...

do {

htable.batch()

...

mutationCommitTime = EnvironmentEdgeManager.currentTimeMillis() - startTime;
GLOBAL_MUTATION_COMMIT_TIME.update(mutationCommitTime);
} while();
...
}
{code}
This method sendMutation is called thrice for each mutation in sendBatch() and 
syscat call happens in sendBatch method

 
{code:java}
void sendBatch() {

...
 long
                    serverTimestamp =
                    serverTimeStamps == null ?
                        validateAndGetServerTimestamp(tableRef, 
multiRowMutationState) :
                        serverTimeStamps[i++];
...

// Phase 1: Send index mutations with the empty column value = "unverified"
            sendMutations(unverifiedIndexMutations.entrySet().iterator(), span, 
indexMetaDataPtr, false);

            // Phase 2: Send data table and other indexes
            sendMutations(physicalTableMutationMap.entrySet().iterator(), span, 
indexMetaDataPtr, false);

            // Phase 3: Send put index mutations with the empty column value = 
"verified" and/or delete index mutations
            try {
                
sendMutations(verifiedOrDeletedIndexMutations.entrySet().iterator(), span, 
indexMetaDataPtr, true);
            } catch (SQLException ex) {
                LOGGER.warn(
                        "Ignoring exception that happened during setting index 
verified value to verified=TRUE ",
                        ex);
            }



}

{code}
 

 

There are two ways we can add syscat time. either we pass the time taken for

validateAndGetServerTimestamp() to sendMutation and then add that time in each 
phase of sendmutation (basically all three times) or instead of measuing the 
mutation time from within sendMutation we move that out to sendBatch and time 
each invokation of sendMutation and add syscat time with the time taken in 
sendMutation

 

something like

 
{code:java}
...

long StartTime = EnvironmentEdgeManager.currentTimeMillis();

serverTimestamp = serverTimeStamps == null ? 
validateAndGetServerTimestamp(tableRef, multiRowMutationState) : 
serverTimeStamps[i++];

long syscatTime = startTime - EnvironmentEdgeManager.currentTimeMillis();

 

long StartTime = EnvironmentEdgeManager.currentTimeMillis()


sendMutation()

sendMutation()

try {

sendMutation()

} catch(){

}

long endTime = startTime - EnvironmentEdgeManager.currentTimeMillis()

mutationTime = endTime + syscattime

 
//update the metric{code}
[~shahrs87] [~kadir] [~tkhurana]  what do you guys think?

> GLOBAL_MUTATION_COMMIT_TIME metric doesn't include the time spent in syscat 
> rpc's
> ---------------------------------------------------------------------------------
>
>                 Key: PHOENIX-6052
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-6052
>             Project: Phoenix
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 4.14.3
>            Reporter: Rushabh Shah
>            Assignee: Aman Poonia
>            Priority: Major
>
> Currently we measure the metric GLOBAL_MUTATION_COMMIT_TIME as the time spent 
> just in htable.batch rpc for base and index tables. 
> https://github.com/apache/phoenix/blob/master/phoenix-core/src/main/java/org/apache/phoenix/execute/MutationState.java#L1029-L1136
> We don't measure the time spent in 
> MutationState#validateAndGetServerTimestamp which makes rpc to SYSTEM.CATALOG 
> table and which is a part of commit phase.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to