Я разрабатываю веб-приложение и столкнулся с большой разницей в производительности между скоростью поиска MySQL в моей среде разработки и в реальной среде.
БАЗА ДАННЫХ: 2,5 ГБ, три таблицы (одна таблица содержит 27 миллионов записей). FULLTEXT индексы и поиск. Все, где нужно, индексируется. База данных содержит записи всех адресов в Великобритании.
DEV-СЕРВЕР: Двухлетний ультрабук Samsung i5. Windows 8 под управлением XAMPP. Один SSD. Большинство поисков занимают менее 200 мсек, при преднамеренной нагрузке на систему максимальное время поиска составляет 5 секунд.
ЖИВОЙ СЕРВЕР: «Гибридный» VPS (максимум 8 узлов на сервер). Технические характеристики оборудования: «Двойные процессоры Intel Xeon с минимум 8 ядрами ЦП, 24 ГБ ОЗУ, диски Raid 10 с дисками SAS 15K». Большинство запросов занимает около 3-5 секунд, а стресс-тест дает 30 секунд поиска.
Я доволен производительностью базы данных на моем сервере разработки, но мне действительно нужно, чтобы производственный сервер соответствовал этому или лучше.
Прежде чем я выделю отдельную коробку для приложения, по вашему опыту, узким местом будет дисковый ввод-вывод или время процессора?
Просто отправьте ответ для записи:
Я попробовал приложение на VPS с твердотельными накопителями с RAID. Разница в том, что день и ночь, и поиск теперь выполняется даже быстрее, чем на моей машине разработки. Это при установке MySQL по умолчанию, без каких-либо изменений в кешировании, максимальном использовании памяти и других параметрах.
На данный момент игнорируйте MySQL - это то же самое для всех баз данных. Физикам наплевать на открытый код.
Обычно вы являетесь IO Limited, ЕСЛИ это не так. Последнее означает наличие достаточного объема оперативной памяти для кэширования всех операций ввода-вывода в памяти - типично для больших рабочих нагрузок OLAP. Но все транзакции БУДУТ иметь ограничение ввода-вывода намного раньше, чем ЦП, если только ЦП не жалок (то есть вы всегда можете построить сервер, который заставляет ЦП перегружаться - атомы могут быть плохим выбором для серверов баз данных).
ау, производственный сервер. SOmeone в основном совершал "глупые" ошибки, покупая это.
Raid 10 дисков с дисками SAS 15K ».
Это около 450 операций ввода-вывода в секунду на диск.
Один SSD
Это примерно от 40 000 до 60 000 операций ввода-вывода в секунду - может достигать 90 000 в зависимости от диска и нагрузки.
Видите проблему? SSD летает вокруг дисков SAS - он меняет правила игры. SAS работает медленно. Я использую много дисков SAS 10k в моей основной базе данных, но с SSD в качестве прозрачного слоя кеширования.
Итак, если у вас недостаточно оперативной памяти, чтобы диски SAS неактуальны (кэшировать все в памяти), а затем выполнить предварительную загрузку (а это возможно в вашей небольшой базе данных размером всего 2,5 г) ... это связано с вводом-выводом.
В вашем конкретном случае я бы проверил конфигурацию. Стандартная конфигурация MySQL не будет использовать IIRC много памяти, независимо от того, есть ли она там. С крошечной базой данных (2,5 г) вы должны кэшировать все это в памяти. Даже на ноуте. Похоже на проблему конфигурации.