Люди постоянно говорят мне, что для повышения производительности SQL-сервера покупайте самые быстрые жесткие диски с RAID 5 и т. Д.
Поэтому я подумал, что вместо того, чтобы тратить все деньги на RAID 5 и супер-быстрые жесткие диски (что, кстати, не дешево), почему бы просто не получить тонны оперативной памяти? Мы знаем, что SQL-сервер загружает базу данных в память. Память гораздо быстрее любых жестких дисков.
Почему бы не разместить около 100 ГБ ОЗУ на сервере? Тогда просто используйте обычный жесткий диск SCSI с RAID 1. Разве это не будет намного дешевле и быстрее?
performance
raid
sql
memory
hard-drive
user1034912
источник
источник
Ответы:
Ваш анализ хорош - в какой-то степени - в том, что он абсолютно все сделает быстрее. Вы все еще должны учитывать пару других проблем:
Не каждый может позволить себе достаточно памяти; если у вас есть несколько терабайт данных, вы должны поместить их на диск некоторое время. Если у вас мало данных, все достаточно быстро.
Производительность записи для вашей базы данных будет по-прежнему ограничена дисками, так что вы можете сдержать обещание, что данные действительно были сохранены.
Если у вас небольшой набор данных или вам не нужно сохранять его на диске, в вашей идее нет ничего плохого. Такие инструменты, как VoltDB, работают над тем, чтобы уменьшить накладные расходы, которые делали более старые предположения в реализациях RDBMS, которые ограничивают чистую производительность в памяти.
(Кроме того, люди, которые советуют вам использовать RAID-5 для повышения производительности баз данных, вероятно, не являются хорошими людьми для прослушивания этой темы, поскольку это почти никогда не лучший выбор - у него хорошая производительность чтения, но плохая производительность записи и записи. почти всегда являются производственными ограничениями - потому что вы можете использовать оперативную память в кешировании для решения большинства проблем производительности на стороне чтения.)
источник
Краткая версия: рассмотрим размер рабочего набора. Длинная версия: насколько велики ваши данные? Если он может уместиться в памяти современного сервера, да, вы абсолютно правы. К сожалению, самый большой Xeon может адресовать 2 ТБ ОЗУ прямо сейчас, и это уже не так уж много для набора данных. Если вы не можете купить машину, достаточно большую, чтобы разместить весь свой рабочий набор в оперативной памяти, вы вынуждены решать проблемы с помощью своего мозга, а не своего кошелька.
источник
Если вы хотите скорость:
Выполните эти шаги, и SQL Server будет летать.
Затем, если хотите, добавьте больше оперативной памяти ... но сначала сделайте вышеописанное, и вы вполне можете обнаружить, что все готово.
источник
В http://www.tbray.org/ongoing/When/200x/2006/05/24/On-Grids . Обратите внимание, что это было шесть лет назад. Да, у нас есть системы баз данных, которые стараются (и очень стараются) хранить весь набор данных в ОЗУ и скорее разделять их на несколько машин, чем использовать диск, потому что диск все равно на несколько медленнее. Вам нужно записать набор данных на диск, но, как и в девизе выше, это больше похоже на фоновое задание резервного копирования, чем на оперативную операцию. Долговечность достигается за счет добавления только журналов с этими базами данных (я думаю, MongoDB и Redis, но их гораздо больше).
источник
Этот вопрос похож на основной вопрос, который привел к значительным исследованиям и разработкам в области архитектуры баз данных за последние 5-10 лет. Теперь, когда во многих случаях целесообразно хранить целую базу данных в ОЗУ, базу данных необходимо разрабатывать с учетом работы в ОЗУ, а не просто применять устаревшие унаследованные архитектуры к хранилищу на основе ОЗУ.
Подобно тому, как в последние годы широкое распространение получили многие более мелкие и более специализированные языки, мы вступаем в эпоху, когда потребуется больше баз данных специального назначения.
Для дальнейшего прочтения этой темы я рекомендую академическую статью «Конец архитектурной эры (время полной переписки)» . Это не сложно читать.
Неясно, был ли этот вопрос конкретно о SQL Server. Оригинальный плакат должен прояснить это.
Даниэль Питман написал:
Сокращение накладных расходов от более старых допущений в реализациях RDBMS было именно целью проекта VoltDB , но он масштабируется горизонтально, без архитектурного ограничения на размер данных, и может сохраняться на диске для полной надежности с использованием моментальных снимков и регистрации команд.
источник
Если вы можете получить сервер с достаточным объемом ОЗУ для размещения хотя бы горячей части вашего набора данных, у вас все будет хорошо. Кроме того, RAID 1 и 5 - не самый быстрый способ упорядочить ваши данные - RAID 0 быстрее, но тогда вам придется учитывать более высокие шансы сбоя файловой системы, который стирает вашу базу данных - это не очень хорошая вещь, чтобы это произошло , Вы можете использовать RAID 1 или RAID 5 в своем массиве RAID 0 при условии, что у вас достаточно дисков и контроллеров.
Вы даже можете поиграть с репликацией здесь - делайте свои записи на сервер с интенсивным использованием диска, который реплицируется на один или несколько серверов с интенсивным использованием памяти, где выполняются сложные запросы.
К сожалению, RDBMSs, кажется, находятся в большой железной сфере - их не так просто вырастить по горизонтали.
источник
Это случай «это зависит от того, что вы делаете». Возможно, «правильный» совет - вообще избегать SQL и использовать memcache / redis / etc!
Я согласен с вами, что дополнительная ОЗУ очень поможет, особенно если вы сможете прочитать весь рабочий набор в ОЗУ. Да, ему все равно придется записывать данные, но если у вас есть в основном чтение, то записи не будут конфликтовать из-за дискового ввода-вывода.
Однако производительность диска часто является узким местом на серверах SQL и сложнее, чем другие вещи, такие как оперативная память, для обновления позже (если у вас есть сервер, который не полностью заполнен модулями DIMM).
Было несколько комментариев о том, что RAID5 работает медленно, но я бы сказал, что это не всегда так, поэтому будьте осторожны, прежде чем делать широкие заявления. Действительно высокопроизводительные серверы с быстрыми картами RAID и большим количеством BBWC иногда работают намного быстрее в RAID5 (или RAID50 с> 4 дисками), чем в RAID10 ...
На протяжении многих лет я лично испытывал медленные массивы RAID5, но после тестирования DL360 G5 с 4 дисками SAS 146G в 2009 году нам пришлось дважды проверять наши тесты. Действительно, массив работал быстрее с RAID5, чем RAID10 почти в каждом тесте. BBWC и быстрые вычисления четности позволили серверу гораздо эффективнее использовать 4 диска в качестве массива RAID5, чем RAID10. Некоторые из тестов показали на 50% лучшую пропускную способность с RAID5, и почти ни один не был медленнее. Тесты, которые были медленнее, были только 5-10%.
Я хотел бы предостеречь людей, которые делают общие заявления о том, что RAID5 медленный, все говорят это онлайн, но это не всегда так.
источник
У вас есть смешанный пакет конфет на выбор и зависит от того, какой вкус вы хотите.
Проще говоря, вкладывайте деньги в знания (бесплатно), прежде чем раздавать деньги. 1. Изучите конфиги для вашей базы данных и посмотрите текущую конфигурацию для оптимизации. 2. Посмотрите на операторы программирования и sql, модульное тестирование с простыми сценариями, которые имитируют выполняемые операции, это может даже не быть тем, что вы считаете проблемой. Если простые сценарии занимают время с использованием объединений SQL, разделяют их и делают то же самое с запрограммированным циклом, чтобы сделать то же самое. Это где память может помочь 3. Посмотрите на план хостинга и сервер. Используйте ps aux в консоли linux и посмотрите, не загружает ли что-то вашу память и процессор.
Жесткий диск абсолютов повышает скорость, но не зависит от вас в виртуальном серверном пространстве. Память не улучшит скорость, если вы не настроите службы для нее, точка. Помогает это с чередованием RAID (0,5), RPM и синхронного чтения / записи с быстрой шиной. Процессорное ядро с хорошим кешем l1, l2, l3 поможет устранить узкие места. могу ли я услышать это для Xeon!
источник
В целом, вы должны помнить о размере и масштабируемости. Хотя может показаться, что вы начинаете с небольших потребностей в хранении, ваши данные будут расти очень быстро и в геометрической прогрессии. БД лучше всего использовать атомарные данные, которые разбиты до минимально возможного размера. Из-за небольшого размера он быстрее перемещается в хранилище данных. Затем вы также учитываете структуру БД. В будущем вы можете ссылаться на внешние БД, поэтому структура также имеет решающее значение. В этом случае для вашего запроса будет мало что изменить, если половина данных будет находиться за пределами вашей витрины. Когда данные запрашиваются, дело не в том, чтобы хранить сохраненные данные в ОЗУ; скорее, запрос должен быть быстрым в доступе и возврате данных.
источник