Основное правило, которое я использую для дискового ввода-вывода:
75 IOP на шпиндель для SATA.
150 IOP на шпиндель для FC / SAS
1500 IOP на шпиндель для SSD.
Помимо количества операций ввода-вывода в секунду на массив, учитывается количество операций ввода-вывода в секунду на терабайт. При использовании SATA + RAID6 нередко получается очень плохое соотношение IOP на ТБ. Это может звучать не так уж и много, но вы часто сталкиваетесь с тем, что кто-то замечает «свободное место» в массиве, и хотите его использовать. Люди часто покупают концерты и игнорируют iops, когда в большинстве корпоративных систем действительно происходит обратное.
Затем добавьте стоимость штрафа за запись для RAID:
- 2 для RAID1, RAID1 + 0
- 4 для RAID5 (или 4)
- 6 для RAID6.
Штраф записи может быть частично смягчен хорошими большими кэшами записи и при правильных обстоятельствах. Если у вас много последовательных операций записи (например, журналы БД), вы можете значительно снизить эти штрафы на запись в RAID 5 и 6. Если вы можете написать полную полосу (например, один блок на шпиндель), вам не нужно читать, чтобы вычислить четность.
Предположим, 8 + 2 RAID 6 набор. При нормальной работе для однократной записи ввода / вывода вам необходимо:
- Прочитайте «обновленный» блок.
- Прочитать первый блок четности
- Читать второй блок четности
- Пересчитать паритет.
- напишите все 3. (6 IO).
При кэшированной записи с полной полосой - например, 8 последовательных «блоков» размером полосы RAID, вы можете рассчитать паритет по всей партии без необходимости чтения. Таким образом, вам нужно всего 10 записей - по одной на каждые данные и две четности.
Это заставляет вас писать штраф 1.2.
Вы также должны иметь в виду, что запись IO легко кэшируется - вам не нужно сразу записывать ее на диск. Он работает в мягких временных рамках - если ваши входящие записи в среднем не превышают скорость шпинделя, все они будут работать с «скоростью кеша».
Чтение ввода-вывода, с другой стороны, ограничено по времени - вы не можете завершить чтение, пока не будут получены данные. К этому моменту становятся важными алгоритмы кэширования чтения и загрузки кэша - предсказуемые шаблоны чтения (например, последовательное, как вы получите из резервной копии) могут быть предсказаны и предварительно выбраны, а случайные шаблоны чтения - нет.
Для баз данных я бы вообще предложил вам предположить, что:
большая часть ваших операций ввода-вывода базы данных считывается случайным образом. (например, плохо для произвольного доступа). Если вы можете позволить себе накладные расходы, RAID1 + 0 хорош - потому что зеркальные диски дают два источника чтения.
большая часть вашего 'log' IO - это последовательная запись. (например, это хорошо для кэширования и вопреки тому, что предлагают многие администраторы баз данных, вы, вероятно, захотите использовать RAID50, а не RAID10).
Соотношение двух сложно сказать сложно. Зависит от того, что делает БД.
Поскольку случайный ввод-вывод является наихудшим случаем для кеширования, именно здесь SSD действительно вступает в свои права - многие производители не беспокоятся о кешировании SSD, потому что в любом случае скорость его работы примерно одинакова. Так что особенно для таких вещей, как временные базы данных и индексы, SSD дает хорошую отдачу от инвестиций.