【问题标题】:Mysql : sql query execution duration difference between two identical mysql serversMysql:两个相同的mysql服务器之间的sql查询执行持续时间差异
【发布时间】:2018-06-18 17:01:11
【问题描述】:

我有这些配置:
1 - 服务器 Windows 10 CPU E31220 3.1GHz RAM 6Go- Mysql 5.6.30
2 - 服务器 Ubuntu i5 1.70GHz - RAM 6Go - Mysql 5.6.30

这个查询:

select sum(fraisprovi0_.montant_ht_provisioire) as col_0_0_ from T_FRAISPROVISION fraisprovi0_ where fraisprovi0_.num_cmmande in (select vente1_.num_commande_detail from T_VENTE vente1_ where vente1_.lot_id=57750)

在服务器 1 上:查询的执行持续时间:1.50 秒。
在服务器 2 上:查询的执行持续时间:0.01 秒。

什么会导致两台服务器之间存在如此大的差异?

查询在本地执行,网络似乎不是原因。
两台 mysql 服务器上的数据库相同。
我是两台服务器上唯一的一个用户。

【问题讨论】:

  • 各种因素。首先,O/S 是不同的。所以服务器肯定不是“相同的”。你也没有提到数据集在两者中是否相同,它们有什么 CPU/RAM,在这些环境中运行的还有什么,它们有多少网络带宽,有多少并发用户等等等等。
  • 服务器/数据库忙?
  • 相同的查询计划?不一样?
  • 从一个角度来看,你的差异是 150 倍,从另一个角度来看 - 只是一秒钟。为了消除“某事很忙”和“某事在缓存中”的因素,您应该对查询进行至少 100 次基准测试并取中等值——它们很可能具有可比性。如果不是 - 确保索引和缓存策略相同
  • 这个查询执行了 100 次,所以最后差别很大。关于缓存和其他设置,如何检查两个mysql服务器之间的差异?我应该查看哪些关键属性?

标签: mysql sql windows-server ubuntu-server


【解决方案1】:

不确定那里出了什么问题,但您可以尝试JOIN 表格通常会带来更好的结果:

SELECT SUM(fraisprovi0_.montant_ht_provisioire) as col_0_0_ 
FROM T_FRAISPROVISION fraisprovi0_ 
INNER JOIN T_VENTE vente1_
ON fraisprovi0_.num_cmmande = vente1_.num_commande_detail
AND vente1_.lot_id=57750

还有一点我想提一下,当您比较 2 个 serevrs 的性能时,我通常会在查询中添加 SQL_NO_CACHE 关键字,以避免在服务器端进行任何影响测试结果的缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多