Я обнаружил очень загадочную разницу в производительности 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"