syncope-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF subversion and git services (Jira)" <j...@apache.org>
Subject [jira] [Commented] (SYNCOPE-1519) SchemaDataBinderImpl#update optimization
Date Fri, 29 Nov 2019 07:18:00 GMT

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

ASF subversion and git services commented on SYNCOPE-1519:
----------------------------------------------------------

Commit 36bc6f0eb0b2ff17b1258693b95a0e351009d9e8 in syncope's branch refs/heads/2_1_X from
DmitriyBrashevets
[ https://gitbox.apache.org/repos/asf?p=syncope.git;h=36bc6f0 ]

[SYNCOPE-1519]: use hasAttrs instead of findAttrs in SchemaDataBinderImpl.java (#142)



> SchemaDataBinderImpl#update optimization
> ----------------------------------------
>
>                 Key: SYNCOPE-1519
>                 URL: https://issues.apache.org/jira/browse/SYNCOPE-1519
>             Project: Syncope
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 2.0.12
>            Reporter: Dmitriy B.
>            Assignee: Francesco Chicchiriccò
>            Priority: Minor
>             Fix For: 2.1.5, 3.0.0
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> When _org.apache.syncope.core.provisioning.java.data.SchemaDataBinderImpl#update(org.apache.syncope.common.lib.to.PlainSchemaTO,
org.apache.syncope.core.persistence.api.entity.PlainSchema)_ is invoked it checks whether
plain schema has any attrs, by invoking the method _org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO#findAttrs_
which generates  huge SQL:
> {code:sql}
> syncope 2.0.12-related
> SELECT t0.id, t2.id, t1.id, t3.id, t1.cipherAlgorithm, t1.conversionPattern, t1.enumerationKeys,
t1.enumerationValues, t1.mandatoryCondition, t1.mimeType, t1.multivalue, t1.readonly, t1.secretKey,
t1.type, t1.uniqueConstraint, t1.validatorClass, t4.id, t5.id, t5.creationDate, t5.creator,
t5.lastChangeDate, t5.lastModifier, t6.id, t7.id, t7.description, t7.maxAuthenticationAttempts,
t7.propagateSuspension, t6.name, t8.id, t8.ACCOUNTPOLICY_ID, t8.name, t8.PASSWORDPOLICY_ID,
t9.id, t9.description, t9.allowNullPassword, t9.historyLength, t5.status, t5.workflowId, t5.changePwdDate,
t5.cipherAlgorithm, t5.failedLogins, t5.lastLoginDate, t5.lastRecertification, t5.lastRecertificator,
t5.mustChangePassword, t5.password, t5.securityAnswer, t10.id, t10.content, t5.suspended,
t5.token, t5.tokenExpireTime, t5.username, t11.id, t11.creationDate, t11.creator, t11.lastChangeDate,
t11.lastModifier, t11.REALM_ID, t11.status, t11.workflowId, t12.id, t12.creationDate, t12.creator,
t12.lastChangeDate, t12.lastModifier, t12.REALM_ID, t12.status, t12.workflowId, t12.name,
t12.USEROWNER_ID, t11.name, t13.id, t13.fiql, t14.id, t14.creationDate, t14.creator, t14.lastChangeDate,
t14.lastModifier, t14.REALM_ID, t14.status, t14.workflowId, t14.changePwdDate, t14.cipherAlgorithm,
t14.failedLogins, t14.lastLoginDate, t14.lastRecertification, t14.lastRecertificator, t14.mustChangePassword,
t14.password, t14.securityAnswer, t14.SECURITYQUESTION_ID, t14.suspended, t14.token, t14.tokenExpireTime,
t14.username, t15.id, t15.creationDate, t15.creator, t15.lastChangeDate, t15.lastModifier,
t15.REALM_ID, t15.status, t15.workflowId, t15.changePwdDate, t15.cipherAlgorithm, t15.failedLogins,
t15.lastLoginDate, t15.lastRecertification, t15.lastRecertificator, t15.mustChangePassword,
t15.password, t15.securityAnswer, t15.SECURITYQUESTION_ID, t15.suspended, t15.token, t15.tokenExpireTime,
t15.username, t16.id, t16.binaryValue, t16.booleanValue, t16.dateValue, t16.doubleValue, t16.longValue,
t16.stringValue, t18.id, t17.id, t17.ANYTYPECLASS_ID, t17.cipherAlgorithm, t17.conversionPattern,
t17.enumerationKeys, t17.enumerationValues, t17.mandatoryCondition, t17.mimeType, t17.multivalue,
t17.readonly, t17.secretKey, t17.type, t17.uniqueConstraint, t17.validatorClass FROM UPlainAttr
t0 LEFT OUTER JOIN PlainSchema t1 ON t0.schema_id = t1.id LEFT OUTER JOIN UMembership t4 ON
t0.MEMBERSHIP_ID = t4.id LEFT OUTER JOIN SyncopeUser t15 ON t0.OWNER_ID = t15.id LEFT OUTER
JOIN UPlainAttrUniqueValue t16 ON t0.id = t16.ATTRIBUTE_ID LEFT OUTER JOIN AnyTypeClass t3
ON t1.ANYTYPECLASS_ID = t3.id LEFT OUTER JOIN SyncopeSchema t2 ON t1.id = t2.id LEFT OUTER
JOIN SyncopeUser t5 ON t4.user_id = t5.id LEFT OUTER JOIN SyncopeGroup t11 ON t4.group_id
= t11.id LEFT OUTER JOIN PlainSchema t17 ON t16.schema_id = t17.id LEFT OUTER JOIN Realm t6
ON t5.REALM_ID = t6.id LEFT OUTER JOIN SecurityQuestion t10 ON t5.SECURITYQUESTION_ID = t10.id
LEFT OUTER JOIN SyncopeGroup t12 ON t11.GROUPOWNER_ID = t12.id LEFT OUTER JOIN UDynGroupMembership
t13 ON t11.id = t13.GROUP_ID LEFT OUTER JOIN SyncopeUser t14 ON t11.USEROWNER_ID = t14.id
LEFT OUTER JOIN SyncopeSchema t18 ON t17.id = t18.id LEFT OUTER JOIN AccountPolicy t7 ON t6.ACCOUNTPOLICY_ID
= t7.id LEFT OUTER JOIN Realm t8 ON t6.PARENT_ID = t8.id LEFT OUTER JOIN PasswordPolicy t9
ON t6.PASSWORDPOLICY_ID = t9.id WHERE (t0.schema_id = ?)
> {code}
> The query can be optimized to:
> {code:sql}
> select count(UPlainAttr.id) FROM plainschema join UPlainAttr on plainschema.id = UPlainAttr.schema_id
WHERE plainschema.id = ?
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Mime
View raw message