ℹ️Работы по проекту "PG_HAZEL"-завершены.Исследования продолжены в проекте PG_EXPECTOℹ️
Начало работ по теме
Задача
- Провести сравнительный анализ производительности и ожиданий СУБД между периодом штатной производительности(1) и периодом снижения производительности(2).
- Провести семантический анализ SQL запросов между периодом штатной производительности(1) и периодом снижения производительности(2).
Производительность и ожидания СУБД
80% ожиданий (диаграмма Парето) по типу ожидания IPC
80% ожиданий (диаграмма Парето) по типу ожидания Lock
80% queryid (диаграмма Парето) по типу ожидания IPC
80% queryid (диаграмма Парето) по типу ожидания Lock
Семантический анализ SQL запросов по типу ожидания IPC
1. Паттерн: Выборка пользователей с JOIN таблицы keycloak_userprofilekeycloak и фильтрацией по роли superuser
Описание:
INNER JOIN между таблицей пользователей и keycloak_userprofilekeycloak с фильтрацией:
- is_superuser = True
- keycloak_roles LIKE '%superuser%'
- LIMIT 1 с разными направлениями сортировки
Вхождения:
- 1: 4 раза (3 с auth_user, 1 с users_user)
- 2: 4 раза (3 с auth_user, 1 с users_user)
2. Паттерн: Подсчёт записей в таблице inbox_logs
Описание:
COUNT(*) из таблицы inbox_logs с фильтрацией по:
- obj_id = '00301018'
- obj_type = 0
Вхождения:
- 1: 1 раз
- 2: 1 раз
3. Паттерн: Подсчёт записей в таблице attendee
Описание:
COUNT(*) из таблицы attendee с фильтрацией:
- user_id с конкретным UUID
- status = 'PENDING'
Вхождения:
- 1: 1 раз
- 2: 1 раз
4. Паттерн: Выборка пользователя по atom_id
Описание:
SELECT из users_user с условием atom_id = $1::uuid
Вхождения:
- 1: 1 раз
- 2: 1 раз
5. Паттерн: Сложный запрос транзакций с множественными JOIN ⭐
Описание:
Сложный запрос с:
- 1 INNER JOIN + 7 LEFT OUTER JOIN
- Множественные таблицы: store_transactionhistory, store_transaction, store_userwallet, users_user, badges_action и др.
- Сложные условия в WHERE с OR
- Сортировка по created_at DESC
Вхождения:
- 1: 0 раз
- 2: 1 раз (уникальный)
Сводная таблица:
Паттерн 1 2
Выборка superuser + keycloak JOIN 4 4
COUNT из inbox_logs 1 1
COUNT из attendee 1 1
Выборка по atom_id 1 1
Сложный JOIN транзакций 0 1
Вывод: Периоды идентичны, за исключением одного дополнительного сложного запроса в 2.
Семантический анализ SQL запросов по типу ожидания Lock
1. Паттерн: Обновление таблицы keycloak_userprofilekeycloak - сброс ролей
Описание:
UPDATE запросы, которые устанавливают пустой массив ролей для конкретных записей:
- SET "roles_and_permissions_as_dict" = '[]'
- Фильтрация по конкретному ID: WHERE "id" = <число>
Вхождения:
- 1: 2 раза
- 2: 3 раза
2. Паттерн: Обновление таблицы user_extension_userextension
Описание:
UPDATE запросы с параметризованными значениями:
- SET "info" = $1, "user_info" = $2
- Фильтрация по UUID пользователя: WHERE "user_id" = $3::uuid
Вхождения:
- 1: 1 раз
- 2: 1 раз
3. Паттерн: Обновление сессии Django
Описание:
UPDATE запросы для таблицы django_session:
- SET "session_data" = $1, "expire_date" = $2::timestamptz
- Фильтрация по ключу сессии: WHERE "session_key" = $3
Вхождения:
- 1: 1 раз
- 2: 0 раз
Сводная таблица:
Паттерн 1 2
UPDATE keycloak_userprofilekeycloak (сброс ролей) 2 3
UPDATE user_extension_userextension 1 1
UPDATE django_session 1 0
Ключевые наблюдения:
- Общие элементы: Оба файла содержат одинаковые запросы к keycloak_userprofilekeycloak
- Уникальность:
- 1 содержит дополнительный запрос к django_session
- 2 содержит дополнительный запрос к keycloak_userprofilekeycloak
- Повторяемость: Паттерн сброса ролей в keycloak_userprofilekeycloak является наиболее частым в обоих файлах