Низкая производительность MySQL на новом сервере Windows 2012 R2.

Я обнаружил очень загадочную разницу в производительности MySQL на новой машине, которую я недавно построил, по сравнению с двумя старыми машинами. Машины используют MySQL в качестве бэкенда для веб-сервера на основе IIS.

Все три используют одни и те же параметры MySQL (один и тот же ini-файл). Все используют одни и те же таблицы... все MyISAM. Кэширование отключено на всех.

Новейший сервер (№3) генерирует веб-страницы заметно медленнее, чем другие, и я сузил проблему до MySQL. Новейший сервер (№ 3) равен или значительно превосходит другие машины почти во всех тестах, которые я запускал.

ТОЛЬКО mysql кажется медленным.

Сначала я подозревал, что проблема может заключаться в некоторых конкретных запросах или настройках, но даже самые простые запросы выполняются медленнее. Я продолжал делать запросы все проще и проще, а разница осталась. Независимо от того, какой запрос я запускаю, простой или сложный, новый сервер (№ 3) работает примерно в 2-3 раза медленнее, даже без каких-либо обращений к таблицам. Я даже выполнил следующий запрос и все же обнаружил двукратную разницу в скорости:

SELECT 1; 

Один из примеров довольно простого, но более чем тривиального запроса:

 SELECT COUNT(*) FROM users WHERE email LIKE '%ab%'

где пользователи имеют около 18000 строк с проиндексированной электронной почтой.

Этот запрос занимает около 0,0090 с на сервере №1. Этот запрос занимает около 0,0270 с на сервере №3.

Сервер № 3 фактически простаивает, на нем больше ничего не работает. Я еще даже не установил на него антивирусное программное обеспечение, где № 1 находится под умеренной нагрузкой, а № 2 почти бездействует.

ОС, конечно, отличается, но я бы не ожидал 2-3-кратной потери производительности на более новой версии ОС на гораздо более быстрой машине в одном приложении и ни в каких других.

Что мне не хватает????

Конфигурации сервера....

Сервер №1 (около 2008-09):

  • Intel Core i7 Extreme Edition, 3,2 ГГц (Nehalem, 4 ядра)
  • Материнская плата Intel DX58SO
  • 6 ГБ оперативной памяти (3 x 2 ГБ)
  • Виндовс 2008, 64 бит
  • 2 жестких диска Western Digital Black 640 ГБ в Raid 1
  • MySQL 5.6.16
  • Соединитель ODBC 5.2

Сервер №2 (около 2010-11 гг., с некоторыми обновлениями):

  • Intel Core i7, X995 @ 3,6 ГГц (Westmere, 6 ядер)
  • Материнская плата Intel DX58SO2
  • 12 ГБ ОЗУ (3 x 4 ГБ)
  • Windows 7 Профессиональная, 64-битная
  • 1 x Intel SSD 480 ГБ (1-2 года назад)
  • MySQL 5.6.16
  • Соединитель ODBC 5.2

Сервер №3 (2013-14):

  • Intel Core i7-4770K @ 3,5 ГГц (Broadwell, 4 ядра)
  • Материнская плата ASUS Z87-WS
  • 16 ГБ ОЗУ (2 x 8 ГБ, 1866)
  • Windows Server 2012 R2, 64-разрядная версия.
  • 2 x Intel SSD DC S3500 160 ГБ в Raid 1
  • MySQL 5.6.17
  • Соединитель ODBC 5.2

Вот разница переменных («‹» представляет сервер 1, где «>» представляет сервер 3... с удаленными файлами журнала и именами серверов):

diff Variables.Server1.csv Variables.Server3.csv
18a19
> "block_encryption_mode","aes-128-ecb"
22c23
< "character_set_database","latin1"
---
> "character_set_database","utf8"
29c30
< "collation_database","latin1_swedish_ci"
---
> "collation_database","utf8_general_ci"

99c100
< "innodb_autoextend_increment","1000"
---
> "innodb_autoextend_increment","64"
206c207
< "innodb_version","5.6.16"
---
> "innodb_version","5.6.17"
212c213
< "key_buffer_size","8388608"
---
> "key_buffer_size","268435456"

335c336
< "pseudo_thread_id","12032"
---
> "pseudo_thread_id","4"

430c431
< "timestamp","1396976138.845271"
---
> "timestamp","1396976213.390847"
440c441
< "version","5.6.16"
---
> "version","5.6.17"

person Camron Rust    schedule 08.04.2014    source источник
comment
Вы пробовали MySQL 5.6.16 на # 3?   -  person Lucas    schedule 08.04.2014
comment
Да. Я начал эту сборку еще в декабре, когда впервые заметил проблему... еще до того, как вышла версия 5.6.17. Пришлось на время отложить работу из-за нехватки времени. С тех пор я периодически работал над этим, но безуспешно. Я только что обновил его до 5.6.17, чтобы посмотреть, будет ли это иметь какой-либо эффект.   -  person Camron Rust    schedule 08.04.2014
comment
Я также только что попробовал более новую версию коннектора на № 3 (версия 5.3.2). Без изменений.   -  person Camron Rust    schedule 08.04.2014
comment
Вы проверили различия в SHOW VARIABLES - это может быть какое-то значение конфигурации по умолчанию, ограничивающее использование памяти MySQL   -  person Dobromir Velev    schedule 08.04.2014
comment
Добавлено различие переменных (с удаленными различиями в имени файла журнала и сервера). Я не вижу никакой разницы, которую я ожидал бы иметь какой-либо эффект.   -  person Camron Rust    schedule 08.04.2014


Ответы (2)


Я когда-либо испытывал это. В Windows 2012 IPv6 является приоритетом. Попробуйте отключить IPv6. Из PowerShell запустите это:

c:> New-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\services\TCPIP6\Parameters -Name DisabledComponents -PropertyType DWord -Value 0xffffffff

Затем перезапустите.

В windows\system32\drivers\etc\host раскомментируйте 127.0.0.1 localhost.

person user3636042    schedule 14.05.2014
comment
Вы также должны сообщить нам причины и результат вашего решения. - person ; 14.05.2014

Хотя я еще не опробовал предложение относительно IPv6, я добился определенного успеха... косвенно.

Несколько недель назад для Windows Server был выпущен пакет исправлений/обновлений. После применения обновлений mysql волшебным образом начал работать так же или даже лучше, чем старый сервер, а не намного медленнее. Я точно не знаю, что это был за патч, так как их было несколько, но я заметил немедленное улучшение.

person Camron Rust    schedule 25.06.2014