NVMe выдаёт 600 000 записей в секунду, а база коммитит 180

badcasedaily1 29 минут назад NVMe выдаёт 600 000 записей в секунду, а база коммитит 180 Средний 11 мин 1.2K Блог компании OTUS Серверное администрирование * Программирование * PostgreSQL * Linux * Аналитика Привет,...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
Вот важная новость с фронта ИИ: badcasedaily1 29 минут назад NVMe выдаёт 600 000 записей в секунду, а база коммитит 180 Средний 11 мин 1. 2K Блог компании OTUS Серверное администрирование * Программирование * PostgreSQL * Linux * Аналитика Привет, Хабр! Заказали под базу быстрый NVMe, прогнали fio, получили шестизначные цифры IOPS, показали их всем и успокоились.
Поставили базу, запустили нагрузку — она коммитит 180 транзакций в секунду и упирается в диск. Диск при этом не врёт и fio тоже: и правда шестьсот тысяч операций в секунду, если писать так, как его гоняли в тесте. Просто база пишет иначе, она после каждой записи требует подтверждения, что данные переживут отключение питания, и вот эта операция стоит на четыре порядка дороже самой записи.
Технические детали
Разберём, куда именно уходит время между вызовом write и моментом, когда данные действительно лежат на энергонезависимой памяти, почему потребительский SSD на этом проваливается, а серверный нет, и что можно сделать, не отказываясь от долговечности. Путь записи, который заканчивается не там, где кажетсяКогда приложение вызывает write, данные копируются в страничный кеш ядра, страница помечается грязной, и вызов возвращает управление. На диске в этот момент нет ничего.
Ядро сбросит эту страницу когда‑нибудь потом — по таймеру, при нехватке памяти, при явной просьбе. Просьба и есть fsync. Он запускает цепочку, в которой интересна не первая часть, а последняя: ядро выталкивает грязные страницы на устройство, дожидается подтверждения от контроллера, и — вот ключевой шаг, отправляет устройству команду сброса кеша.
Контроллер SSD держит принятые данные в собственной энергозависимой памяти, и до этой команды они на флеш‑память не попадали. Запись в NAND медленная сама по себе, порядка сотни микросекунд на страницу, и именно её вы ждёте. Сравните два числа из одного и того же прогона на локальном NVMe:pg_test_fsync Non-sync'ed 8kB writes: write 651627.
Отраслевые последствия
688 ops/sec 2 usecs/op Compare file sync methods using one 8kB write: open_datasync 184. 788 ops/sec 5412 usecs/op fdatasync 190. 052 ops/sec 5262 usecs/op fsync 180.
052 ops/sec 5554 usecs/opДве микросекунды против пяти с половиной тысяч. Разница в две с половиной тысячи раз — и это на одном и том же устройстве, одним и тем же размером блока. Утилита идёт в комплекте с PostgreSQL, но пользоваться ей можно независимо от того, какая у вас база: она меряет само устройство.
Почему потребительский SSD на этом проваливаетсяСерверный SSD несёт на плате конденсаторы. Контроллер, приняв данные в свой кеш, может честно ответить «записано», потому что при внезапном отключении питания запаса энергии хватит дописать содержимое кеша в NAND.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.






