Найти в Дзене
Postgres DBA

Эксперименты по эффективности паттернов производительности СУБД PostgreSQL в режиме highload

ℹ️Определить, что СУБД работает в режиме Highload, можно по комплексу признаков: В данной статье рассматривается особенности функционирования СУБД в условиях нагрузки, приводящей к достижению пределов вертикального масштабирования (признак-1). ℹ️Это утверждение в целом верно и очень точно отражает один из ключевых принципов научного метода, сформулированный философом Карлом Поппером — принцип фальсифицируемости. Это верно, но с очень важными оговорками. ℹ️ "Принимается верной" не означает, что она истина в последней инстанции. В науке это скорее означает "является рабочей моделью". Гипотеза (а затем и теория) считается наилучшим доступным объяснением фактов, пока не появятся новые данные, которые она не может объяснить. ℹ️"Пока не будет опровергнута" — это суть принципа фальсифицируемости. Научная гипотеза должна быть сформулирована таким образом, чтобы в принципе можно было представить эксперимент, который мог бы ее опровергнуть. Если гипотезу нельзя опровергнуть никаким мыслимым
Оглавление

Highload — это не про "сколько", а про "как".

ℹ️Определить, что СУБД работает в режиме Highload, можно по комплексу признаков:

  1. Физические или экономические пределы вертикального масштабирования
  2. Отказ одного компонента неприемлем, главной задачей становится не добавление новой функциональности, а обеспечение стабильности, предсказуемости и горизонтального роста системы под экстремальной нагрузкой.

В данной статье рассматривается особенности функционирования СУБД в условиях нагрузки, приводящей к достижению пределов вертикального масштабирования (признак-1).

1️⃣JOIN vs Коррелированный подзапрос 

👎Гипотеза о преимуществе при использовании "JOIN" - опровергнута экспериментально.

2️⃣Seq scan vs Index only scan

👎Гипотеза о преимуществе при использовании "Index only scan" - опровергнута экспериментально.

3️⃣IN vs EXISTS

👍Рабочая модель для параллельной нагрузки.

4️⃣MAX vs Array

ℹ️Не является общей рекомендацией. Для тяжёлых запросов - равноценные решения.

5️⃣"Collate=C vs Collate=ru_RU"

👎Гипотеза о преимуществе при использовании "Collate=C" - опровергнута экспериментально.

Гипотеза принимается верной пока не будет опровергнута экспериментально. Или - подтвердить гипотезу экспериментом нельзя , опровергнуть можно.

ℹ️Это утверждение в целом верно и очень точно отражает один из ключевых принципов научного метода, сформулированный философом Карлом Поппером — принцип фальсифицируемости.

1. "Гипотеза принимается верной пока не будет опровергнута экспериментально"

Это верно, но с очень важными оговорками.

ℹ️ "Принимается верной" не означает, что она истина в последней инстанции. В науке это скорее означает "является рабочей моделью". Гипотеза (а затем и теория) считается наилучшим доступным объяснением фактов, пока не появятся новые данные, которые она не может объяснить.

ℹ️"Пока не будет опровергнута" — это суть принципа фальсифицируемости. Научная гипотеза должна быть сформулирована таким образом, чтобы в принципе можно было представить эксперимент, который мог бы ее опровергнуть. Если гипотезу нельзя опровергнуть никаким мыслимым экспериментом, она ненаучна (например, астрология).

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

2. "Подтвердить гипотезу экспериментом нельзя, опровергнуть можно"

⚠️Это строго верно с логической точки зрения.

ℹ️ Почему нельзя подтвердить окончательно? Потому что для полного подтверждения гипотезы потребовалось бы провести бесконечное количество экспериментов во всех возможных условиях. Это логически невозможно.

 ◽Пример: Гипотеза "Все лебеди белые".

Сколько бы белых лебедей вы ни видели (тысячу, миллион), вы не можете подтвердить гипотезу на 100%, так как всегда существует вероятность найти где-то черного лебедя. Что, в итоге, и произошло в Австралии.

Почему можно опровергнуть? Потому что для опровержения достаточно одного надежного, воспроизводимого контрпримера.

 ⚠️Пример: Всего один черный лебедь мгновенно и окончательно опровергает гипотезу "Все лебеди белые".

Итог и важное дополнение

Утверждение верно и является краеугольным камнем современной науки. Оно смещает фокус ученых с попыток "доказать" свою теорию на попытки ее проверить, то есть попытаться найти ее слабые места и ограничения. Именно так наука и прогрессирует — через опровержение старых и создание новых, более точных моделей.

⚠️Важный нюанс: Хотя мы не можем окончательно подтвердить гипотезу, мы можем укрепить ее с помощью множества успешных экспериментов и предсказаний. Когда гипотеза выдерживает множество строгих проверок и становится широко принятой, она превращается в теорию (например, теория эволюции, теория относительности). Но даже самая устоявшаяся теория в принципе может быть опровергнута новыми данными.

ℹ️Таким образом, утверждение не только верно, но и фундаментально для понимания того, как работает наука.

Пример : эксперимент "JOIN vs Коррелированный подзапрос".

ℹ️Одного эксперимента может быть достаточно для опровержения гипотезы в контексте тестируемой системы.

1. Медианные сглаженные значения:

  · Использование медианы вместо среднего защищает от выбросов

  · Сглаживание уменьшает влияние кратковременных флуктуаций

  · Это дает более репрезентативную картину "типичной" производительности

2. Измерение при разной нагрузке:

  · Это критически важное улучшение! Вы проверяете гипотезу не в идеальных условиях, а в реалистичных сценариях

  · Если JOIN проигрывает при РАЗНЫХ уровнях нагрузки, это сильное доказательство

  · Позволяет выявить, не является ли преимущество подзапроса специфичным для определенного уровня нагрузки

3. Прогрев кэшей:

  · Устраняет один из главных источников методической ошибки

  · Измеряете установившийся режим работы, а не переходные процессы

4. Продолжительность и периодичность:

  · 2 часа × 60 замеров = 120 точек данных на каждый сценарий

  · Это достаточный объем для статистического анализа

  · Позволяет увидеть долгосрочные тренды и стабильность результатов

ℹ️Эксперимент фактически представляет собой не "один эксперимент", а серию экспериментов при разных условиях нагрузки, агрегированных надежным статистическим методом.

➡️Медианная производительность коррелированного подзапроса выше

➡️Эта картина сохраняется при разных уровнях нагрузки

➡️Результаты устойчивы во времени (2 часа тестирования)

⚠️Есть веские основания утверждать, что в конкретной системе с конкретными данными и нагрузкой гипотеза не подтверждается.

Практический вывод

ℹ️Для практических целей (принятия решения о том, какой паттерн использовать в вашей системе) такого эксперимента достаточно.

Можно с уверенностью заключить, что коррелированный подзапрос предпочтительнее.

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

Итог

⚠️Экспериментальный дизайн значительно повышает надежность результатов и делает опровержение гипотезы в рамках тестируемого контекста вполне обоснованным.