MySQL в 10 раз медленнее на одном сервере по сравнению с другим

У меня есть рабочий сервер и мой сервер разработки, и я обнаружил, что запросы на моем LIVE (не dev) сервере выполняются в 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

Живой сервер (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

Сервер разработки (1 четырехъядерный)

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. ЦенОС 5.7
  2. MySQL версии 5.0.95

Сервер разработки:

  1. АрхЛинукс
  2. MySQL версии 5.5.25a

person Michael Franze    schedule 01.08.2012    source источник
comment
запросы на моем сервере разработки выполняются в 10 раз медленнее, похоже, что действующий сервер работает медленнее, не так ли?   -  person Shahbaz    schedule 01.08.2012
comment
обе машины работают на разных версиях MySQL, как нам сравнивать?   -  person ajreal    schedule 01.08.2012
comment
Может быть много вещей... высокая ли у вас средняя нагрузка на действующем сервере?   -  person Ugo Méda    schedule 01.08.2012
comment
@Shahbaz, бьет рукой по лбу, да, извините, я имел в виду, что живой сервер был намного медленнее. Извините, исправлена ​​опечатка в пояснении.   -  person Michael Franze    schedule 01.08.2012
comment
@ajreal, да, но может ли одна версия Mysql действительно быть в 10 раз медленнее?   -  person Michael Franze    schedule 01.08.2012
comment
@UgoMéda, нагрузка на действующую систему на самом деле ниже; но даже при этом серьезная нагрузка на 4х ядерную систему должна быть около 4, эта система простаивает на 0.5   -  person Michael Franze    schedule 01.08.2012
comment
Живой сервер: 8 ГБ, сервер разработки 4 ГБ :/   -  person Michael Franze    schedule 01.08.2012
comment
Одна вещь, которую Live-сервер делает, а Dev нет, — это репликация (на другой live-сервер). Но уменьшит ли это производительность в 10 раз?   -  person Michael Franze    schedule 01.08.2012


Ответы (2)


Очевидно, что первое, что нужно проверить, это ваш файл конфигурации MySql, чтобы убедиться, что вы используете соответствующий объем памяти для запросов, таких как key_buffer, sort_buffer и т. д. Есть гораздо более умные люди, чем я, у которых есть целые блоги. посвященный настройке MySql.

Вы также можете добавить к своему запросу «объяснить», чтобы увидеть, что занимает больше всего времени... но это может быть просто чем-то для общего использования позже.

На самом деле ваш «живой» сервер имеет возможности кэширования и удвоенное количество ядер для выполнения этих запросов, и, вероятно, у него достаточно мощности и памяти, чтобы объяснить разницу во времени запросов между серверами.

person 1tiger1    schedule 01.08.2012
comment
Эй, Тигр, я проверю конфигурацию памяти; проблема в том, что Live-сервер с двумя ядрами и т. Д. В 10 раз медленнее, чем dev ... Я согласен, с кэшированием и ядрами я ожидал, что это будет наоборот :/ - person Michael Franze; 01.08.2012

Итак, я запустил ту же базу данных и запросы на виртуальной машине с Centos, 1 ЦП и 512 МБ памяти: она дает ответ на этот запрос за 0,3 секунды; загрузка системы 0,4 :/

Единственная реальная разница заключается в том, что я запускаю Mysql 5.5 на этом сервере. И кажется, что действительно в моем случае наблюдается 10-кратное улучшение производительности от Mysql 5.0 до Mysql 5.5.

Я узнаю наверняка только после того, как перенесу свои рабочие серверы с Mysql 5.0 на Mysql 5.5, и я подтвержу результаты, как только сделаю это.

person Michael Franze    schedule 02.08.2012
comment
Невероятно, но MySQL 5.5 действительно был в 10 раз быстрее, чем MySQL 5.0 для этого запроса. Увидел скачок производительности сразу после обновления Mysql. Кто бы мог подумать? - person Michael Franze; 07.08.2012