PG_EXPECTO: Оптимизация подсистемы IO. Эксперимент-7: Оптимизация параметров файловой системы
Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).
Эксперимент-7: Оптимизация параметров файловой системы.
Монтирование с опциями noatime,nodiratime
Noatime и nodiratime — параметры монтирования файловых систем в Linux, которые позволяют отключить обновление информации о времени доступа к файлам и каталогам.
Noatime полностью отключает запись времени доступа к файлу. Эта опция подходит, если приложения не зависят от atime. Noatime может быть полезен в разделах с интенсивным чтением, где не важна совместимость с ПО, полагающимся на atime. Например, в каталогах статического контента, кэшах, медиабиблиотеках, снапшотах сборок.
Nodiratime отключает обновление времени доступа только для каталогов. Для остальных файлов время atime будет обновляться всегда. Отдельный nodiratime актуален только при желании тонко выключить обновление atime для каталогов, оставив его для файлов (редкий случай).
Настройка файловой системы /data - изменение параметров mount
1. Проверка текущих опций монтирования
# Текущее состояние
mount | grep/data
2. Определение UUID устройства (рекомендуется использовать UUID вместо пути устройства)
# Получить UUID устройства
blkid /dev/mapper/vg_data-LG_data
3. Резервное копирование текущего fstab
cp /etc/fstab /etc/fstab.backup_$(date +%Y%m%d)
4. Редактирование /etc/fstab
vi /etc/fstab
добавить
# /data
/dev/mapper/vg_data-LG_data /data ext4 defaults,noatime,nodiratime 0 0
5. Перемонтирование файловой системы
mount -o remount /data
6. Проверка применённых опций
# Проверить текущие опции монтирования
mount | grep/data
Важные замечания:
1. noatime vs relatime:
o noatime — полностью отключает обновление atime
o relatime (по умолчанию) — обновляет atime, только если mtime/ctime новее
o nodiratime — отключает atime только для директорий
2. Эффект от изменений:
o Уменьшение нагрузки на диск (меньше операций записи)
o Повышение производительности для workloads с частым чтением
o Некоторые приложения (например, backup-утилиты, использующие atime) могут работать некорректно
Итоговый отчет по анализу производительности подсистемы IO
1. Общая характеристика системы
Период анализа: 06.01.2026 14:42 – 16:31 (около 2 часов)
Основные устройства хранения:
vdd (100 ГБ, монтирован в /data):
Используется под нагрузку чтения и записи
Наблюдается 100% утилизация (%util = 100)
Высокие показатели w_await (до 13 мс)
vdc (50 ГБ, монтирован в /wal):
Преимущественно запись
Утилизация 53–63%
Низкое время отклика на запись (~1 мс)
Другие диски: vda (система), vdb (лог)Тип нагрузки: OLAP-сценарий с преобладанием операций чтения над записью (соотношение ~3.36:1). Нагрузка не ограничена пропускной способностью дисков.
2. Критические проблемы производительности
100% утилизация диска vdd в течение всего периода наблюдения.
Высокое время отклика на запись (w_await) на vdd:
94.55% наблюдений превышают 5 мс
Максимум до 13 мсБольшая длина очереди (aqu_sz) на vdd:
Всегда > 1, достигает 31
Указывает на перегруженность дискаВысокий cpu_wa (I/O wait):
100% наблюдений > 10%
Процессы в состоянии uninterruptible sleep превышают количество ядер CPU в 25–50% случаевНеэффективное использование кэша:
Высокая корреляция между cache и w/s на vdc (0.587)
Слабая корреляция буферной памяти с операциями чтения/записи
3. Анализ корреляций и паттернов нагрузки
Отрицательная корреляция wa и util на vdd (-0.3019) — свидетельствует о том, что высокий wa не всегда связан с загрузкой диска.
Высокая корреляция операционной скорости с чтением блоков (0.7134) — производительность напрямую зависит от операций чтения с диска.
Низкая/отрицательная корреляция скорости с IOPS и пропускной способностью — указывает, что узкое место не в подсистеме IO.
Преобладание операций чтения (соотношение read/write = 3.36) — характерно для аналитических нагрузок.
4. Диагностика узких мест IO
Вывод по диагностике:
Основная проблема — высокое время отклика на запись на диске vdd и перегруженность очереди запросов. При этом общая производительность системы не ограничена пропускной способностью или IOPS, что указывает на иные узкие места: вероятно, недостаток RAM, неэффективные запросы или блокировки на уровне СУБД.
5. Рекомендации по оптимизации
Оптимизация диска vdd:
Рассмотреть переход на более быстрые диски (SSD/NVMe)
Разделить нагрузку: выделить отдельный диск для журналов транзакцийОптимизация памяти:
Увеличить размер буферного кэша СУБД
Настроить shared_buffers и effective_cache_size в PostgreSQLОптимизация запросов:
Провести анализ медленных запросов
Добавить/оптимизировать индексы для уменьшения seq scan
Использовать partitioning для больших таблицНастройка мониторинга:
Включить детальный мониторинг процессов в состоянии D (uninterruptible sleep)
Настроить оповещения при %util > 90% и w_await > 5 мсБалансировка нагрузки:
Рассмотреть использование реплик для чтения
Возможно, увеличить количество ядер CPU для параллельной обработки запросов
6. Итоговый вывод по производительности IO
Подсистема IO находится в критическом состоянии по следующим причинам:
Диск vdd постоянно перегружен (100% утилизация)
Высокое время отклика на запись (до 13 мс)
Длинная очередь запросов (до 31)
Высокий I/O wait процессора (до 47%)
Однако основное узкое место — не в пропускной способности дисков, а в:
Неэффективном использовании памяти (слабая кэшируемость данных)
Большом количестве операций чтения с диска из-за неоптимальных запросов
Высокой загрузке CPU в состоянии ожидания IO
Рекомендуется:
Сначала провести оптимизацию на уровне СУБД и приложения (индексы, запросы, кэширование), а затем рассмотреть апгрейд дисковой подсистемы для диска vdd.
Сравнительные результаты: Эксперимент-5: Настройки кэширования и буферизации и Эксперимент-7: Оптимизация параметров файловой системы.
Операционная скорость
Сравнительный график изменения операционной скорости в ходе нагрузочного тестирования для Эксперимента-5(SPEED-5) и Эксперимента-7(SPEED-7)
Среднее увеличение операционной скорости в ходе Эсперимента-7 по сравнению с Экпериментом-5 составило 7.47%.
Ожидания СУБД
Сравнительный график изменения ожидания СУБД в ходе нагрузочного тестирования для Эксперимента-5(WAITINGS-5) и Эксперимента-7(WAITINGS-7)
IOPS
Сравнительный график изменения количества IOPS в ходе нагрузочного тестирования для Эксперимента-5(IOPS-5) и Эксперимента-7(IOPS-7)
Пропускная способность (MB/s)
Сравнительный график изменения MB/s в ходе нагрузочного тестирования для Эксперимента-5(MB/s-5) и Эксперимента-7(MB/s-7)
Длина очереди (aqu_sz)
Сравнительный график изменения длины очереди в ходе нагрузочного тестирования для Эксперимента-5(aqu_sz-5) и Эксперимента-7(aqu_sz-7)
Ожидание по чтению
Сравнительный график изменения r_await(ms) в ходе нагрузочного тестирования для Эксперимента-5(r_await(ms)-5) и Эксперимента-7(r_await(ms)-7)
Ожидание по записи
Сравнительный график изменения w_await(ms) в ходе нагрузочного тестирования для Эксперимента-5(w_await(ms)-5) и Эксперимента-7(w_await(ms)-7)
Сравнительный анализ производительности подсистемы IO: Эксперимент-5(Настройки кэширования и буферизации) и Эксперимент-7(Оптимизация параметров файловой системы).
1. Сравнение критических проблем производительности
Общая проблема в обоих экспериментах: Производительность не ограничена подсистемой IO.
Основные узкие места: CPU, блокировки, параметры параллелизма, ожидания СУБД.
Статус аварийного оповещения: В обоих случаях зафиксирована отрицательная корреляция между операционной скоростью и IOPS/MB/s, что указывает на влияние не-IO факторов на производительность.
2. Сравнительный анализ корреляций и паттернов нагрузки
Вывод:
Оба эксперимента демонстрируют сходный паттерн нагрузки — низкая корреляция с метриками IO, что подтверждает, что производительность определяется не дисковыми операциями, а другими компонентами системы (CPU, блокировки, память).
3. Диагностика метрик IO
3.1. r_await (среднее время чтения, мс)
Эксперимент-5: стабильно ~2–4 мс.
Эксперимент-7: стабильно ~2–5 мс.
Изменение: Незначительный рост в эксперименте-7, но в пределах нормы.
3.2. w_await (среднее время записи, мс)
Эксперимент-5: 3–12 мс, плавный рост.
Эксперимент-7: 5–13 мс, более выраженный рост к концу теста.
Изменение: Увеличение задержек записи в эксперименте-7, что может указывать на влияние оптимизаций ФС на операции записи.
3.3. aqu_sz (средняя длина очереди)
Эксперимент-5: 8–29.
Эксперимент-7: 13–31.
Изменение: Увеличение длины очереди в эксперименте-7, что согласуется с ростом w_await.
3.4. proc_b (количество процессов в состоянии блокировки)
Эксперимент-5: 5–13.
Эксперимент-7: 4–13.
Изменение: Незначительные колебания, без явной тенденции.
3.5. cpu_wa (%) (время ожидания CPU)
Эксперимент-5: 42–47%.
Эксперимент-7: 39–47%.
Изменение: Снижение cpu_wa в эксперименте-7, что может указывать на улучшение использования CPU после оптимизации ФС.
3.6. Корреляция speed – IOPS
Отрицательная в обоих случаях, сильнее в эксперименте-7. Это подтверждает, что рост IOPS не ведёт к росту производительности, проблема в других подсистемах.
3.7. Корреляция speed – пропускная способность
Отрицательная, слабее, чем с IOPS. Пропускная способность диска не является ограничивающим фактором.
3.8. Другие показатели производительности IO
IOPS: в эксперименте-7 немного выше (до 4346 vs 4293 в эксперименте-5).
MB/s: стабильно ~39–43 MB/s в обоих экспериментах.
Utilization: 100% в обоих случаях, что говорит о полной загрузке устройства.
3.9. Вывод по диагностике узких мест IO
Эксперимент-5: Стабильные показатели IO, узкое место — CPU/блокировки.
Эксперимент-7: Ухудшение w_await и aqu_sz, но улучшение cpu_wa. Оптимизация ФС привела к увеличению задержек записи, но снизила нагрузку на CPU.
4. Итоговый вывод по сравнению производительности IO в ходе экспериментов
Оба эксперимента подтверждают, что узкое место — не в подсистеме IO, а в CPU, блокировках или настройках СУБД.
Эксперимент-7 (оптимизация ФС) показал:
Увеличение задержек записи (w_await) и длины очереди (aqu_sz).
Снижение времени ожидания CPU (cpu_wa).
Более сильную отрицательную корреляцию speed-IOPS, что указывает на ещё меньшую зависимость производительности от IO.
Эксперимент-5 (настройки кэширования) демонстрирует более стабильные задержки IO, но более высокую нагрузку на CPU.
Рекомендация:
Продолжить оптимизацию CPU, параллелизма и настройки СУБД.
Для экспериментов с ФС рекомендуется дополнительная настройка параметров записи для снижения w_await.
Мониторинг блокировок и contention в СУБД.
Заключение:
Оба эксперимента успешно идентифицировали, что производительность упирается не в IO, а в другие компоненты системы. Оптимизация файловой системы (Эксперимент-7) частично улучшила использование CPU, но ухудшила задержки записи. Это указывает на необходимость комплексной настройки системы, учитывающей как параметры ФС, так и настройки СУБД и CPU.




















































