1

我有一个实时服务器和我的开发服务器,我发现我的实时(不是开发)服务器上的查询运行速度慢了 10 倍,即使实时服务器更强大并且它们都运行相当的负载。这不是数据库结构的事情,因为我将备份从实时服务器加载到我的开发服务器中。

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

直播服务器:

mysql> SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as income 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());
+-------+---------+---------+
| 计数 | 总和 | 收入 |
+-------+---------+---------+
| 413 | 3638550 | 409210 |
+-------+---------+---------+
一组中的 1 行(2.62 秒)

[root@mises ~]# 正常运行时间
 17:11:57 55 天,1 分钟,1 个用户,平均负载:0.45、0.56、0.60

开发服务器(由于备份的轻微时间延迟,结果计数不同):

mysql> SELECT count(`Transaction`.`id`) as count, sum(`Transaction`.`amount`) as sum, sum(Transaction.citiq_margin+rounding + Transaction.citiq_margin_vat) as income 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());
+-------+---------+---------+
| 计数 | 总和 | 收入 |
+-------+---------+---------+
| 第357章 3005550 | 338306 |
+-------+---------+---------+
1 行一组(0.22 秒)

[www@smith 测试]$ 正常运行时间
 18:11:53 12 天,1:57,4 个用户,平均负载:0.91、0.75、0.62

Live Server(2 x Xeon Quadcore):

处理器:7
vendor_id : 正版英特尔
CPU系列:6
型号:44
型号名称:Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
步进:2
中央处理器兆赫:2395.000
缓存大小:12288 KB
物理ID:0
兄弟姐妹:8
核心编号:10
CPU核心数:4

开发服务器(1 个四核)

处理器:3
vendor_id : 正版英特尔
CPU系列:6
型号:23
型号名称:Intel(R) Core(TM)2 Quad CPU Q8300 @ 2.50GHz
步进:10
微码:0xa07
中央处理器兆赫:1998.000
缓存大小:2048 KB
物理ID:0
兄弟姐妹:4
核心编号:3
CPU核心数:4

直播服务器:

  1. CentOS 5.7
  2. MySQL 版本 5.0.95

开发服务器:

  1. ArchLinux
  2. MySQL 版本 5.5.25a
4

2 回答 2

1

首先要检查的是您的 MySql 配置文件,以确保您使用适当数量的内存进行查询。例如 key_buffer、sort_buffer 等...有比我聪明得多的人拥有完整的博客专门用于配置MySql。

您还可以在查询前加上“解释”,以查看花费最多的时间……但这可能只是以后一般用途的东西。

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

于 2012-08-01T15:32:06.177 回答
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 后,我才能确定,一旦完成,我将确认结果。

于 2012-08-02T12:44:33.380 回答