MySQL在一台服务器上比另一台服务器慢10倍

时间:2012-08-01 15:21:38

标签: mysql performance compare centos archlinux

我有一个实时服务器和我的开发服务器,我发现我的 LIVE (非开发)服务器上的查询运行速度慢了10倍,即使实时服务器功能更强大且它们都是运行可比负荷。它不是数据库结构的东西,因为我将备份从实时服务器加载到我的开发服务器。

有没有人对我在哪里寻找差异有任何想法?它可能是MySQL配置的东西吗?我该在哪里开始寻找?

直播服务器:

mysql> SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as revenue FROM `transactions` AS `Transaction` LEFT JOIN `meters` AS `Meter` ON (`Transaction`.`meter_id` = `Meter`.`id`) LEFT JOIN `units` AS `Unit` ON (`Meter`.`unit_id` = `Unit`.`id`) WHERE (NOT (`Unit`.`building_id` IN ('1', '85')) AND NOT (`Transaction`.`state` >= 90)) AND DAY(`Transaction`.`created`) = DAY(NOW()) AND YEAR(`Transaction`.`created`) = YEAR(NOW()) AND (MONTH(`Transaction`.`created`)) = MONTH(NOW());
+-------+---------+---------+
| count | sum     | revenue |
+-------+---------+---------+
|   413 | 3638550 |  409210 |
+-------+---------+---------+
1 row in set (2.62 sec)

[root@mises ~]# uptime
 17:11:57 up 55 days, 1 min,  1 user,  load average: 0.45, 0.56, 0.60

Dev Server(由于备份的时间延迟,结果计数不同):

mysql>  SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as revenue FROM `transactions` AS `Transaction` LEFT JOIN `meters` AS `Meter` ON (`Transaction`.`meter_id` = `Meter`.`id`) LEFT JOIN `units` AS `Unit` ON (`Meter`.`unit_id` = `Unit`.`id`) WHERE (NOT (`Unit`.`building_id` IN ('1', '85')) AND NOT (`Transaction`.`state` >= 90)) AND DAY(`Transaction`.`created`) = DAY(NOW()) AND YEAR(`Transaction`.`created`) = YEAR(NOW()) AND (MONTH(`Transaction`.`created`)) = MONTH(NOW());
+-------+---------+---------+
| count | sum     | revenue |
+-------+---------+---------+
|   357 | 3005550 |  338306 |
+-------+---------+---------+
1 row in set (0.22 sec)

[www@smith test]$ uptime
 18:11:53 up 12 days,  1:57,  4 users,  load average: 0.91, 0.75, 0.62

Live Server(2 x Xeon Quadcore):

processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 44
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping        : 2
cpu MHz         : 2395.000
cache size      : 12288 KB
physical id     : 0
siblings        : 8
core id         : 10
cpu cores       : 4

Dev Server(1 x Quadcore)

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 23
model name      : Intel(R) Core(TM)2 Quad CPU    Q8300  @ 2.50GHz
stepping        : 10
microcode       : 0xa07
cpu MHz         : 1998.000
cache size      : 2048 KB
physical id     : 0
siblings        : 4
core id         : 3
cpu cores       : 4

直播服务器:

  1. CentOS 5.7
  2. MySQL ver 5.0.95
  3. 开发服务器:

    1. ArchLinux
    2. MySQL ver 5.5.25a

2 个答案:

答案 0 :(得分:1)

首先要检查的是你的MySql配置文件,以确保你使用适当数量的内存进行查询...比如key_buffer,sort_buffer等等...那里有比我聪明的人更聪明的人有完整的博客致力于配置MySql。

您还可以在“解释”之前添加查询,以查看花费最多时间的内容......但这可能只是以后常用的内容。

实际上,您的“实时”服务器具有缓存功能和两倍的内核数量来进行这些查询,并且它可能具有足够的马力和内存来解释服务器之间查询时间的差异。

答案 1 :(得分:0)

所以,我在运行Centos,1 CPU和512MB内存的虚拟机上运行相同的数据库和查询:它在0.3秒内提供该查询的答案;系统负载为0.4:/

唯一真正的区别似乎是我在该服务器上运行Mysql 5.5。而且似乎真的在我的情况下从Mysql 5.0到Mysql 5.5的性能提升了10倍。

我只知道一旦将我的实时服务器从Mysql 5.0迁移到Mysql 5.5,我会在完成后确认结果。