Скорость — это валюта в мире данных. Если ваш PostgreSQL тормозит на сложных JOIN, а Redis используется только как простой кэш, вы оставляете деньги на столе. Хорошая новость: современные AI-ассистенты (вроде того, что вы используете для написания кода) могут стать вашим персональным DBA, если правильно составить промт. В этой подборке — 12 проверенных промтов, которые помогут вам проанализировать медленные запросы, создать идеальные индексы и настроить кэширование так, чтобы база летала. Никакой воды — только конкретные формулировки и примеры.
Промт 1: Диагностика медленных запросов
Задача: Найти и проанализировать запросы, которые тормозят вашу базу.
Промт:
Ты — эксперт по PostgreSQL. У меня есть база данных с таблицами users, orders, products. Вот результат EXPLAIN ANALYZE для моего запроса: [вставьте вывод]. Проанализируй план выполнения, укажи узкие места (seq scan, hash join, сортировки) и предложи конкретные меры: какие индексы создать, как переписать запрос, какие настройки изменить. Ответ дай в виде нумерованного списка, от самого важного к менее важному.
Пример использования: Вы скопировали вывод EXPLAIN ANALYZE SELECT * FROM orders JOIN users ON ... и получили конкретные рекомендации: создать индекс на orders.user_id, переписать SELECT * на явный список колонок, увеличить work_mem.
Промт 2: Генерация эффективных индексов
Задача: Спроектировать индексы для конкретных паттернов запросов.
Промт:
Ты — эксперт по индексам в PostgreSQL. У меня есть таблица orders (id, user_id, created_at, status, total). Вот типичные запросы: [перечислите 3-5 запросов]. Предложи набор индексов (B-tree, GIN, BRIN, частичные, составные) с обоснованием для каждого. Учти частоту обновления таблицы и соотношение чтения/записи. Укажи, какие запросы ускорятся, а какие могут замедлиться.
Пример: AI предложил составной индекс на (user_id, status, created_at DESC) для фильтрации по пользователю и статусу, и частичный индекс на (total) где status='pending' для отчетов по неоплаченным заказам.
Промт 3: Настройка кэширования в Redis
Задача: Спроектировать схему кэширования для типичных данных.
Промт:
Ты — эксперт по Redis. У меня есть веб-приложение с PostgreSQL, типичные данные: профили пользователей, лента новостей, сессии. Предложи стратегию кэширования: какие данные кэшировать, какие типы Redis использовать (STRING, HASH, LIST, SET, ZSET, JSON), какие TTL задать, как инвалидировать кэш при обновлении данных. Объясни, как избежать проблем с несогласованностью (cache penetration, avalanche, breakdown).
Пример: AI предложил использовать RedisJSON для профилей с TTL 1 час, ZSET для ленты с оценкой по времени, и паттерн cache-aside для инвалидации.
Промт 4: Анализ использования индексов
Задача: Проверить, какие индексы реально используются, а какие нет.
Промт:
Ты — эксперт по PostgreSQL. Вот результаты запроса к pg_stat_user_indexes и pg_stat_user_tables: [вставьте данные]. Определи неиспользуемые индексы, которые стоит удалить, и индексы, которые перегружены (часто сканируются). Дай рекомендации по обслуживанию: когда запускать REINDEX, VACUUM, ANALYZE.
Пример: AI увидел, что индекс на orders.total не использовался ни разу за 30 дней, и посоветовал его удалить, а для users.email — создать уникальный индекс, если его нет.
Промт 5: Оптимизация сложных JOIN-запросов
Задача: Ускорить запросы с множественными соединениями.
Промт:
Ты — эксперт по PostgreSQL. Вот мой запрос с JOIN: [вставьте SQL]. Он выполняется более 10 секунд. Проанализируй, какие индексы нужны для каждого JOIN, можно ли заменить JOIN на подзапрос или CTE, стоит ли использовать материализованные представления. Предложи оптимизированную версию запроса с пояснениями.
Пример: AI предложил заменить многочисленные JOIN на один запрос с оконной функцией и создать индекс на внешние ключи, что сократило время с 12 до 0.8 секунды.
Промт 6: Настройка Redis для горячих ключей
Задача: Решить проблему «горячих ключей» (hot keys) в Redis.
Промт:
Ты — эксперт по Redis. В моем приложении есть несколько ключей, которые читаются очень часто (например, популярные товары). Это создает нагрузку на один шард. Предложи стратегии для решения: шардирование по ключу, локальное кэширование, использование Redis Cluster, распределение ключей с суффиксами. Опиши плюсы и минусы каждой.
Пример: AI порекомендовал добавить случайный суффикс к ключу и хранить список таких ключей в ZSET, чтобы при чтении выбирать случайный вариант.
Промт 7: Поиск и устранение блокировок в PostgreSQL
Задача: Выявить блокировки и взаимоблокировки (deadlocks).
Промт:
Ты — эксперт по PostgreSQL. Вот вывод pg_locks и pg_stat_activity: [вставьте данные]. Определи, какие транзакции блокируют друг друга, и предложи меры: изменить порядок операций, уменьшить время транзакций, использовать SELECT FOR UPDATE SKIP LOCKED. Напиши SQL-запросы для мониторинга блокировок.
Пример: AI нашел блокировку из-за двух транзакций, обновляющих строки в разном порядке, и посоветовал всегда обновлять в одном порядке.
Промт 8: Кэширование агрегатов и сложных вычислений
Задача: Кэшировать результаты тяжелых агрегаций.
Промт:
Ты — эксперт по Redis. У меня есть отчеты, которые считаются 5 секунд: сумма продаж по месяцам, топ-10 товаров. Предложи схему кэширования: использовать Redis для хранения готовых агрегатов, обновлять их по расписанию или при изменении данных. Учти, что данные обновляются раз в час. Напиши пример кода на Python (redis-py) для получения и обновления кэша.
Пример: AI предложил хранить агрегаты в HASH с ключом report:sales:2026-08, TTL 2 часа, и обновлять через фоновый процесс.
Промт 9: Оптимизация запросов с полнотекстовым поиском
Задача: Ускорить поиск по тексту в PostgreSQL.
Промт:
Ты — эксперт по PostgreSQL. У меня есть таблица articles с полем body. Я использую LIKE '%word%', но это медленно. Предложи альтернативы: GIN-индекс с to_tsvector, pg_trgm, полнотекстовый поиск с конфигурацией русского языка. Приведи примеры SQL для создания индексов и запросов.
Пример: AI посоветовал создать GIN-индекс на to_tsvector('russian', body) и использовать @@ с plainto_tsquery, что ускорило поиск в 100 раз.
Промт 10: Стратегия TTL и очистка устаревших данных в Redis
Задача: Настроить автоматическую очистку кэша.
Промт:
Ты — эксперт по Redis. У меня в Redis хранятся сессии пользователей, кэш профилей и временные данные. Предложи оптимальные TTL для каждого типа: сессии 30 минут, профили 1 час, временные данные 5 минут. Объясни, как работает ленивая и активная очистка, и как выбрать TTL, чтобы не перегружать память.
Пример: AI объяснил, что для сессий можно использовать EXPIRE при установке ключа, а для профилей — обновлять TTL при каждом чтении, чтобы продлевать жизнь активным пользователям.
Промт 11: Сравнение производительности PostgreSQL и Redis для разных задач
Задача: Решить, когда использовать PostgreSQL, а когда Redis.
Промт:
Ты — архитектор БД. Сравни PostgreSQL и Redis по критериям: скорость чтения, записи, сложность запросов, надежность, масштабируемость. Дай рекомендации, какие типы данных и запросов лучше держать в каждой БД. Приведи примеры гибридной архитектуры.
Пример: AI предложил хранить основные данные в PostgreSQL, а горячие счетчики и лайки — в Redis, синхронизируя через фоновые задачи.
Промт 12: Мониторинг и профилирование запросов
Задача: Настроить мониторинг производительности БД.
Промт:
Ты — эксперт по PostgreSQL. Предложи набор метрик для мониторинга: количество медленных запросов, cache hit ratio, использование индексов, блокировки. Напиши SQL-запросы для сбора этих метрик и рекомендации по настройке pg_stat_statements. Также укажи, какие параметры конфигурации стоит изменить (shared_buffers, work_mem, effective_cache_size).
Пример: AI дал SQL для pg_stat_statements, который показывает запросы с наибольшим временем выполнения, и посоветовал увеличить shared_buffers до 25% от ОЗУ.
Заключение
Эти 12 промтов — ваш швейцарский нож для работы с PostgreSQL и Redis. Они помогут не только ускорить текущие запросы, но и выстроить систему, которая будет оставаться быстрой даже при росте нагрузки. Скопируйте нужный промт, адаптируйте под свои данные и используйте AI как опытного наставника, который всегда под рукой. Начните с диагностики медленных запросов — это даст быстрый результат и мотивацию копнуть глубже. А если у вас есть свои любимые промты для баз данных — поделитесь в комментариях, мы обновим подборку!
Комментарии