Я заметил проблемы с производительностью на одном из моих серверов под управлением Apache / PHP / MySQL.
Поэтому я решил исследовать и протестировать его на других серверах.
Что я сделал?
На трех разных серверах я создал базу данных (db_sandbox), с одним innodb стол (table_sandbox), с 4 столбцами (мне бы (число), заглавие (varchar 255), описание (текст), Дата (отметка времени)). НОТА: мне бы это первичный ключ с автоинкрементом.
Я создал простую процедуру PHP, которая включает в эту таблицу 15 000 записей в группах по 5 000, используя 3 разных метода:
Прежде всего, очевидно, что методы 2 и 3 являются лучшими с точки зрения производительности. Но дело не в этом. На самом деле методы 2 и 3 - это просто идеальные сценарии, но они встречаются редко.
В любом случае, когда я сравнивал результаты каждого из них, я был удивлен. Считая СЕРВЕР-1 моим проблемным сервером, я получил следующее:
Я пришел к выводу, что в настройках SERVER-1 есть что-то, что влияет на выполнение нескольких отдельных запросов.
Кто-нибудь знает, какие у них могут быть настройки?
СЕРВЕР-1: Это виртуальная машина
СЕРВЕР-2
СЕРВЕР-3
НОТА: Я сравнил my.ini из СЕРВЕР-1 и СЕРВЕР-3 и они практически идентичны. СЕРВЕР-2, Бег MySQL 5.0 совсем другое.
Если я хорошо прочитал и понял ваш вопрос, вы сравниваете те результаты, которые вы получаете на виртуальной машине Windows, работающей на ESXi, с server2 и 3, которые запускают свои операционные системы на голом железе.
Пока HW остается аналогичным, нет никаких шансов, что вы увидите лучшую производительность на виртуальной машине.
Сервер баз данных на чистом металле всегда будет быстрее. Чем больше пишите на диски, которые ставите в очередь, тем вернее становится это последнее предложение.
Эти вставки на Server1, вероятно, замедляются из-за уровня виртуализации, и существует огромное количество литературы, в которой обсуждается, что не следует виртуализировать там, где производительность имеет значение.
Кроме того, это особенно верно для ESXi без флэш-кеш-контроллера hw raid.
После множества тестов и опробования различных комбинаций я не могу сказать, что нашел идеальное решение, которое, вероятно, будет включать некоторые настройки виртуальной машины, которые мой ИТ-специалист не смог найти. В любом случае, вот две вещи, которые действительно повлияли на производительность (имейте в виду, что это относится только к INNODB):
1 - Использовать транзакции, т. Е. Отключить автоматическую фиксацию, выполнить все транзакции и зафиксировать в конце.
2 - Вы можете значительно повысить производительность, установив innodb-flush-log-at-trx-commit к 0 или 1. Пожалуйста, прочтите полная документация чтобы понять последствия этого действия.
Я надеюсь, что это поможет кому-то еще.