更新时间:2024-11-27 GMT+08:00

性能问题

在processResult阶段耗时

设置loglevel=3,打开JDBC日志,主要耗时在processResult阶段,可分为两种情况:
  1. JDBC端等待数据库返回的报文时间过长。

    问题分析:用户可查看FE=> Syncr日志和<=BE ParseComplete日志之间的时间间隔,如果时间间隔较久,则判断为数据库执行慢。

    处理方法:分析SQL执行慢的原因,详情可参见SQL执行很慢,性能低,有时长时间运行未结束

  2. 结果集过大,一次性全部加载,消耗大量时间。

    问题分析:查看日志,如果<=BE DataRow日志出现次数过多,或直接执行SELECT count(*);查询结果数目过大,则判断为结果集过大。

    处理方法:设置fetchSize参数为一个较小的值,使数据按批次返回,客户端得到快速响应。

    1
    statement.setFetchSize(10);
    

在modifyJdbcCall和createParameterizedQuery阶段耗时

问题分析:如果主要耗时在modifyJdbcCall阶段(校验传入的SQL是否符合规范)和createParameterizedQuery阶段(将传入的SQL解析为preparedQuery,以获取由simplequery组成的subqueries),则需要确认是否传入的SQL过长导致。

处理方法:JDBC本身没办法优化这部分耗时,可在应用端查看是否可优化传入的SQL语句,详情可参见SQL语句改写规则