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