Возможный дубликат:
Можете ли вы помочь мне с планированием моей мощности?
Я написал приложение, которое использует MySQL и Sphinx для поиска и хранения информации.
приложение содержит базу данных размером 300 ГБ (в основном текст, средний текст и символы var). мой индекс сфинкса весит 30 ГБ.
Моя проблема была сформулирована, когда я планировал иметь 100 ГБ ~ БД, а теперь у меня есть 300 ГБ, которые нельзя загрузить в память (?).
Я ищу лучшую архитектуру, которая даст мне максимальную производительность.
мое приложение сначала получает запрос, затем запускает его по индексу sphinx, получает большую часть идентификаторов от sphinx, запрашивает в БД несколько текстовых полей для этих идентификаторов и отправляет результаты в средство ранжирования .NET (специальный алгоритм).
Чтобы получить максимальную производительность, я использовал сервер Xeon i7 W3520 с 2 дисками SSD (оперативная память 24 ГБ) для MySQL, это не дешево, и мне не хватает места, и я не могу добавить больше дисков, поэтому мне нужен другой сервер.
Как вы думаете, сильно ли повлияет на производительность, если я буду использовать сервер с обычными дисками для mysql? Я знаю, что мне нужны быстрые диски для поиска сфинкса (это моя полнотекстовая поисковая система), я использую индексированное поле (ID) для выбора строк из БД без каких-либо сложных запросов, мне может потребоваться разместить БД на более дешевый сервер с достаточным объемом памяти.
ты можешь найти мое узкое место? Приложение .NET требует в основном ОЗУ и ЦП, БД требуется много места и / или ОЗУ, а сфинксу нужны быстрые диски и ОЗУ.
Я ищу лучшую архитектуру, которая даст мне максимальную производительность.
В чем тут вопрос? Не поймите меня неправильно, но есть только ОДИН способ сделать это - поместить базу данных на самый быстрый SSD, который вы можете получить.
Может ли это иметь смысл? Понятия не имею, но вам нужен не достаточно быстрый сценарий, а ВЫСОКАЯ производительность.
и теперь у меня есть 300 ГБ, который нельзя загрузить в память (?).
Вы знаете, это неправда. Сервер на 512 ГБ по сегодняшним меркам не очень большой.
будет ли сервер с более медленными дисками сильно влиять на производительность?
Конечно, будет. Обычно IOPS - производительность ввода-вывода - является ограничивающим фактором для базы данных, когда база данных не загружена в RAM.
Как вы думаете, сильно ли повлияет на производительность, если я буду использовать сервер с обычными дисками для mysql? я
Определите «обычный диск». Массив дисков SAS 15k RPM является "обычным" для высокопроизводительной базы данных, каждый диск примерно в 3-4 раза больше IOPS, чем ваш обычный диск, но затем ... с такой МАЛЕНЬКОЙ базой данных поместите его в SSD 512 ГБ и получите 50 000 операций ввода-вывода в секунду вместо 500 или около того, которые дает диск SAS 15 КБ.
БД требуется много места и / или ОЗУ, а сфинксу нужны быстрые диски и ОЗУ.
ЛЮБАЯ база данных, которая не заполняет все данные из ОЗУ, обычно ограничена дисками, в основном потому, что диски ужасно МЕДЛЕННО МЕДЛЕННО МЕДЛЕННО. Самая быстрая дисковая подсистема является стандартной при установке больших баз данных, но у вас небольшая база данных, поэтому достаточно простого SSD. К сожалению, это ВСЕ ЕЩЕ намного меньше производительности, чем RAM.
что я могу сделать, чтобы уменьшить размер БД, если 300 ГБ?
Понимаете, это крошечный? У меня дома есть база данных на 850 ГБ, а моим последним проектом была база данных на 21000 ГБ. В зависимости от того, что я делаю с некоторыми данными, к которым у меня есть доступ сейчас, я получаю 44000 ГБ сильно сжатых данных, которые мне нужно будет обработать. 300gb - это мало для "получения памяти".
имеет значение, использую ли я Linux или Windows для MySQL?
Может быть, это так, но для ЭТОГО вопроса это совершенно неуместно. Windows может иметь - в зависимости от конфигурации - большие накладные расходы, но это не имеет значения. Когда вы имеете дело с подобными системами, жесткое указание дополнительных 128M накладных расходов не имеет никакого значения.
вы действительно знаете, что делает ваш сервер, знаете ли вы, где узкие места в производительности? если у вас нет какого-либо мониторинга и отслеживания тенденций, вы слепы.
Может быть, вам поможет простое добавление правильной индексации данных?
возможно, ввод-вывод действительно является вашим пределом, но, возможно, у вас много свободных циклов ЦП, и простое сжатие больших двоичных объектов, хранящихся в базе данных, может увеличить коэффициент попадания в кеш-память за счет [де] сжатия на лету, что, вероятно, будет незаметно.
Я бы сказал, что запуск mysql / sphinx под Linux даст вам больше шансов увидеть и отследить, «что происходит внутри».