JIRA stats logs - top mentionable & assignable users stats
JIRA 8.19.1 SERVER DC
A new way of getting top mentionable and top assignable users was introduced in Jira 8.19.1.
Before JIRA 8.19.1 the algorithm would get top users matching a given pattern and only then apply filters based on permission scheme configuration for every user, until top N users matched the given query. Such algorithm could potentially end up on iterating over all users matching the query (potentially all users). Also the filter applied to every user matching the query could have trigger a request to the database. This may have caused serious performance problems:
- - JRASERVER-72101Getting issue details... STATUS
- - JSWSERVER-20336Getting issue details... STATUS
- - JRASERVER-72581Getting issue details... STATUS
- - JRASERVER-72633Getting issue details... STATUS
- - JRASERVER-66816Getting issue details... STATUS
In JIRA 8.19.1 we have made the algorithm more stable by reversing the approach. We are getting top users for given permission scheme configuration directly from the database. The new solution comes with common Jira snapshot/total stats which can be used to validate mention & assignee performance:
- total:
[JIRA-STATS] [UserSearchServiceStats] total stats: [data]
- snapshot:
[JIRA-STATS] [UserSearchServiceStats] snapshot stats:
[data]
Check Mentionable & assignable users - tips & tricks to see how to interpret this data.
Stats structure (main parts):
- legacy
- findTopMentionableUsersInIssueLegacyMode
- findTopAssignableUsersLegacyMode
- optimised
- findTopMentionableUsers
- timeInMillis
- findTopAssignableUsers
- timeInMillis
- findTopUsersInternal - common for mentionable and assignable
- timeInMillis
- permissionSchemeLogic
- findTopUsersWithPermissionInIssue - path used to get users for permissions based on users
- timeInMillis
- findTopUsersWithPermissionInIssueFromGroups - path used to get users for permissions based on groups
- timeInMillis
- isNestedGroupsEnabledForAnyDirectory - are nested groups supported (Note: can affect performance when configured groups resolves to thousands of nested groups)
- findTopMentionableUsers
{
"legacy": {
"findTopMentionableUsersInIssueLegacyMode": {
"timeInMillis": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"queryLength": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"0": 0,
"1": 0,
"2": 0,
"4": 0,
"8": 0
}
},
"resultSize": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"0": 0,
"10": 0,
"100": 0
}
},
"topN": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"10": 0,
"100": 0,
"1000": 0
}
}
},
"findTopAssignableUsersLegacyMode": {
"timeInMillis": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"queryLength": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"0": 0,
"1": 0,
"2": 0,
"4": 0,
"8": 0
}
},
"newIssue": 0,
"existingIssue": 0,
"resultSize": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"0": 0,
"10": 0,
"100": 0
}
},
"topN": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"10": 0,
"100": 0,
"1000": 0
}
}
}
},
"optimised": {
"findTopMentionableUsers": {
"timeInMillis": {
"count": 6877,
"min": 9,
"max": 241,
"sum": 113285,
"avg": 16,
"distributionCounter": {
"5": 0,
"10": 405,
"50": 6363,
"100": 89,
"500": 20,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"queryLength": {
"count": 6877,
"min": 0,
"max": 3,
"sum": 11,
"avg": 0,
"distributionCounter": {
"0": 6871,
"1": 2,
"2": 3,
"4": 1,
"8": 0
}
},
"existingIssue": 6877,
"resultSize": {
"count": 6877,
"min": 2,
"max": 5,
"sum": 34380,
"avg": 4,
"distributionCounter": {
"0": 0,
"10": 6877,
"100": 0
}
},
"topN": {
"count": 6877,
"min": 5,
"max": 5,
"sum": 34385,
"avg": 5,
"distributionCounter": {
"10": 6877,
"100": 0,
"1000": 0
}
}
},
"findTopAssignableUsers": {
"timeInMillis": {
"count": 26,
"min": 12,
"max": 179,
"sum": 760,
"avg": 29,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 25,
"100": 0,
"500": 1,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"queryLength": {
"count": 26,
"min": 0,
"max": 8,
"sum": 91,
"avg": 3,
"distributionCounter": {
"0": 1,
"1": 4,
"2": 5,
"4": 8,
"8": 8
}
},
"newIssue": 1,
"existingIssue": 25,
"resultSize": {
"count": 26,
"min": 1,
"max": 150,
"sum": 712,
"avg": 27,
"distributionCounter": {
"0": 0,
"10": 10,
"100": 15,
"9223372036854775807": 1
}
},
"topN": {
"count": 26,
"min": 50,
"max": 150,
"sum": 1400,
"avg": 53,
"distributionCounter": {
"10": 0,
"100": 25,
"1000": 1
}
}
},
"findTopUsersInternal": {
"timeInMillis": {
"count": 6903,
"min": 5,
"max": 202,
"sum": 63566,
"avg": 9,
"distributionCounter": {
"5": 204,
"10": 5610,
"50": 1020,
"100": 56,
"500": 13,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"unsupportedPermissionTypes": [],
"resultSize": {
"count": 6903,
"min": 1,
"max": 150,
"sum": 35092,
"avg": 5,
"distributionCounter": {
"0": 0,
"10": 6887,
"100": 15,
"9223372036854775807": 1
}
},
"getPermissionSchemeIdFor": {
"timeInMillis": {
"count": 6903,
"min": 1,
"max": 127,
"sum": 21386,
"avg": 3,
"distributionCounter": {
"5": 6214,
"10": 496,
"50": 189,
"100": 3,
"500": 1,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0
},
"getSchemePermissions": {
"timeInMillis": {
"count": 6903,
"min": 1,
"max": 158,
"sum": 21505,
"avg": 3,
"distributionCounter": {
"5": 6222,
"10": 495,
"50": 182,
"100": 1,
"500": 3,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"resultSize": {
"count": 6903,
"min": 1,
"max": 5,
"sum": 13667,
"avg": 1,
"distributionCounter": {
"0": 0,
"10": 6903,
"100": 0
}
}
},
"findTopUsers": {
"timeInMillis": {
"count": 6832,
"min": 0,
"max": 42,
"sum": 826,
"avg": 0,
"distributionCounter": {
"5": 6781,
"10": 33,
"50": 18,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"resultSize": {
"count": 6832,
"min": 1,
"max": 150,
"sum": 34737,
"avg": 5,
"distributionCounter": {
"0": 0,
"10": 6816,
"100": 15,
"9223372036854775807": 1
}
}
},
"permissionSchemeLogic": {
"anyUserType": 6038,
"anyGroupType": 486,
"allAllowed": 6832,
"isGroupAny": 48,
"isApplicationRoleAnyLoggedInUser": 6808,
"nobodyAllowed": 0,
"isIssueUserTypeReporter": 0,
"isIssueUserTypeAssignee": 0,
"isIssueUserTypeProjectLead": 0,
"isUserTypeUser": 5774,
"isUserTypeProjectRole": 486,
"isUserTypeCustomField": 0,
"isGroupTypeGroup": 23,
"isGroupTypeProjectRole": 486,
"isGroupTypeCustomField": 0,
"isGroupTypeApplicationRole": 24
},
"findInIssueDefinedUsers": {
"timeInMillis": {
"count": 6903,
"min": 2,
"max": 202,
"sum": 57597,
"avg": 8,
"distributionCounter": {
"5": 282,
"10": 5702,
"50": 906,
"100": 5,
"500": 8,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"queryLength": {
"count": 6903,
"min": 0,
"max": 8,
"sum": 102,
"avg": 0,
"distributionCounter": {
"0": 6872,
"1": 6,
"2": 8,
"4": 9,
"8": 8
}
},
"resultSize": {
"count": 6903,
"min": 0,
"max": 2,
"sum": 7824,
"avg": 1,
"distributionCounter": {
"0": 56,
"10": 6847,
"100": 0
}
},
"findMatchingUsers": {
"timeInMillis": {
"count": 6903,
"min": 2,
"max": 202,
"sum": 57135,
"avg": 8,
"distributionCounter": {
"5": 299,
"10": 5701,
"50": 891,
"100": 5,
"500": 7,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"usernamesSize": {
"count": 6903,
"min": 0,
"max": 2,
"sum": 7639,
"avg": 1,
"distributionCounter": {
"1": 6141,
"2": 762,
"3": 0
}
},
"resultSize": {
"count": 6903,
"min": 0,
"max": 2,
"sum": 7824,
"avg": 1,
"distributionCounter": {
"0": 56,
"10": 6847,
"100": 0
}
}
}
},
"findTopUsersWithPermissionInIssue": {
"timeInMillis": {
"count": 71,
"min": 3,
"max": 39,
"sum": 467,
"avg": 6,
"distributionCounter": {
"5": 38,
"10": 25,
"50": 8,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"sqlCount": {
"count": 71,
"min": 1,
"max": 1,
"sum": 71,
"avg": 1,
"distributionCounter": {
"0": 0,
"1": 71,
"2": 0,
"3": 0,
"4": 0,
"5": 0
}
},
"resultSize": {
"count": 71,
"min": 2,
"max": 5,
"sum": 283,
"avg": 3,
"distributionCounter": {
"0": 0,
"10": 71,
"100": 0
}
},
"findTopUsersFromTypeUser": {
"timeInMillis": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0
},
"findTopUsersFromUserCF": {
"timeInMillis": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0
},
"findTopUsersFromTypeProjectRoleUsers": {
"timeInMillis": {
"count": 71,
"min": 3,
"max": 38,
"sum": 464,
"avg": 6,
"distributionCounter": {
"5": 38,
"10": 25,
"50": 8,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"resultSize": {
"count": 71,
"min": 2,
"max": 5,
"sum": 283,
"avg": 3,
"distributionCounter": {
"0": 0,
"10": 71,
"100": 0
}
}
}
},
"findTopMentionableUsersInIssueFromGroups": {
"timeInMillis": {
"count": 71,
"min": 27,
"max": 139,
"sum": 3750,
"avg": 52,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 42,
"100": 25,
"500": 4,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"resultSize": {
"count": 71,
"min": 5,
"max": 5,
"sum": 355,
"avg": 5,
"distributionCounter": {
"0": 0,
"10": 71,
"100": 0
}
},
"findTopUsersWithNameInGroups": {
"timeInMillis": {
"count": 71,
"min": 0,
"max": 32,
"sum": 448,
"avg": 6,
"distributionCounter": {
"5": 49,
"10": 5,
"50": 17,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"groupSize": {
"count": 71,
"min": 14,
"max": 31,
"sum": 1810,
"avg": 25,
"distributionCounter": {
"1": 0,
"10": 0,
"100": 71,
"1000": 0
}
},
"resultSize": {
"count": 71,
"min": 5,
"max": 5,
"sum": 355,
"avg": 5,
"distributionCounter": {
"0": 0,
"10": 71,
"100": 0
}
},
"QueryDslJiraCrowdDAOSettings": {
"batchSize": 1000,
"maxTop": 100,
"maxGroupNestedLevel": 20
}
},
"findNestedGroupsOf": {
"timeInMillis": {
"count": 71,
"min": 22,
"max": 99,
"sum": 2778,
"avg": 39,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 64,
"100": 7,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"groupSize": {
"count": 71,
"min": 1,
"max": 1,
"sum": 71,
"avg": 1,
"distributionCounter": {
"1": 71,
"10": 0,
"100": 0,
"1000": 0
}
},
"resultSize": {
"count": 71,
"min": 14,
"max": 31,
"sum": 1810,
"avg": 25,
"distributionCounter": {
"0": 0,
"10": 0,
"100": 71
}
}
},
"findGroupsFrom": {
"timeInMillis": {
"count": 71,
"min": 2,
"max": 65,
"sum": 449,
"avg": 6,
"distributionCounter": {
"5": 45,
"10": 22,
"50": 3,
"100": 1,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"sqlCount": {
"count": 71,
"min": 1,
"max": 2,
"sum": 94,
"avg": 1,
"distributionCounter": {
"0": 0,
"1": 48,
"2": 23,
"3": 0,
"4": 0,
"5": 0
}
},
"resultSize": {
"count": 71,
"min": 1,
"max": 1,
"sum": 71,
"avg": 1,
"distributionCounter": {
"0": 0,
"10": 71,
"100": 0
}
},
"findGroupsFromTypeGroup": {
"timeInMillis": {
"count": 23,
"min": 2,
"max": 24,
"sum": 92,
"avg": 4,
"distributionCounter": {
"5": 20,
"10": 2,
"50": 1,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"resultSize": {
"count": 23,
"min": 2,
"max": 2,
"sum": 46,
"avg": 2,
"distributionCounter": {
"0": 0,
"10": 23,
"100": 0
}
}
},
"findGroupsFromTypeProjectRoleGroup": {
"timeInMillis": {
"count": 71,
"min": 2,
"max": 65,
"sum": 343,
"avg": 4,
"distributionCounter": {
"5": 60,
"10": 8,
"50": 2,
"100": 1,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0,
"resultSize": {
"count": 71,
"min": 0,
"max": 2,
"sum": 96,
"avg": 1,
"distributionCounter": {
"0": 23,
"10": 48,
"100": 0
}
}
},
"findGroupsFromGroupCF": {
"timeInMillis": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0
},
"findGroupsFromSelectCF": {
"timeInMillis": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0
},
"findGroupsFromApplicationRole": {
"timeInMillis": {
"count": 0,
"min": 0,
"max": 0,
"sum": 0,
"avg": 0,
"distributionCounter": {
"5": 0,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"exception": 0
}
},
"isNestedGroupsEnabledForAnyDirectory": {
"timeInMillis": {
"count": 71,
"min": 0,
"max": 5,
"sum": 7,
"avg": 0,
"distributionCounter": {
"5": 71,
"10": 0,
"50": 0,
"100": 0,
"500": 0,
"1000": 0,
"5000": 0,
"10000": 0,
"30000": 0
}
},
"directories": 2,
"nestedGroupsEnabled": true,
"exceptions": 0
}
}
}
}
}