Сколько стоит прочитать одну страницу в 8 КБ из Postgres — трассировка по всем слоям кэшей
Свежий разбор, который хочется выдать каждому, кто проектирует базы «на глазок». Автор словил в продакшене инцидент с IOPS, воспроизвёл ту же патологию на домашнем сервере и померил, во сколько обходится чтение одной и той же страницы на каждом уровне: shared buffers, page cache операционки, локальный NVMe и сетевой диск AWS EBS.
Числа красивые своей наглядностью, каждый слой стоит примерно на порядок дороже предыдущего:
🔘страница в shared buffers — около 1,1 мкс;
🔘в page cache ОС — около 4 мкс;
🔘холодное чтение с локального NVMe — около 78 мкс;
🔘сетевой EBS в продакшене — около 497 мкс, в 124 раза дороже page cache.
Самая поучительная деталь — про порядок чтения. Те же 500 холодных страниц в отсортированном порядке (bitmap heap scan) читаются за 2,8 мс, а в случайном (index scan) — за 39,5 мс. Разница в 14 раз на ровно тех же данных, всю работу делает readahead ядра.
Сохранять бэкендерам и всем, кто хоть раз удивлялся, почему запрос на ноутбуке летает, а в облаке встаёт колом.
Полная статья: https://frn.sh/8kb-read/
@prog_stuff
Post #2845
682
- ❤ 2
- 👍 1
- 🔥 1