MySQL 远程连接访问比本地慢很多的问题

时间:2022-08-13 14:45:14
开发环境是SSH,
生产记录数据约5万条,读写较为频繁,
产品部署环境是应用服务器与数据库局域网访问。
开发测试时,hibernate生成后的sql访问本机数据库1-2秒出查询结果,而访问远程数据库则不定期的出现2-4分钟之后才有返回。
单次请求为查询5000条左右数据并聚合,直接查询该5000条数据响应很快,聚合为30条的过程耗时明显不正常。

网上看了下,数据库已设置了禁用DNS解析,依然没解决问题。
大神看下是什么原因引起的?

6 个解决方案

#1


hibernate 查询,内部做过优化处理;建议添加适当索引,并使用 explain 对SQL语句进行简单分析和优化;
共享一下你的SQL查询脚本!

#2



SELECT
  SUM(meadeliver0_.PDDO_RVOLUME) AS col_0_0_,
  SUM(CASE meadeliver0_.COUNT_STATUS 
   WHEN 2 THEN 0.0 
   ELSE meadeliver0_.PDDO_ACCEPT 
  END) AS col_1_0_,
  SUM(CASE meadeliver0_.CO_PUMP_FLG 
   WHEN 1 THEN meadeliver0_.PDDO_ACCEPT 
   ELSE 0.0 
  END) AS col_2_0_,
  SUM(CASE meadeliver0_.CO_DEPLOY_FLG 
   WHEN 1 THEN meadeliver0_.PDDO_ACCEPT 
   ELSE 0.0 
  END) AS col_3_0_,
  SUM(CASE meadeliver0_.CO_TRAIN_FLG 
   WHEN 1 THEN 1 
   ELSE 0 
  END) AS col_4_0_,
  commonday1_.DAY_KEY AS col_5_0_ 
 FROM
  cts2_cc.mea_delivery_order meadeliver0_,
  cts2_cc.common_day commonday1_,
  cts2_cc.crm_order_form crmorderfo2_ 
 WHERE
  meadeliver0_.CO_ID=crmorderfo2_.CO_ID 
  AND commonday1_.DAY_START<=meadeliver0_.PDDO_ODATE 
  AND (
   meadeliver0_.PDDO_TYPE IN (
    0 , 1
   )
  ) 
  AND (
   meadeliver0_.PDDO_STATUS IN (
    2 , 3
   )
  ) 
  AND commonday1_.DAY_END>=meadeliver0_.PDDO_ODATE 
  AND crmorderfo2_.COMP_ID=27 
  AND meadeliver0_.PDDO_ODATE>='2013年07月25日 08:00:00' 
  AND meadeliver0_.PDDO_ODATE<='2013年08月25日 07:59:59' 
 GROUP BY
  commonday1_.DAY_KEY

这是HQL转换之后的SQL,若仅去除所有sum和group by 返回5000行数据,响应时间1-2秒,加上聚合查询返回30条聚合结果,响应时间2-4分钟

#3


经查时间开销,300秒花费在了Copying to tmp table上。但是之前数据库优化了tmp_table_size = 128M,不明白为何会写到磁盘上。

#4


调整了下SQL,group by 调整为主键字段,发现避开了tmp table,
现在300秒开销到了Sending data,问题依然未解决

#5


三个表的索引情况呢

crmorderfo2_.COMP_ID=27 上加索引
meadeliver0_.PDDO_ODATE这个上加索引

#6


meadeliver0_.PDDO_ODATE这个上加索引后速度明显提升,结帖

#1


hibernate 查询,内部做过优化处理;建议添加适当索引,并使用 explain 对SQL语句进行简单分析和优化;
共享一下你的SQL查询脚本!

#2



SELECT
  SUM(meadeliver0_.PDDO_RVOLUME) AS col_0_0_,
  SUM(CASE meadeliver0_.COUNT_STATUS 
   WHEN 2 THEN 0.0 
   ELSE meadeliver0_.PDDO_ACCEPT 
  END) AS col_1_0_,
  SUM(CASE meadeliver0_.CO_PUMP_FLG 
   WHEN 1 THEN meadeliver0_.PDDO_ACCEPT 
   ELSE 0.0 
  END) AS col_2_0_,
  SUM(CASE meadeliver0_.CO_DEPLOY_FLG 
   WHEN 1 THEN meadeliver0_.PDDO_ACCEPT 
   ELSE 0.0 
  END) AS col_3_0_,
  SUM(CASE meadeliver0_.CO_TRAIN_FLG 
   WHEN 1 THEN 1 
   ELSE 0 
  END) AS col_4_0_,
  commonday1_.DAY_KEY AS col_5_0_ 
 FROM
  cts2_cc.mea_delivery_order meadeliver0_,
  cts2_cc.common_day commonday1_,
  cts2_cc.crm_order_form crmorderfo2_ 
 WHERE
  meadeliver0_.CO_ID=crmorderfo2_.CO_ID 
  AND commonday1_.DAY_START<=meadeliver0_.PDDO_ODATE 
  AND (
   meadeliver0_.PDDO_TYPE IN (
    0 , 1
   )
  ) 
  AND (
   meadeliver0_.PDDO_STATUS IN (
    2 , 3
   )
  ) 
  AND commonday1_.DAY_END>=meadeliver0_.PDDO_ODATE 
  AND crmorderfo2_.COMP_ID=27 
  AND meadeliver0_.PDDO_ODATE>='2013年07月25日 08:00:00' 
  AND meadeliver0_.PDDO_ODATE<='2013年08月25日 07:59:59' 
 GROUP BY
  commonday1_.DAY_KEY

这是HQL转换之后的SQL,若仅去除所有sum和group by 返回5000行数据,响应时间1-2秒,加上聚合查询返回30条聚合结果,响应时间2-4分钟

#3


经查时间开销,300秒花费在了Copying to tmp table上。但是之前数据库优化了tmp_table_size = 128M,不明白为何会写到磁盘上。

#4


调整了下SQL,group by 调整为主键字段,发现避开了tmp table,
现在300秒开销到了Sending data,问题依然未解决

#5


三个表的索引情况呢

crmorderfo2_.COMP_ID=27 上加索引
meadeliver0_.PDDO_ODATE这个上加索引

#6


meadeliver0_.PDDO_ODATE这个上加索引后速度明显提升,结帖