Pull to refresh

Comments 84

Спасибо, интересно. На, мягко говоря, «не очень быстрых» дисках EBS амазона — создание софтварного рейда для ускорения производительности, пожалуй, единственное решение. Для RDS базы данных они тоже, согласно документации, поднимают софтварные рейды.
> Требуется поддержка SSD в серверах (контроллер, драйверы).

Эмм… Поддержка SATA III? Или вы о PCI-устройствах?

> SSD — это дорого.

Имхо, сильно дешевле чем RAID 10 с кучей дисков.

А на операциях random read/write топовые SSD вообще вне конкуренции.
Ну как вариант еще — держать всю базу в ОЗУ.
RAID 10 — ровно в два раза дороже. А SSD?

И, главное — «железная» инфраструктура плохо масштабируется.

Поэтому описанное решение в большей степени ориентировано на «облако».
>> RAID 10 — ровно в два раза дороже. А SSD?
Почему в два? Отказоустойчивость на SSD дисках тоже надо обеспечивать.
Вы не учитываете стоимость контроллеров (и полок), стоечного места, электричества, охлаждения.
Конечно, все это начинает сказываться только на действительно быстрых дисковых подсистемах — со скоростями больше 5000-6000 iops.
Например, чтобы получить 5000 iops вам потребуется примерно 24 (5000/200 с округлением до четного вверх, но мы округлим вниз — до 24; зачем — будет видно дальше) дисков. При цене диска (SAS 300 Gb 15000 rpm — диски меньшего размера сейчас у вендоров не популярны) примерно $300-$350 получаем $7800 — $9100.
Для сравнения, пара промышленных SSD (например от Делла; насколько я знаю, они используют диски от Pliant) стоит $9198 ($4599 за штуку), которая даст вам производительность на уровне 100000 iops!!!
При этом традиционными дисками вы полностью забьете всю полку (если опять же ориентироваться на железо Делла, а именно на MD3220 емкостью 24 диска — вот почему я округлял вниз), а в случае с SSD у вас еще останется куча места для дисков.
SSD диски в некоторых сценариях оказываются намного предпочтительнее традиционных HDD — SSD дают существенную разницу в скорости при сопоставимой стоимости.
Если речь идёт о SSD в RAID, то бессмысленно закладывать «промышленные SSD» в его конфигурацию: массив недорогих SSD будет дешевле, надёжнее и, пожалуй, быстрее, нежели вышеупомянутые.
Ну и потом, увеличение размера оперативной памяти будет скорее всего эффективнее для MySQL по отдаче с цены гигабайта/производительности, чем дисковая подсистема.
К сожалению, не все дисковые полки умеют работать с SATA дисками. Например, упомянутая мной выше Dell PowerVault MD3220 понимает только SAS. А SAS диски — только промышленные (их вообще всего с десяток моделей наберется).
Использование подобных полок в нашем случае — необходимость, т.к. они нам нужны для создания failover-кластеров.
Опыта работы с MySQL, к сожалению, не имел; только MS SQL Server. Поэтому прокомментирую из собственного опыта: На наших серверах дальнейшее увеличение объема памяти не всегда оправдано (на текущий момент процент попадания запросов в кеш — 99,5% при 128 ГБ памяти на сервере и БД более 1 ТБ). Например, нагрузочное тестирование показывает, что узким местом в нашем случае становится tempdb (ее-то мы и будем переносить на SSD).
Давайте уж уточним, что на самом деле понимает, только как обычно, особенные ;)
Конечно, полки на лету не меняют, но я бы всё же посмотрел в сторону «обычных» полок от, скажем, Infotrend'a с поддержкой «обычных» SSD.
Я не знаю MS SQL Server, но создание tempdb это разве не создание БД, которая не влезает как раз-таки в память?

У Dell кстати, лежит любопытное исследование: SSD vs HDD Price and Performance Study.
Уточните, плз, в каком именно месте написано, что понимает? Мы пробовали — у нас результат совпадает с мануалом — т.е. полка с САТА дисками работать отказывается.
Про Инфортренд мы в курсе. Но как-то стремно — нам нужен очень высокий уровень поддержки и есть сомнения, что партнеры инфортренда смогут его обеспечить.

У MS SQL Server есть активности (не считая логирования), которые сервер пытается «провести» через диск даже при достаточном количестве оперативной памяти — в этом случае используется tempdb.
Да, но где сказано, что это SATA диски?
Используемый Dell'ом Plink — это SAS. MD32x0 не поддерживает SATA. А подавляющее большинство SSD дисков — SATA, а имеющиеся на рынке SAS SSD не сильно отличаются по цене от Plink.
Ну так я специально и подчеркнул, что особенные.

Почитал по tempdb, несколько в недоумении, в MySQL всё гораздо проще:
http://dev.mysql.com/doc/refman/5.5/en/internal-temporary-tables.html. Самое важное:
If an internal temporary table is created initially as an in-memory table but becomes too large, MySQL automatically converts it to an on-disk table. The maximum size for in-memory temporary tables is the minimum of the tmp_table_size and max_heap_table_size values

Первая десятка результатов гугления же по tempdb показывает только советы заранее allocate'ить место большим файлом tempdb да размещать его на больших дисках, из чего я делаю вывод, что MS SQL настолько тупой, что не умеет настраивать размер временных таблиц в памяти.
*размещать его на больших дисках => размещать на быстрых дисках
SSD дохнут, их для базы лучше не исопльзовать
Тут недавно ребята с рутрекера писали (см. habrahabr.ru/blogs/linux/129551/#comment_4290722 и комменты в треде) о своем опыте использования SSD. В 2-х словах — слухи о высокой смертности SSD сильно преувеличены. И в частности:
— На рто используются несколько PCI-X плат OCZ с SSD маленького обьема, на них лежат особо критичные к скорости БД. Работают около года, отказов пока не было. Оказались в разы быстрей ( и в разы же дешевле) SAS кеш-контроллеров с 15к винтами. Как раз их и дубасят запросами на запись и чтение круглосуточно.
— Ну в крайнем случае можно и RAID1 из 2-х дисков сделать.
Мы использовали для статического контента, отдают быстрее (http://habrahabr.ru/blogs/nginx/108958/).
А на счет базы, то с полной репликой, да, можно исопльзовать.
При очень большом кол-ве обращений — чаще. При низком — хз.
Да вот ставили знакомые, за +-год все ссд-шки подохли,
действительно, неправильно написал, важна перезапись,
там был гарячий кеширующий (гарячий-холодный кеш) сервер всяких картинок.
Ну у меня конечно в режиме домешне-рабочего использования, но 3 ssd от интела вполне живы и здоровы — третий год пошёл.
В режиме домашнего использования они почти вечны:) Те же флешки, нетбуки, телефоны ни у кого никогда не исчерпывали свой лимит.
Домашний и промышленный режимы работы — принципиально разные. ;)

Во всем — винты, блоки питания, корпусы…
Проблема записи важнее чем чтения.
так что лучше её решите.
Какое соотношение SELECT / UPDATE / INSERT на большинстве проектов?
на хорошем проекте SELECT очень мало, остальное именно UPDATE / INSERT
Вы ведь, наверняка, кэш подразумеваете?

Он — не панацея. Особенно на многопользовательских проектах (форумы, соц. сети и т.п.)
да и кэш в том числе.

а какое соотношение обычных сайтов к многопользовательским?
Я не знаю соотношение. Но мало можно найти сейчас сайтов, где нет регистрации пользователей в том или ином виде.

Это значит, что многим показывается персонифицированная информация.
сайты с регистрацией != форумы, соц. сети и т.п
Для многих крупных высоконагруженных веб-проектов зачастую «узким» местом в производительности становится...

1С-Битрикс
При прочих равных, мне кажется, это не тема данной статьи, и ребята провели интересное исследование.
Согласен, исследование хорошее.
Предыдущий мой коммент из серии Юмор.ФМ :) Хотя, как известно, в каждой шутке...
>Если бы мы могли везде использовать SSD, нам бы вообще ничего не нужно было изобретать с точки зрения производительности, вся наша работа не имела бы особого смысла.

Пройдет еще год-два и так и будет.
Возможно. Но это не повод откладывать все большие проекты и год-два не работать. ;))
Хорошая статья.

Только, можно попросить в графиках:
1. Подписать ось Y — не для всех очевидно что это за числа, и указать, что лучше (меньшее число или большее)
2. Сделать более отличающиеся цвета у single disk и у RAID 10
Особенно по последнему поддерживаю — как натуральный дальтоник каждый такой график для меня мучителен (насколько именно, отлично рассказано и показано здесь).
> На всех тестовых стендах использовалась файловая система ext4.
А что-то типа ZFS не пробовали?
Нет. Чаще всего используем или ext4, или xfs.

xfs используем, так как до недавнего времени в ней наиболее удобно поддерживался freeze (пока не появилась универсальная поддержка этого механизма в ядре).

И потом, zfs только недавно стала поддерживаться в Linux, а мы используем именно его.
Всё-таки
Основное преимущество ZFS — это её полный контроль над физическими и логическими носителями. Зная, как именно расположены данные на дисках, ZFS способна обеспечить высокую скорость доступа к ним, контроль их целостности, а также минимизацию фрагментации данных.

плюшка стоящая.
SSD можно использовать как кэш для классических HDD без дорогих аппаратных контроллеров. Программные решения:
— модуль ядра Flashcache от Facebook
— ZFS L2Arc, но тут уже без линукса
У btrfs есть возможность использовать отдельное блочное устройство для кэширования запросов? Сходу ненагуглил. Не подскажите где можно почитать?

В защиту Flashcache могу сказать что эта штука работает на уровне блочных устройств и использует Device Mapper. В работе выглядит как создание нового блочного устройства из основного и кэширующего, при этом данные на основном блочном устройстве при переходе на flashcache не теряются. В общем собирай блочные устройства как душе угодно.

P.S. Flashcache изначально писался для увеличения производительности InnoDB.
У btrfs есть возможность использовать отдельное блочное устройство для кэширования запросов? Сходу ненагуглил. Не подскажите где можно почитать?

я сам с ним на «вы», наверное только гуглить англоязычный интернет.

Почитал о Flashcache, интересная штука, не знал
Вот есть немного глупый вопрос. База огромной не будет.
Выгодно ли взять 2 SSD в RAID1?
Насколько такая система будет эффективна?
Выгодно. Хотя, RAID 1 для SSD это глупо, особенно одинаковых.
Умрут одновременно.

Проще на второй ssd раз в день делать полную реплику ( если потеря данных на несколько часов не критичны )
>RAID 1 для SSD это глупо, особенно одинаковых. Умрут одновременно.
Я бы сказал, что крайне, крайне спорное утверждение.

Кстати, хорошая новость заключается в том, что умершие SSD как правило, позволяют с себя читать, переставая при этом записывать.

Есть знание теории вероятности для первого и опыт коллег для второго.
не читал, но осуждаю :)
Вы, полагаю, можете похвастать своим опытом?
могу и не хвастаться. Но опыт есть.
Можно поднять второй инстанс MySQL и на второй SSD делать реплику в real-time. Потеря — не несколько часов, а — в худшем случае — несколько транзакций. ;)
С трудом могу себе представить оправдание для потери «нескольких транзакций». Разве можно подобным образом проектировать системы для бизнеса (да и вообще)?!
Вы правда не прочитали, что я предлагаю альтернативу нескольким часам простоя? При этом — даже несколько в шутку…
Только, есть высокая вероятность, что запилятся они одномоментно.
Тогда уже лучше RAID1
UFO just landed and posted this here
Думаю это не только битрикса проблема, а вообще любую оптимизацию проще начинать с оптимизации запросов и конфигурации таблиц, бд, etc. Это, обычно, дешевле и проще чем масштабировать железо, хотя в железо когда-нибудь всё-таки растущая система упрётся, тут-то эта статья и будет полезной.
Не-а, как раз дешевле и проще железо купить, чем проводить анализ, менять архитектуру, платить разработчикам и тд, вот только когда-то упремся в такую штуку как масштабируемость, вот тогда начинают понимать, что ошибка-то в ДНК
Ну наверное зависит от ситуации, ну и да, лучше предварительно посчитать что дешевле, а еще лучше заранее писать правильно:)
Как правило в таких проектах причиной медленной работы является не Битрикс, а качество интеграции проекта.
UFO just landed and posted this here
UFO just landed and posted this here
Если разработчик работает с API, понимает архитектуру (и тогда в общем случае и не думает лезть напрямую в БД), то у такого разработчика огромный функционал кэширования компонентов. С которым количество запросов можно свести к нулю.
UFO just landed and posted this here
Узким местом БД становится только при не правильном использование API и ошибок проектирования. С правильным подходом на Битрикс получаются производительные проекты.

Если вы используете Битрикс, это не значит, что вы не должны включать голову. Впрочем как и на других платформах.
UFO just landed and posted this here
Какой-то у Вас неудачный опыт.

На среднем сервере вполне себе получается под 100 запросов в секунду.

Подробно — здесь: www.1c-bitrix.ru/products/cms/performance/
> На запись — примерно та же картина, что и с одним диском.

Зачем так пишете? На графике же ясно видно, что любой RAID существенно уступает одному диску. Это в тесте не 16 Гб.

Еще непонятно, зачем в статье тест на 256 Мб и рассуждения о его неадекватности. Разве все это не очевидно?
> Разве все это не очевидно?

Нет, не очевидно.

Огромное количество тестов и выводов делается без учета этих факторов. Мы постарались показать, что получается на практике.
Когда я выбирал RAID для себя (bitrix, innoodb), то получилось, что RAID6 не уступал, а в некоторых тестах даже обгонял RAID10.
Я естественно ожидал обратной картины. Успокоился на том, что либо у меня руки кривые, либо кривой наш китайский дисковый массив.

Иногда лучше самому провести тест, чем полностью полагаться на аналитику.
А собственно, что удивительного? RAID5/6 на чтении действительно будет обгонять по iops´ам RAID10. С записью бедовее. Я ещё в начале прочтения удивился, почему взят raid10
В том то и дело, что запись на RAID6 почему-то была быстрее.
Видимо RAID10 криво реализовали. Дисковый массив ведь полуnoname.
А сколько дисков в страйп было на 10-ке, сколько дисков было на 6-ке? Вот смотреть что надо.
4 всего в 10-ке, или 2x4? В этом есть суть разница. 6-ка размазывает iopsы по всем дискам, а 10-ка только по N/2.
2x2 было в RAID10. Т.е. из-за этого маленькая производительность была?
Капитан очевидность подсказывает, что да. Проблема в рандомайзном конкурентном доступе к диску и ненулевому времени позиционирования головок. Соответственно, несколько дисков на которые размазаны данные дают очевидный прирост этих самых iops (операций ввода/вывода в секунду). Обсчёт там контрольных сумм и избыточность данных занимают времени намного меньше, чем множество позиционирований. Понятно, что по 4-ём дискам в raid6 или по двум в raid10 разница не ровно в два раза, но что-то около того.
Я правильно из графиков понял, что один диск всегда выигрывает? (что в принципе логично)
Некстати, заявление про innodb странно, данные-то по нему всё равно разбросаны дай боже. Да и не все хранят их в одном файле — я разбрасываю, например.
Я бы сконцентрировал внимание на настройки кэша тредов, размера временных таблиц в памяти, скорости дисков на /tmp (где создаются временные таблицы — собственно, бич всяких выборок). Как вариант — держать вот этот /tmp на SSD или вообще на RAM-диске.

P.S. Хотя я бы вздохнул и при ваших мощностях просто аккуратно переписал всё с 0.
там две серии тестов, в первой он выигрывает, во второй нет.
для больших проектов переписывание с 0 это практически 100% проигрыш. пример — netscape, которые во время переписывания профукали всю свою браузерную долю, до которой фокс до сих пор не добрался.
Не увидел там разницы. Везде наверху один диск.
Значит так переписывали.
16gb r и r/w рейд точно выигрывает, причем существенно. цвет у них только оч. схожий, легко перепутать.
сами только пару дней назад переехали на SSD. Пока размер базы позволяет.
У вас садисткие наклонности, раз заставляете ломать глаза и разбираться в оттенка синего цвета.
Так сложно было использовать на графиках просто РАЗНЫЕ цвета?
Sign up to leave a comment.