Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Поднимайтесь как можно выше по дереву, собирайте цветы и дарите их близким.
Вас ждут уникальные награды и 22 выгодных промокода!

Пикаджамп

Аркады, Казуальные, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
2
kznalp
kznalp
1 месяц назад
Серия ITшное

Иногда, нейросеть выдаёт вполне себе здравый, хотя и бесполезный текст⁠⁠

Иногда, нейросеть выдаёт вполне себе здравый, хотя и бесполезный  текст Субд, Postgresql, Контент нейросетей, Нейронные сети

▌ Возможности применения рекомендаций нейронных сетей для повышения производительности СУБД PostgreSQL

В последние годы широкое распространение получили методы машинного обучения, применяемые для решения задач анализа данных и автоматизации процессов принятия решений. В частности, одним из перспективных направлений является использование нейронных сетей (НС) для автоматического поиска оптимальных настроек параметров баз данных с целью улучшения их производительности.

СУБД PostgreSQL обладает большим количеством настраиваемых параметров, от правильного выбора которых зависит эффективность работы системы. Традиционные подходы предполагают проведение экспериментов или применение эмпирических правил («best practices»), что требует значительных временных затрат и высокой квалификации специалистов.

Нейронные сети позволяют автоматически выявлять взаимосвязи между параметрами базы данных и показателями ее производительности. Для этого необходимо собрать достаточный объем обучающих данных, включающий различные комбинации значений параметров и соответствующие им показатели времени выполнения запросов, загрузки процессора, объема потребляемой памяти и т.д.

После обучения НС способна генерировать рекомендации по настройке параметров PostgreSQL, минимизируя при этом время отклика и максимизируя пропускную способность системы. Однако следует учитывать ряд ограничений данного подхода:

- зависимость результатов от качества исходных данных;
- сложность интерпретации полученных рекомендаций;
- необходимость регулярного обновления модели вследствие изменения структуры и нагрузки на базу данных.

Таким образом, хотя нейронные сети представляют собой мощный инструмент для оптимизации производительности PostgreSQL, они не могут полностью заменить опыт экспертов и требуют осторожного использования совместно с традиционными методами настройки баз данных.


-------
💫 Создано с помощью GigaChat

Показать полностью 1
Субд Postgresql Контент нейросетей Нейронные сети
2
0
kznalp
kznalp
1 месяц назад
Серия ITшное

Нейросети про ORM⁠⁠

Нейросети про ORM Контент нейросетей, Субд, Orm, Разработка, Длиннопост

Разработчик удивляется - почему СУБД тормозит при выполнении запросов , написанных ORM ?
-------
💫 Создано с помощью GigaChat


DeepSeek размышляет про ORM

Проблемы SQL-запросов, генерируемых ORM (Object-Relational Mapping), возникают из-за компромисса между удобством разработки и эффективностью работы с базой данных. Вот ключевые проблемы:
1. Проблема N+1 (Избыточные запросы)
- Суть: ORM лениво загружает связанные данные, вызывая множество мелких запросов вместо одного JOIN.
- Пример:
Загрузка 100 пользователей и их заказов:
SELECT * FROM users; -- 1 запрос
SELECT * FROM orders WHERE user_id = 1; -- запрос для каждого пользователя (100 запросов)

2. Неоптимальные JOIN-операции
- ORM может генерировать избыточные `JOIN` или `LEFT JOIN` даже для простых запросов, что замедляет выполнение.
- Риск: "Взрыв" количества строк при соединении таблиц (например, `JOIN` 3 таблицы по 1000 строк → 1 млрд промежуточных строк).

3. Избыточная выборка данных (Over-fetching)
- ORM загружает все поля объекта, даже если нужны 1-2 поля:
SELECT id, name, email, ... -- 20+ полей
FROM users;
- Последствие: Лишняя нагрузка на сеть и СУБД.

4. Сложности с оптимизацией
- ORM абстрагирует SQL, лишая разработчика контроля:
- Невозможно точно указать порядок JOIN.
- Трудно использовать расширенные функции СУБД (например, оконные функции, CTE).
- Ограниченная поддержка сложных условий (`FILTER`, `DISTINCT ON` в PostgreSQL).

5. Генерация монструозных запросов
- Сложные операции (например, агрегация с фильтрацией) могут порождать "мусорный" SQL:
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY id)
FROM users
WHERE ...
GROUP BY ...
) AS subquery WHERE ... LIMIT 10;

- Такие запросы сложно отлаживать и оптимизировать.

6. Проблемы с производительностью
- ORM не учитывает:
- Индексы: Может не использовать подходящие индексы.
- Кэширование запросов: Динамически генерируемый SQL сложно кэшировать.
- Пакетная вставка: Вместо `INSERT INTO ... VALUES (...), (...)` ORM может создать N одиночных запросов.

7. Импеданс-несоответствие (Object-Relational Impedance Mismatch)
- ORM пытается "натянуть" объектную модель на реляционную БД, что приводит к:
- Некорректной работе с наследованием (стратегии `single_table`, `joined`).
- Проблемам с транзакциями и блокировками.

8. Сложность отладки
- Сгенерированный SQL часто нечитаем (много подзапросов, алиасов).
- Логи ORM "засоряют" консоль, но не дают понимания реальной производительности.
---
Когда избегать ORM?
- Высоконагруженные системы (например, финансовые транзакции).
- Сложные аналитические запросы.
- Системы, где критична предсказуемость выполнения запросов.


Нейросети про ORM Контент нейросетей, Субд, Orm, Разработка, Длиннопост

Монструозный SQL запрос , сгенерированный ORM.
-------
💫 Создано с помощью GigaChat


YandexGPT размышляет по ORM

Хорошо, мне нужно разобраться с проблемами SQL-запросов, написанных с помощью ORM. Начну с анализа основных аспектов: производительность, сложность запросов, гибкость, оптимизация и безопасность.

Сначала рассмотрю производительность. ORM часто генерируют избыточные запросы или неоптимальные SQL-конструкции, что может привести к снижению производительности. Нужно упомянуть примеры, такие как N+1 проблема.

Далее проанализирую сложность запросов. ORM могут ограничивать возможность написания сложных запросов, требующих специфических SQL-фич, таких как оконные функции или сложные JOIN.

Затем рассмотрю гибкость. ORM абстрагируют работу с базой данных, что может ограничивать возможность тонкой настройки запросов под конкретные задачи.

Оптимизация также важна. ORM могут затруднять оптимизацию запросов, особенно в сложных сценариях, где требуется ручная настройка индексов или других аспектов.

Безопасность — ещё один аспект. Хотя современные ORM обеспечивают защиту от SQL-инъекций, неправильное использование ORM всё ещё может привести к уязвимостям.

Наконец, рассмотрю особенности конкретных ORM, таких как Django ORM и SQLAlchemy, чтобы показать различия в подходах к генерации запросов.


ORM (Object-Relational Mapping) упрощает работу с базами данных, но имеет ряд проблем, связанных с SQL-запросами.

Основные проблемы

Производительность:

ORM могут генерировать избыточные или неоптимальные SQL-запросы, что приводит к снижению производительности. Например, ORM часто используют паттерн N+1, когда для получения связанных данных выполняется множество дополнительных запросов вместо одного эффективного JOIN.

Пример: в Django ORM для получения списка пользователей с их профилями может потребоваться 1 запрос на пользователя, если не использовать select_related.

Сложность запросов:

Некоторые сложные запросы, требующие специфичных SQL-конструкций (например, оконные функции, сложные JOIN или CTE), могут быть трудно или невозможно выразить через ORM. Это ограничивает гибкость при работе с данными.

Гибкость:

ORM абстрагируют работу с базой данных, что может ограничивать возможность тонкой настройки запросов под конкретные задачи. Например, оптимизация запросов для конкретных СУБД (PostgreSQL, MySQL) может быть затруднена.

Оптимизация:

Оптимизация запросов, сгенерированных ORM, может быть сложной из-за отсутствия прямого контроля над SQL. Разработчикам приходится полагаться на встроенные механизмы оптимизации ORM, которые не всегда эффективны.

Безопасность:

Хотя современные ORM обеспечивают защиту от SQL-инъекций за счёт параметризованных запросов, неправильное использование ORM всё ещё может привести к уязвимостям. Например, динамическое построение запросов через конкатенацию строк может обойти встроенные механизмы безопасности.

Интересные факты

N+1 проблема: одна из самых распространённых проблем ORM. Например, в приложении на Django, отображающем список постов с авторами, без использования prefetch_related будет выполнен 1 запрос для списка постов и N запросов для получения авторов каждого поста.

ORM vs Raw SQL: по данным исследований, запросы, написанные вручную, могут быть на 30-50% эффективнее, чем сгенерированные ORM, особенно для сложных аналитических задач.


Нейросети про ORM Контент нейросетей, Субд, Orm, Разработка, Длиннопост

YandexGPT размышляет о проблемах SQL запросов, написанных ORM
-------
💫 Создано с помощью GigaChat


Показать полностью 2
Контент нейросетей Субд Orm Разработка Длиннопост
1
4
kznalp
kznalp
1 месяц назад
Postgres DBA
Серия СУБД PostgreSQL

Влияние агрессивного autovacuum на производительность СУБД для малой и большой СУБД⁠⁠

Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).

Влияние агрессивного autovacuum на производительность СУБД для малой и большой СУБД Инженер, Субд, Postgresql, Настройка, Тестирование, Длиннопост

Общие принципы работы одинаковы, но размер имеет значение.

Задача

Проанализировать влияние размера и ресурсов СУБД на изменение производительности СУБД при агрессивной настройке autovacuum.

Малая СУБД

CPU = 2

RAM = 2GB

Размер тестовой БД = 10GB

Тестовая таблица ~60 000 000 строк

Влияние настройки autovacuum на производительность СУБД

Операционная скорость

Влияние агрессивного autovacuum на производительность СУБД для малой и большой СУБД Инженер, Субд, Postgresql, Настройка, Тестирование, Длиннопост

Ось X - точка наблюдения .Ось Y - операционная скорость

Операционная скорость за весь период теста

  • Средняя относительная разница операционной скорости в экспериментах 1 и 2 составила : -3%

Операционная скорость при малой нагрузке ( до 10 соединений)

  • Средняя относительная разница операционной скорости в экспериментах 1 и 2 составила : 4%

Операционная скорость при высокой нагрузке ( свыше 10 соединений)

  • Средняя относительная разница операционной скорости в экспериментах 1 и 2 составила : -6%

Большая СУБД

CPU = 200

RAM = 1TB

Размер тестовой БД = 10TB

Тестовая таблица ~70 000 000 000 строк

Влияние агрессивного автовакуума на производительность большой СУБД

Влияние агрессивного autovacuum на производительность СУБД для малой и большой СУБД Инженер, Субд, Postgresql, Настройка, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - операционная скорость

  • Средний прирост производительности в эксперименте-7 по сравнению с экспериментом-1 составил 13.30%

  • Максимальный прирост производительности в эксперименте-7 по сравнению с экспериментом-1 составил 35.83%

Вывод

Для обеспечения эффективного обслуживания и повышения производительности СУБД необходимо запланировать ресурсы - в частности на выполнение регулярных операций autovacuum.

Показать полностью 2
[моё] Инженер Субд Postgresql Настройка Тестирование Длиннопост
2
1
kznalp
kznalp
1 месяц назад
Серия ITшное

Всегда приятно ткнуть носом в факты огромную нейросеть с вселенским бюджетом и ресурсами⁠⁠

Всегда приятно ткнуть носом в факты огромную нейросеть с вселенским бюджетом и ресурсами Субд, Postgresql, Настройка, Оптимизация, Нейронные сети, DeepSeek, Длиннопост

Может быть когда ни будь в будущем, нейросети и смогут реально помогать в экспериментах , пока лучше не доверять их ответам.

К вопросу о том, что нейросеть в обозримом будущем не может заменить инженера , обладающего данными экспериментов .

У нейросети просто нет экспериментальных данных, но проблема не в этом. Глобальная проблема нейросетей — выдача ответа в условиях недостатка данных.

Сказано уже 100500 раз — ВСЕ ОТВЕТЫ НЕЙРОСЕТИ НУЖНО ПРОВЕРЯТЬ ЭКСПЕРЕМЕНТАЛЬНО, НИКАКОЙ ИНФОРМИИ НЕЙРОСЕТЕЙ ДОВЕРЯТЬ НЕЛЬЗЯ .

Статистически обработать огромные массивы информации — да, тут нейросеть поможет. Но, сделать исследования нового — тут нейросеть принципиально бессильна, у нее просто нет данных. А результат она выдает.

Вводные данные

Оценить влияние кардинального снижения параметра хранения таблиц fillfactor c базового значения 100 до 50, при агрессивной настройке autovacuum.

Допустим какой-то продвинутый DBA ,

Всегда приятно ткнуть носом в факты огромную нейросеть с вселенским бюджетом и ресурсами Субд, Postgresql, Настройка, Оптимизация, Нейронные сети, DeepSeek, Длиннопост

следующий в русле новых тенденций решил не тратить время и задал вопрос нейросети DeepSeek:

Как повлияет уменьшение параметра fillfactor c 100 до 50 для таблицы с количеством строк примерно 60000000 на количество и время работы autovacuum для СУБД PostgreSQL c ресурсами CPU=2 , RAM=2GB при интенсивных операциях SELECT + UPDATE примерно в среднем 1000 транзакций в секунду, при нагрузке от 5 до 48 одновременных сессиях, при агрессивных настройках autovacuum для тестовой таблицы : autovacuum_vacuum_scale_factor=0 и autovacuum_vacuum_threshold=1000 ?

Ответ нейросети DeepSeek

Уменьшение параметра fillfactor с 100 до 50 для таблицы с 60 млн строк в PostgreSQL при указанных условиях существенно повлияет на работу autovacuum, преимущественно негативно. Вот анализ последствий:

1. Увеличение размера таблицы и фрагментации

  • Физический рост таблицы:
    При fillfactor=50 каждая страница таблицы заполняется только на 50%, что удваивает её физический размер (с ~60 млн строк до эффективных ~120 млн страниц). Это увеличит I/O-нагрузку и объём данных для обработки autovacuum.

  • Рост индексов:
    Индексы также увеличатся, так как новые версии строк (от UPDATE) будут чаще размещаться в новых страницах (из-за нехватки места в исходных), что дополнительно нагрузит autovacuum.

2. Частота запуска autovacuum

  • Агрессивные настройки:
    autovacuum_vacuum_threshold=1000 и autovacuum_vacuum_scale_factor=0 означают, что autovacuum запускается после каждых 1000 изменений (UPDATE/DELETE).

  • Интенсивность UPDATE:
    При 1000 транзакций/сек (часть из которых — UPDATE) порог в 1000 изменений будет достигаться каждую секунду. Это приведёт к почти непрерывной работе autovacuum.

3. Время работы autovacuum

  • Увеличение длительности циклов:
    Autovacuum должен сканировать вдвое больше страниц (из-за fillfactor=50), что резко увеличит время каждого запуска. Например:
    При fillfactor=100: сканирование 1 млн страниц.
    При fillfactor=50: сканирование ~2 млн страниц.

  • Ресурсные ограничения:
    Слабые ресурсы (2 CPU, 2 GB RAM) не позволят autovacuum справляться с возросшим объёмом. Нехватка памяти вызовет активное использование диска (I/O), замедляя процесс.

4. Проблемы из-за нехватки ресурсов

  • Конкуренция за I/O:
    Autovacuum будет постоянно читать/писать данные на диск, конкурируя с пользовательскими запросами (SELECT/UPDATE). Это увеличит задержку транзакций.

  • Нехватка памяти:
    Буферный кэш (shared_buffers) ограничен ~512 MB (25% от 2 GB RAM). Таблица размером > 2x не поместится в кэш, что вызовет чтение с диска и замедлит все операции.

  • Риск блокировок:
    Длительные циклы autovacuum могут конфликтовать с пользовательскими транзакциями, особенно при 48 одновременных сессиях.

5. HOT-обновления: частичное смягчение

  • Преимущество fillfactor=50:
    Свободное место в страницах может повысить долю HOT-обновлений (когда новые версии строк помещаются в ту же страницу). Это уменьшит фрагментацию и нагрузку на индексы.

  • Ограниченная польза:
    На фоне удвоенного объёма таблицы и слабых ресурсов этот эффект не компенсирует общее снижение производительности.

6. Риск накопления dead tuples

  • Autovacuum может не успевать:
    При такой частоте UPDATE и нехватке ресурсов autovacuum будет отставать от нагрузки. Это вызовет:
    Рост dead tuples.
    Увеличение I/O (из-за чтения "мертвых" строк).
    Замедление SELECT (из-за необходимости фильтрации мёртвых версий).
    Блот (bloat) таблицы и индексов.

Рекомендации

  1. Не снижать fillfactor до 50 на такой конфигурации. Оптимально: fillfactor=80–90 (если требуются HOT-обновления).

  2. Увеличить порог autovacuum:
    Например, autovacuum_vacuum_threshold = 10000 (вместо 1000), чтобы сократить частоту запусков.

Вывод: Уменьшение fillfactor до 50 на маломощном сервере с агрессивным autovacuum вызовет хроническую нехватку ресурсов, рост времени вакуумирования и общее снижение производительности. Без увеличения RAM/CPU это изменение не рекомендуется.


«Вот оно как» — подумает продвинутый DBA , следующий в русле новых тенденций и не будет менять параметр fillfactor.


Другой инженер, якудза старой школы

Всегда приятно ткнуть носом в факты огромную нейросеть с вселенским бюджетом и ресурсами Субд, Postgresql, Настройка, Оптимизация, Нейронные сети, DeepSeek, Длиннопост

не верит бездушным алгоритмам и решает проверить всё лично.

И приходит к очень интересным, и прямо противоположным результатам.


Итоги

Для данной СУБД и данного сценария нагрузки , уменьшение параметра хранения таблиц на 50% c 100 до 50 , повысило эффективность работы autovacuum:

  • Количество запусков autovacuum увеличилось на 261% c 193 до 697

  • Максимальное время работы autovacuum уменьшилось на 29% с 936 сек. до 663 сек.

  • Среднее время работы autovacuum уменьшилось на 73% с 46 сек. до 12 сек.

  • Предельная нагрузка на autovacuum увеличивалась на 50% с 8 до 12 соединений.

Влияние уменьшения fillfactor на работу autovacuum


Мораль

Молодой DBA, следующий в русле новых тенденций и доверяющий математическим алгоритмам статистической обработки текстов —  потерял шанс сильно улучшить работу одного из ключевых механизмов СУБД PostgreSQL — autovacuum.

Старый, тертый жизнью и не доверяющий новым веяниям DBA — получил конкретный полезный результат и запланировал новые эксперименты по оптимизации и настройке СУБД.

Показать полностью 2
[моё] Субд Postgresql Настройка Оптимизация Нейронные сети DeepSeek Длиннопост
13
2
kznalp
kznalp
1 месяц назад
Postgres DBA
Серия СУБД PostgreSQL

Влияние уменьшения fillfactor на работу autovacuum⁠⁠

Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).

Влияние уменьшения fillfactor на работу autovacuum Субд, Postgresql, Настройка, Тестирование, Оптимизация, Длиннопост

Регулярная уборка это правильно .

Задача

Оценить влияние кардинального снижения параметра хранения таблиц fillfactor c базового значения 100 до 50, при агрессивной настройке autovacuum.

Начало работ

PG_HAZEL : Влияние уменьшения параметра fillfactor на производительность СУБД PostgreSQL

Конфигурация виртуальной машины

CPU = 2

RAM = 2GB

Версия СУБД:

Postgres Pro (enterprise certified) 15.8.1 on x86_64-pc-linux-gnu, compiled by gcc (AstraLinuxSE 8.3.0-6) 8.3.0, 64-bit

Размер тестовой БД = 10GB

Тестовая таблица ~60 000 000 строк

Параметры настройки autovacuum на уровне СУБД

autovacuum_analyze_scale_factor 0.1

autovacuum_analyze_threshold 50

autovacuum_vacuum_cost_delay 2 ms

autovacuum_vacuum_cost_limit -1

autovacuum_vacuum_insert_scale_factor 0.2

autovacuum_vacuum_insert_threshold 1000

autovacuum_vacuum_scale_factor 0.2

autovacuum_vacuum_threshold 50

vacuum_cost_limit 2000

Параметры настройки autovacuum для тестовой таблицы

autovacuum_vacuum_scale_factor 0

autovacuum_vacuum_threshold 1000

autovacuum_analyze_scale_factor 0

autovacuum_analyze_threshold 1000

autovacuum_vacuum_insert_scale_factor 0

autovacuum_vacuum_insert_threshold 1000

autovacuum_vacuum_cost_delay 1

autovacuum_vacuum_cost_limit 2000

Нагрузка при тестировании : 5-48

Влияние уменьшения fillfactor на работу autovacuum Субд, Postgresql, Настройка, Тестирование, Оптимизация, Длиннопост

Ось X - итерация теста. Ось Y - количество одновременных сессий pgbench

Эксперимент-2 : fillfactor = 100

Интенсивность и показатели выполнения autovacuum

Влияние уменьшения fillfactor на работу autovacuum Субд, Postgresql, Настройка, Тестирование, Оптимизация, Длиннопост
Влияние уменьшения fillfactor на работу autovacuum Субд, Postgresql, Настройка, Тестирование, Оптимизация, Длиннопост

Ось X - точка завершения autovacuum. Ось Y - время выполнения autovacuum.

Нагрузка начала роста времени работы autovacuum = 8

Эксперимент-3 : fillfactor = 50

Влияние уменьшения fillfactor на работу autovacuum Субд, Postgresql, Настройка, Тестирование, Оптимизация, Длиннопост
Влияние уменьшения fillfactor на работу autovacuum Субд, Postgresql, Настройка, Тестирование, Оптимизация, Длиннопост

Ось X - точка завершения autovacuum. Ось Y - время выполнения autovacuum.

Нагрузка начала роста времени работы autovacuum = 12

Итоги

Для данной СУБД и данного сценария нагрузки , уменьшение параметра хранения таблиц на 50% c 100 до 50 , повысило эффективность работы autovacuum:

  • Количество запусков autovacuum увеличилось на 261% c 193 до 697

  • Максимальное время работы autovacuum уменьшилось на 29% с 936 сек. до 663 сек.

  • Среднее время работы autovacuum уменьшилось на 73% с 46 сек. до 12 сек.

  • Предельная нагрузка на autovacuum увеличивалась на 50% с 8 до 12 соединений.

Показать полностью 5
[моё] Субд Postgresql Настройка Тестирование Оптимизация Длиннопост
1
4
kznalp
kznalp
1 месяц назад
Postgres DBA
Серия СУБД PostgreSQL

Причины увеличения количества мертвых строк при оптимизации параметров autovacuum⁠⁠

Причины увеличения количества мертвых строк при оптимизации параметров autovacuum Субд, Postgresql, Тестирование

Зри в корень (с)

Гипотеза об ограничении процесса autovacuum для высокопроизводительных СУБД:

  1. Изменение параметров приводит к росту производительности СУБД

  2. Рост производительности СУБД означает большее количество операций UPDATE в ходе нагрузочного тестирования

  3. Принципиальное ограничение - производительность процесса autovacuum ограничена пропускной способности дисковой подсистемы.

Следствие :

Мертвые строки накапливаются быстрее, чем autovacuum успевает очищать

Итог:

  • В случае стандартного режима работы , единственный выход - добавить регулярную очистку мертвых строк в период наименьшей нагрузки на СУБД.

  • В случае режима работы 24/7 - только архитектурное решение - не допускать роста таблиц до огромных размеров , для которых используется очень большое количество операций INSERT/UPDATE.

Показать полностью 1
[моё] Субд Postgresql Тестирование
0
2
kznalp
kznalp
1 месяц назад
Postgres DBA
Серия СУБД PostgreSQL

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL⁠⁠

Взято с основного технического канала Postgres DBA (возможны правки в исходной статье).

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Разобраться в работе сложного механизма - это очень интересно.

Задача

Проанализировать количественное влияние на производительность СУБД повышения агрессивности настройки autovacuum для очень большой таблицы .

Начало работ

PG_HAZEL : Влияние агрессивного автовакуума на производительность СУБД PostgreSQL.

Конфигурация СУБД

CPU = 200

RAM = 1TB

DB Size = 10TB

Количество строк тестовой таблицы ~7 000 000 000

Сценарий нагрузки - смешанный ("Select only" + "Select + Update" + "Insert only")

Минимальная нагрузка = 5 сессий

Максимальная нагрузка = 115 сессии

Эксперимент-10K : агрессивные настройки autovacuum

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_scale_factor = 0);

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_threshold = 10000);

ALTER TABLE pgbench_accounts SET (autovacuum_analyze_scale_factor = 0);

ALTER TABLE pgbench_accounts SET (autovacuum_analyze_threshold = 10000);

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_insert_scale_factor = 0);

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_threshold = 10000);

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_cost_delay = 0);

Эксперимент-1K : агрессивные настройки autovacuum

Снижение граничного условия в 10 раз.

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_threshold = 1000);

ALTER TABLE pgbench_accounts SET (autovacuum_analyze_threshold = 1000);

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_threshold = 1000);

Операционная скорость

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - операционная скорость

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - относительная разница между скорости в эксперименте-10K и эксперименте-1K

Средний прирост производительности СУБД в эксперименте-1K = 9.5%

Ожидания СУБД

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Сводная таблица предельных значений и корреляции ожиданий СУБД.

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - ожидания СУБД

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - относительная разница между количеством ожиданий в эксперименте-10K и эксперименте-1K

Среднее снижение количества ожиданий СУБД в эксперименте-1K = -4.51%

Ожидания IO

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - ожидания СУБД типа IO

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - относительная разница между количеством ожиданий в эксперименте-10K и эксперименте-1K

Среднее снижение количества ожиданий СУБД типа IO в эксперименте-1K = -4.51%

Ожидания IPC

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - ожидания СУБД типа IPC

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - относительная разница между количеством ожиданий в эксперименте-10K и эксперименте-1K

Превышение ожиданий IPC в эксперименте-1K при нагрузке близкой к максимальной.

Среднее снижение количества ожиданий СУБД типа IPC в эксперименте-1K = -37.44%

Ожидания Lock

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - ожидания СУБД типа Lock

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - относительная разница между количеством ожиданий в эксперименте-10K и эксперименте-1K

С ростом нагрузки ожидания Lock в эксперименте-1К начинают превышать ожидания в эксперименте-10K.

Среднее снижение количества ожиданий СУБД типа Lock в эксперименте-1K = -17.00%

Ожидания LWLock

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - ожидания СУБД типа LWLock

PG_HAZEL : Влияние уменьшения autovacuum_vacuum_threshold на производительность СУБД PostgreSQL Субд, Postgresql, Тестирование, Длиннопост

Ось X - точка наблюдения. Ось Y - относительная разница между количеством ожиданий в эксперименте-10K и эксперименте-1K

В целом ожидания Lock в эксперименте-1К превышают ожидания в эксперименте-10K.

Среднее повышение количества ожиданий СУБД типа Lock в эксперименте-1K = 13.46%

Итог

Для данной СУБД и данного сценария синтетической нагрузки. При нагрузке на СУБД с 5 до 115 одновременных соединений :

  • Снижение граничного условия старта autovacuum с 10 000 до 1 000 мёртвых строк , приводит к повышению производительности в среднем до 9.5%.

  • Mаксимальный прирост производительности достигает 31%.

P.S.

Корреляционный анализ ожиданий по тестовым сценариям, будет подготовлен позже.

Показать полностью 13
[моё] Субд Postgresql Тестирование Длиннопост
0
3
kznalp
kznalp
1 месяц назад
Postgres DBA
Серия СУБД PostgreSQL

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц⁠⁠

Взято с основного технического канала Postgres DBA (возможны правки).

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Тюнинг - дело тонкое. Нужно аккуратно.

Задача

Проанализировать влияние на производительность СУБД агрессивной настройки autovacuum для очень большой таблицы .

Конфигурация СУБД

CPU = 200RAM = 1TBDB Size = 10TBКоличество строк тестовой таблицы ~70 00 000Сценарий нагрузки - смешанный ("Select only" + "Select + Update" + "Insert only")Минимальная нагрузка = 5 сессийМаксимальная нагрузка = 92 сессии

Эксперимент-1 : Базовые настройки autovacuum (BASELINE)

autovacuum_analyze_scale_factor = 0.005autovacuum_analyze_threshold = 50autovacuum_vacuum_cost_delay = 2msautovacuum_vacuum_cost_limit = 5600autovacuum_vacuum_insert_scale_factor = 0.01autovacuum_vacuum_scale_factor = 0.001autovacuum_vacuum_threshold = 50autovacuum_vacuum_insert_threshold = 1000autovacuum_work_mem = 1GB

Эксперимент-2 : агрессивная настройка autovacuum для тестовой таблицы

ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_scale_factor = 0);ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_threshold = 10000);ALTER TABLE pgbench_accounts SET (autovacuum_analyze_scale_factor = 0);ALTER TABLE pgbench_accounts SET (autovacuum_analyze_threshold = 10000);ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_insert_scale_factor = 0);ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_threshold = 10000);ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_cost_delay = 0);

Метрики мониторинга

Autovacuum: Count of autovacuum workers

Эксперимент-1:BASELINE

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее количество воркеров для эксперимента-1 = 0.5

Эксперимент-2:autovacuum

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее количество воркеров для эксперимента-1 = 1.5

CPU iowait time

Эксперимент-1:BASELINE

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее значение = 7.6%

Эксперимент-2:autovacuum

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее значение = 8.4%

Disk utilization

Эксперимент-1:BASELINE

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее значение: 77-81%

Эксперимент-2:autovacuum

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее значение: 85-89%

CPU utilization

Эксперимент-1:BASELINE

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее значение = 14.1%

Эксперимент-2:autovacuum

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Среднее значение = 16%

Результаты

Утилизация ресурсов увеличилась на 1-2%

Операционная скорость

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Ось X - нагрузка на СУБД . Ось Y - Операционная скорость

Максимальное увеличение операционной скорости при использовании агрессивных настроек autovacuum составило 9%

Среднее увеличение операционной скорости при использовании агрессивных настроек autovacuum составило 4.5%

Ожидания СУБД

PG_HAZEL : Анализ влияния агрессивного автовакуума на производительность СУБД для больших таблиц Субд, Postgresql, Тестирование, Тюнинг, Настройка, Длиннопост

Минимальные и максимальные значение ожиданий СУБД

  • Ожидания IO - возросли

  • Ожидания IPC, Lock, LWLock - снизились

Ожидания IO

Среднее уменьшение количества ожиданий типа IO, в эксперименте-2 составило менее 1%

Ожидания IPC

Среднее увеличение количества ожиданий типа IPC, в эксперименте-2 составило 52%

Ожидания Lock

Среднее уменьшение количества ожиданий типа Lock, в эксперименте-2 составило менее -19%

Ожидания LWLock

Среднее увеличение количества ожиданий типа LWLock, в эксперименте-2 составило 19%

Итог

  • Для данной СУБД и данного сценария нагрузки, применение агрессивных настроек autovacuum дало среднее увеличение производительности СУБД на 4.5%

  • Увеличение утилизации ресурсов ОС - незначительно ~1-2%.

PS.

Корреляционный анализ событий ожиданий тестовых сценариев, будет выполнен позднее.

Показать полностью 10
[моё] Субд Postgresql Тестирование Тюнинг Настройка Длиннопост
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии