Что такое IOPS и почему они решают
IOPS — самый важный и самый недооценённый параметр диска. Именно в него упираются базы данных и нагруженные сайты, а не в красивые гигабайты в секунду. Разберём, что это, чем отличается от линейной скорости и как измерить.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →IOPS простыми словами
IOPS (Input/Output Operations Per Second) — число операций ввода-вывода в секунду, которые диск успевает обработать. Одна операция — это одно чтение или запись небольшого блока данных. Если МБ/с отвечает на вопрос «сколько данных за секунду», то IOPS — «сколько отдельных обращений к диску за секунду».
Разница принципиальна. Скопировать один фильм на 5 ГБ — это линейная нагрузка, тут важны МБ/с. А вот база данных, отвечая на запрос, делает сотни мелких случайных чтений в разных местах диска — тут важен именно IOPS. Реальный сервер почти всегда работает во втором режиме.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS с высоким IOPSПочему база данных упирается в IOPS
Представьте базу с миллионом строк. Пользователь запрашивает несколько записей по индексу. Диску приходится прыгать в разные физические места и читать много мелких блоков. Это классическая случайная нагрузка — здесь важно, сколько отдельных операций в секунду вытянет накопитель.
На HDD, который даёт ~150 случайных IOPS, база под нагрузкой встаёт в очередь: головке физически нужно доехать до каждого блока. На NVMe, где счёт идёт на сотни тысяч IOPS, те же запросы обслуживаются практически мгновенно. Поэтому перенос базы с HDD на NVMe часто ускоряет приложение в разы — без единой правки кода. В MAATRIX диски NVMe, и это убирает типичное узкое место баз.
Случайные и последовательные операции
IOPS всегда указывают с уточнением: случайные (random) или последовательные (sequential), чтение или запись, и с каким размером блока (обычно 4К для баз). Это не мелочь — цифры отличаются в разы.
- Последовательное чтение — данные лежат подряд, диск читает их потоком. Максимальные МБ/с.
- Случайное чтение 4К — обращения разбросаны по диску. Здесь виден настоящий потолок IOPS.
- Случайная запись — самая тяжёлая нагрузка, особенно для баз с частыми апдейтами.
Когда провайдер или производитель называет «миллион IOPS», уточняйте условия. Часто это идеальный последовательный сценарий, а реальная случайная нагрузка даёт цифру скромнее.
Как измерить IOPS на своём VPS
Точный инструмент — fio. Измерим именно случайное чтение блоками 4К, как работает база. Тест создаст временный файл, поэтому запускайте его в разделе с достаточным местом:
sudo apt update && sudo apt install -y fio
fio --name=iops-test --filename=./fiotest --size=1G \
--rw=randread --bs=4k --direct=1 --ioengine=libaio \
--iodepth=64 --numjobs=1 --runtime=30 --time_based
rm -f ./fiotest
В выводе ищите строку read: IOPS=... — это и есть число случайных операций в секунду. Для оценки записи поменяйте --rw=randread на --rw=randwrite. На NVMe вы увидите десятки и сотни тысяч, на HDD — сотни.
IOPS, латентность и глубина очереди
У IOPS есть спутник — латентность, задержка отдельной операции. Высокий IOPS при низкой задержке — идеал. Иногда диск выдаёт большой IOPS только при огромной глубине очереди (iodepth), но каждая операция при этом ждёт долго. Для интерактивных задач важна именно низкая задержка одиночной операции.
# та же fio, но смотрим latency в выводе
# строки clat/lat показывают задержку в микро/миллисекундах
fio --name=lat --filename=./ft --size=512M --rw=randread \
--bs=4k --direct=1 --ioengine=libaio --iodepth=1 \
--runtime=20 --time_based
rm -f ./ft
При iodepth=1 вы видите честную задержку одной операции. У NVMe она — десятки микросекунд, у HDD — миллисекунды, то есть в сотни раз выше.
Частые ошибки
- Смотреть только на МБ/с — реальный сервер живёт на случайных IOPS, а не на линейной скорости.
- Не уточнять условия теста — «миллион IOPS» без указания блока и режима ничего не значит.
- Держать базу на HDD — гарантированная очередь и тормоза под нагрузкой.
- Игнорировать латентность — высокий IOPS при большой задержке не спасёт интерактивную задачу.
Если приложение тормозит и вы видите высокий iowait в top — почти наверняка не хватает IOPS. Переезд на NVMe (как в MAATRIX) решает это радикальнее, чем добавление ядер.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS с высоким IOPSОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Чем IOPS отличается от МБ/с?
МБ/с — объём данных в секунду при линейной нагрузке. IOPS — число отдельных операций в секунду при случайной. Серверу важнее IOPS.
Сколько IOPS нужно базе данных?
Зависит от нагрузки, но HDD с его ~150 IOPS почти всегда мало. NVMe даёт десятки-сотни тысяч, чего хватает большинству баз с запасом.
Как измерить IOPS на VPS?
Используйте fio с параметрами --rw=randread --bs=4k --direct=1. Строка read: IOPS=... в выводе покажет число случайных операций в секунду.