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

📝Демобаза 2.0 : Сравнение производительности JOIN и коррелированных подзапросов в СУБД PostgreSQL

ℹ️ Новый инструмент с открытым исходным кодом для статистического анализа, нагрузочного тестирования и построения отчетов доступен в репозитории GitFlic и GitHub Проведено статистическое исследование влияния использования операторов JOIN и коррелированных подзапросов на производительность СУБД и нагрузку на серверную инфраструктуру. Результаты демонстрируют, что в условиях современного уровня оптимизации запросов и вычислительных мощностей разница в производительности между двумя подходами статистически незначима. Исследование проводилось на тестовой базе данных «Демобаза 2.0» с использованием СУБД PostgreSQL 17. Конфигурация тестового стенда включала 8-ядерный процессор и 8 ГБ оперативной памяти. Нагрузочное тестирование выполнялось с помощью утилиты pg_expeco 4 , используя несколько тестовых запросов. Ключевым элементом исследования стало сравнение двух эквивалентных по функциональности запросов, реализующих поиск случаев овербукинга авиарейсов: Для обеспечения релевантности сравнен
Оглавление

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

ℹ️ Новый инструмент с открытым исходным кодом для статистического анализа, нагрузочного тестирования и построения отчетов доступен в репозитории GitFlic и GitHub

kznalp/PG_EXPECTO: Комплекс статистического анализа производительности СУБД PostgreSQL
GitHub - pg-expecto/pg_expecto: Комплекс pg_expecto для статистического анализа производительности и нагрузочного тестирования СУБД PostgreSQL

Аннотация

Проведено статистическое исследование влияния использования операторов JOIN и коррелированных подзапросов на производительность СУБД и нагрузку на серверную инфраструктуру. Результаты демонстрируют, что в условиях современного уровня оптимизации запросов и вычислительных мощностей разница в производительности между двумя подходами статистически незначима.

Методология

Исследование проводилось на тестовой базе данных «Демобаза 2.0» с использованием СУБД PostgreSQL 17. Конфигурация тестового стенда включала 8-ядерный процессор и 8 ГБ оперативной памяти. Нагрузочное тестирование выполнялось с помощью утилиты pg_expeco 4 , используя несколько тестовых запросов.

Ключевым элементом исследования стало сравнение двух эквивалентных по функциональности запросов, реализующих поиск случаев овербукинга авиарейсов:

  1. Сценарий 4.1: с использованием последовательных операторов JOIN.
  2. Сценарий 4.2: с использованием коррелированного подзапроса.

Для обеспечения релевантности сравнения были предварительно созданы необходимые индексы.

Результаты и анализ

Анализ планов выполнения:

Стоимость выполнения запросов для обоих подходов оказалась сопоставимой (JOIN: ~344228, Коррелированный подзапрос: ~356899). Разница в скорости выполнения на уровне одного запроса составила в среднем 2.44%, что не является существенным показателем.

Производительность СУБД:

Нагрузочное тестирование не выявило значительного влияния выбранного метода на общую операционную скорость СУБД. Средняя разница между сериями тестов составила лишь 0.58%. При этом было зафиксировано снижение количества ожиданий типа LWLock при использовании коррелированного подзапроса под высокой нагрузкой.

Влияние на инфраструктуру (vmstat):

Анализ метрик системы показал, что использование коррелированного подзапроса оказывает несколько меньшее давление на оперативную память (RAM). По другим параметрам, таким как количество переключений контекста (cs), существенных различий не обнаружено.

Выводы

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

Данное исследование опровергает устоявшийся стереотип о неприемлемости коррелированных подзапросов и демонстрирует эффективность современных оптимизаторов запросов.

Подробности эксперимента