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

⛔ПРОГНОЗ: DeepSeek о влиянии выбора кодировки на производительность СУБД PostgreSQL

Детали тестовых баз данных и результатов нагрузочного тестирования Часть-1 : Вопрос нейросети до получения результатов нагрузочного тестирования На основании информации о тестовых базах данных и тестовых запросах, сформируй гипотезу о результатах нагрузочного тестирования для баз данных locale_c и locale_ru при параллельной нагрузке от 10 до 44 параллельных сессий , CPU=8 RAM=8GB PostgreSQL 17. Ответ нейросети На основании анализа структуры баз данных и тестовых запросов, я сформирую гипотезу о результатах нагрузочного тестирования для locale_c и locale_ru: Основные различия между базами данных locale_c: LC_COLLATE = 'C' LC_CTYPE = 'C' Использует простую бинарную сортировку locale_ru: LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' Использует правила сортировки русского языка Гипотеза нагрузочного тестирования 1. Производительность при 10-20 параллельных сессиях locale_c будет показывать на 5-15% лучшую производительность Причина: бинарная сортировка 'C' требует меньше вычислител
Оглавление

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

Часть-1 : Вопрос нейросети до получения результатов нагрузочного тестирования

На основании информации о тестовых базах данных и тестовых запросах, сформируй гипотезу о результатах нагрузочного тестирования для баз данных locale_c и locale_ru при параллельной нагрузке от 10 до 44 параллельных сессий , CPU=8 RAM=8GB PostgreSQL 17.

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

На основании анализа структуры баз данных и тестовых запросов, я сформирую гипотезу о результатах нагрузочного тестирования для locale_c и locale_ru:

Основные различия между базами данных

locale_c:

  • LC_COLLATE = 'C'
  • LC_CTYPE = 'C'
  • Использует простую бинарную сортировку

locale_ru:

  • LC_COLLATE = 'ru_RU.UTF-8'
  • LC_CTYPE = 'ru_RU.UTF-8'
  • Использует правила сортировки русского языка

Гипотеза нагрузочного тестирования

1. Производительность при 10-20 параллельных сессиях

  • locale_c будет показывать на 5-15% лучшую производительность
  • Причина: бинарная сортировка 'C' требует меньше вычислительных ресурсов
  • Особенно заметно в запросах с ORDER BY и текстовыми операциями

2. Производительность при 30-44 параллельных сессиях

  • Разрыв в производительности увеличится до 15-25%
  • locale_c лучше справится с высокой конкуренцией за ресурсы CPU
  • В locale_ru возрастет нагрузка на CPU из-за сложных правил сортировки

3. Специфические операции с наибольшим влиянием

Наиболее чувствительные к локали операции:

  • ORDER BY category_name (русский текст)
  • LIKE '%Русск%' и другие текстовые поиски
  • Группировка по текстовым полям
  • Построение и использование индексов по текстовым полям

4. Потребление ресурсов

  • locale_ru: выше нагрузка на CPU (на 10-20%)
  • locale_c: более эффективное использование индексов
  • Обе базы: память 8GB будет достаточной, но возможны page faults при 40+ сессиях

5. Время отклика запросов

  • Простые запросы: разница минимальна (2-5%)
  • Сложные запросы с сортировкой: разница до 25-30%
  • Запросы с полнотекстовым поиском: разница 15-20%

Ожидаемые метрики

-2

Рекомендации для тестирования

  1. Особое внимание к запросам с ORDER BY и текстовыми операциями
  2. Мониторинг contention за ресурсы CPU при 40+ сессиях
  3. Проверка эффективности использования индексов в обеих базах
  4. Анализ времени выполнения отдельных компонентов запросов

Вывод

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

--------------------------------------------------------------------------

Часть-2 : Вопрос по итогам нагрузочного тестирования

Сформулируй гипотезу - почему при данных тестовых базах данных производительность тестовых запросов для базы данных locale_ru оказалась на 7% выше.

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

Гипотеза о причинах повышенной производительности (на 7%) базы данных locale_ru по сравнению с locale_c:

Основная гипотеза:

Разница в производительности связана с оптимизацией работы с русскоязычными текстовыми данными в базе locale_ru, где корректно настроены локали (ru_RU.UTF-8), включая правила сортировки (collation) и классификации символов (ctype).

Конкретные причины:

  1. Эффективное использование индексов для русскоязычного текста
  2. В locale_ru индексы по полям product_name и manufacturer (содержащим кириллицу) работают более эффективно, так как оптимизированы под правила локали.
  3. В locale_c (C-локаль) используются базовые бинарные правила сравнения, которые могут быть менее эффективны для обработки UTF-8 строк с кириллицей.
  4. Оптимизация операций LIKE с кириллицей
  5. Запросы содержат условия с LIKE '%Русск%', LIKE '%Смартфон%' и т.д.
  6. В locale_ru PostgreSQL лучше обрабатывает шаблоны с русскими символами, так как локаль корректно распознаёт состав символов и их варианты (например, регистр).
  7. Снижение накладных расходов на конвертацию данных
  8. В locale_c может происходить неявное преобразование кодировок при сравнении строк, что добавляет нагрузку.
  9. В locale_ru данные сразу хранятся и обрабатываются в согласованной локали, что уменьшает преобразования.
  10. Улучшенная статистика для текстовых полей
  11. В locale_ru статистика распределения данных (для планировщика запросов) собирается с учётом особенностей русского языка, что позволяет строить более оптимальные планы выполнения запросов.

Подтверждающие детали из тестовых запросов:

  • Оба тестовых запроса активно используют фильтрацию по русскоязычным шаблонам (LIKE).
  • Группировка и сортировка выполняются по полям category_name и manufacturer, которые содержат кириллицу.
  • Индексы idx_products_name и idx_products_manufacturer в locale_ru работают в «родной» локали, что ускоряет поиск.

Вывод

Настройка локали ru_RU.UTF-8 в locale_ru позволяет СУБД эффективнее работать с русскоязычными данными — от построения индексов до выполнения текстовых операций, что и даёт прирост производительности в 7% для данной нагрузки.