You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by "Philippe Mouawad (JIRA)" <ji...@apache.org> on 2011/05/18 11:15:48 UTC

[jira] [Created] (OFBIZ-4286) Performance : GenericDao does not always use complete PreparedStatement

Performance : GenericDao does not always use complete PreparedStatement
-----------------------------------------------------------------------

                 Key: OFBIZ-4286
                 URL: https://issues.apache.org/jira/browse/OFBIZ-4286
             Project: OFBiz
          Issue Type: Improvement
          Components: framework
    Affects Versions: SVN trunk
            Reporter: Philippe Mouawad


Hello,
While profiling SQL requests going to DB I noticed a strange behaviour where Ofbiz builds SQL Statement partly with ? and partly with inline values which results in lower Database performances.

Example:
JobManager#poll  List<GenericValue> jobEnt = delegator.findByAnd("JobSandbox", updateFields, order);
results in the following SQL query:
UPDATE ECFR.JOB_SANDBOX SET RUN_BY_INSTANCE_ID = ?, STATUS_ID = ? WHERE ((RUN_TIME <= '2011-05-17 17:02:33.163' AND START_DATE_TIME IS NULL AND CANCEL_DATE_TIME IS NULL AND RUN_BY_INSTANCE_ID IS NULL) AND (POOL_ID IS NULL OR POOL_ID = 'poolfrt025'))

As you can see, RUN_TIME condition is inlined.
Analysing this behaviour, I think issue comes from EntityConditionBase#addValue:
    protected void addValue(StringBuilder buffer, ModelField field, Object value, List<EntityConditionParam> params) {
        SqlJdbcUtil.addValue(buffer, params == null ? null : field, value, params);
    }

and particularly:
params == null ? null : field

this ends up here in SqlJdbcUtil#addValueSingle and you can see that as field is null :
    public static void addValueSingle(StringBuilder buffer, ModelField field, Object value, List<EntityConditionParam> params) {
        if (field != null) {
            buffer.append('?');
        } else {
            buffer.append('\'').append(value).append('\'');
        }
        if (field != null && params != null) params.add(new EntityConditionParam(field, value));
    }


I there some reason for this code ?
Is there another way to use delegator that makes it work better ?

Thank you
Regards
Philippe
http://www.ubik-ingenierie.com

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Resolved] (OFBIZ-4286) Performance : GenericDao does not always use complete PreparedStatement

Posted by "Philippe Mouawad (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OFBIZ-4286?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Philippe Mouawad resolved OFBIZ-4286.
-------------------------------------

    Resolution: Duplicate

Duplicate OFBIZ-4285

> Performance : GenericDao does not always use complete PreparedStatement
> -----------------------------------------------------------------------
>
>                 Key: OFBIZ-4286
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-4286
>             Project: OFBiz
>          Issue Type: Improvement
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: Philippe Mouawad
>
> Hello,
> While profiling SQL requests going to DB I noticed a strange behaviour where Ofbiz builds SQL Statement partly with ? and partly with inline values which results in lower Database performances.
> Example:
> JobManager#poll  List<GenericValue> jobEnt = delegator.findByAnd("JobSandbox", updateFields, order);
> results in the following SQL query:
> UPDATE ECFR.JOB_SANDBOX SET RUN_BY_INSTANCE_ID = ?, STATUS_ID = ? WHERE ((RUN_TIME <= '2011-05-17 17:02:33.163' AND START_DATE_TIME IS NULL AND CANCEL_DATE_TIME IS NULL AND RUN_BY_INSTANCE_ID IS NULL) AND (POOL_ID IS NULL OR POOL_ID = 'poolfrt025'))
> As you can see, RUN_TIME condition is inlined.
> Analysing this behaviour, I think issue comes from EntityConditionBase#addValue:
>     protected void addValue(StringBuilder buffer, ModelField field, Object value, List<EntityConditionParam> params) {
>         SqlJdbcUtil.addValue(buffer, params == null ? null : field, value, params);
>     }
> and particularly:
> params == null ? null : field
> this ends up here in SqlJdbcUtil#addValueSingle and you can see that as field is null :
>     public static void addValueSingle(StringBuilder buffer, ModelField field, Object value, List<EntityConditionParam> params) {
>         if (field != null) {
>             buffer.append('?');
>         } else {
>             buffer.append('\'').append(value).append('\'');
>         }
>         if (field != null && params != null) params.add(new EntityConditionParam(field, value));
>     }
> I there some reason for this code ?
> Is there another way to use delegator that makes it work better ?
> Thank you
> Regards
> Philippe
> http://www.ubik-ingenierie.com

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Closed] (OFBIZ-4286) Performance : GenericDao does not always use complete PreparedStatement

Posted by "Philippe Mouawad (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OFBIZ-4286?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Philippe Mouawad closed OFBIZ-4286.
-----------------------------------


> Performance : GenericDao does not always use complete PreparedStatement
> -----------------------------------------------------------------------
>
>                 Key: OFBIZ-4286
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-4286
>             Project: OFBiz
>          Issue Type: Improvement
>          Components: framework
>    Affects Versions: SVN trunk
>            Reporter: Philippe Mouawad
>
> Hello,
> While profiling SQL requests going to DB I noticed a strange behaviour where Ofbiz builds SQL Statement partly with ? and partly with inline values which results in lower Database performances.
> Example:
> JobManager#poll  List<GenericValue> jobEnt = delegator.findByAnd("JobSandbox", updateFields, order);
> results in the following SQL query:
> UPDATE ECFR.JOB_SANDBOX SET RUN_BY_INSTANCE_ID = ?, STATUS_ID = ? WHERE ((RUN_TIME <= '2011-05-17 17:02:33.163' AND START_DATE_TIME IS NULL AND CANCEL_DATE_TIME IS NULL AND RUN_BY_INSTANCE_ID IS NULL) AND (POOL_ID IS NULL OR POOL_ID = 'poolfrt025'))
> As you can see, RUN_TIME condition is inlined.
> Analysing this behaviour, I think issue comes from EntityConditionBase#addValue:
>     protected void addValue(StringBuilder buffer, ModelField field, Object value, List<EntityConditionParam> params) {
>         SqlJdbcUtil.addValue(buffer, params == null ? null : field, value, params);
>     }
> and particularly:
> params == null ? null : field
> this ends up here in SqlJdbcUtil#addValueSingle and you can see that as field is null :
>     public static void addValueSingle(StringBuilder buffer, ModelField field, Object value, List<EntityConditionParam> params) {
>         if (field != null) {
>             buffer.append('?');
>         } else {
>             buffer.append('\'').append(value).append('\'');
>         }
>         if (field != null && params != null) params.add(new EntityConditionParam(field, value));
>     }
> I there some reason for this code ?
> Is there another way to use delegator that makes it work better ?
> Thank you
> Regards
> Philippe
> http://www.ubik-ingenierie.com

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira