Медленный запрос можно исправить несколькими способами, в зависимости от того, как данные размещены и перемещаются по системе. Распределенный движок выполнения SingleStore предоставляет различные варианты: ключи шардирования определяют место хранения данных и могут обеспечивать совмещенные соединения (collocated joins), исключающие пересылку данных по сети; ключи сортировки управляют исключением сегментов в таблицах колоночного хранения; а проекции предоставляют альтернативные пути доступа. Чтобы знать, что именно из этого нужно изменить и когда, требуется глубокий опыт работы с базами данных.
Такой опыт оптимизации запросов не масштабируется сам по себе. Большая его часть хранится в головах экспертов, таких как инженеры по решениям и специалисты техподдержки, которые настроили сотни рабочих нагрузок. Когда разработчик сталкивается с медленным запросом, самым быстрым путем к ответу часто оказывается человек, а не инструмент.
Этот рабочий процесс требует постоянного переключения контекста. Вы генерируете отладочный профиль в базе данных. Вы очищаете его с помощью скрипта командной строки. Вы загружаете его в чат-инструмент вместе с большим файлом базы знаний. Затем вы переводите полученный ответ обратно в SQL и применяете его. Каждое переключение добавляет лишние трудности.
От медленного запроса к приоритетным рекомендациям по оптимизации
Агент настройки производительности заменяет этот фрагментированный рабочий процесс единым управляемым циклом. Вы начинаете с медленного SQL-запроса или отладочного профиля. Агент изучает профиль и схему. Он возвращает приоритетные выводы с подтверждающими данными. Вы копируете проверенный SQL в непроизводственную среду, применяете его, а затем заново профилируете и сравниваете результаты.
ИИ-агент работает с тем же источником достоверных данных, который используют инженеры по производительности: отладочным профилем SingleStore. Профиль по умолчанию не содержит достаточно деталей для реальной оптимизации, поэтому агент создает отладочный профиль по запросу, когда у него есть необходимый контекст рабочей среды и базы данных. Он также может принимать загруженный JSON-файл отладочного профиля, что позволяет анализировать профили из автономных систем без активного подключения.
Пространство рекомендаций специфично для SingleStore. Агент создан для обнаружения и объяснения паттернов, которые имеют наибольшее значение для распределенного движка:
- Соединения с интенсивным использованием широковещательной рассылки и перепартиционированием
- Перекос данных между разделами и потоками
- Выбор ключей шардирования, который блокирует совмещенные соединения или локальные операции группировки
- Несоответствие ключей сортировки и слабое исключение сегментов
- Ошибочная оценка кардинальности и устаревшая статистика
- Вытеснение данных (spills) и размещение хеш-таблиц
- Накладные расходы на компиляцию и промахи кэша планов
- Компромиссы при использовании проекций, хеш-индексов и справочных таблиц
Рекомендации агента по оптимизации запросов опираются на время работы операторов, сканирование и пропуск сегментов, коэффициенты перекоса, а также расчетное и фактическое количество строк, а не на общие советы по базам данных.
Как агент оптимизации запросов находит узкие места
Под капотом ИИ-агент выполняет четкий пайплайн, а не свободный чат. Шаги детерминированы и прозрачны:
- Получение запроса и его отладочного профиля из активного сеанса захвата или загруженного JSON-файла.
- Очистка и нормализация профиля, чтобы модель видела только важные поля и никакой лишней информации.
- Разбор плана выполнения, извлечение времени работы каждого оператора и определение распределенных операций.
- Обнаружение узкого места и классификация первопричины.
- Поиск релевантных паттернов и компромиссов в специально сформированной базе знаний по оптимизации.
- Рекомендация исправления с объяснением, в котором приводятся обоснования принятого решения.
- Проверка любого сгенерированного DDL перед его отображением.
Поскольку процесс является явным, мы можем измерить, следовал ли ему сеанс, сколько вызовов инструментов потребовалось и остался ли результат верен извлеченным знаниям.
Вот как выглядит типичная рекомендация. Разработчик выполняет соединение двух больших таблиц и видит, что оно работает медленно. Агент читает профиль, обнаруживает широковещательное соединение и прослеживает его до несовпадающих ключей шардирования.
Узкое место: Обнаружено широковещательное соединение. Таблицы `orders` и `customers` не шардированы по столбцу соединения, поэтому таблица `customers` рассылается широковещательно на каждый раздел. Решение: выровняйте обе таблицы по столбцу соединения, чтобы задействовать совмещенное соединение.
-- Кандидат в DDL (сначала проверьте в непроизводственной среде)
CREATE TABLE orders_v2 ( ... SHARD KEY (customer_id));
Агент объясняет компромисс простым языком.
Оптимизация запросов в Visual Explain, SQL Editor и истории запросов
Агент появляется там, где уже происходит работа по настройке.
Точки входа для агента оптимизации запросов
В портале он работает как помощник на боковой панели. В Visual Explain действие оптимизации открывает агента вместе с запросом и прикрепляет исходный профиль в фоновом режиме, поэтому вы переходите от визуального плана к управляемому исправлению без ручного копирования. Вы также можете загрузить JSON отладочного профиля прямо на боковую панель — именно так команды поддержки и решений анализируют профили клиентов из локальных развертываний.
Оптимизация запросов из Visual Explain
Действие оптимизации также доступно при работе в SQL Editor: выберите запрос, нажмите Optimize, и редактор профилирует его и запустит Query Tuner на боковой панели, опять же без ручного копирования SQL или файлов. Если нужный вам запрос уже есть в истории, вы можете начать и оттуда: нажмите Optimize для прошлого запуска, чтобы вернуться к тому, что работало медленно ранее, и продолжить настройку прямо из списка истории.
Вне портала мы планируем сделать логику оптимизации доступной в качестве навыка в нашем MCP-сервере. Любой разработчик с MCP-клиентом сможет вызвать его, запустить для собственных профилей и отправить нам отзыв. Мы хотим, чтобы наши клиенты и сообщество тестировали этот навык в открытую и помогали нам находить случаи, которые мы еще не охватили.
Почему наша оптимизация запросов безопасна по дизайну
Советы по настройке полезны только тогда, когда им можно доверять, поэтому агент по умолчанию действует консервативно.
Агент дает объяснения, но не выполняет действия. Он может запускать профилирование только для чтения, когда у него есть правильный контекст, но DDL и DML возвращаются в виде текста для вашего рассмотрения и применения.
Сгенерированные инструкции проверяются на синтаксис и семантические ограничения, такие как требование, чтобы ключ шардирования был подмножеством первичного ключа. Цикл обратной связи замыкает систему. Каждая рекомендация сопровождается кнопкой «палец вверх» или «палец вниз» и необязательным комментарием. Отрицательные отзывы, особенно от инженеров по решениям и поддержке, становятся объектом проверки и могут быть добавлены в набор для оценки в качестве состязательного примера.
Внутренний набор для оценки объединяет синтетические задачи с известными узкими местами, анонимизированные реальные профили, оцененные экспертными ответами, и регрессионный набор, включающий краевые случаи и состязательные входные данные. Состязательные входные данные, такие как запрос на удаление баз данных, должны отклоняться. Этот набор тестов запускается по мере развития агента, поэтому улучшения в одной области не приводят незаметно к регрессии в другой.
Агент настройки производительности делает диагностику экспертного уровня и оптимизацию запросов повторяемыми и доступными на более ранних этапах. Команды поддержки и решений получают стабильный первый проход при расследовании проблем с производительностью, что высвобождает их время для сложных случаев. Клиенты получают знания по настройке SingleStore ближе к месту своей работы. Это позволяет масштабировать экспертный опыт. Ничто из этого не заменяет экспертное суждение в действительно сложных новых сценариях.
Ваши данные никогда не изменяются
Настройка запросов работает на основе реального профиля выполнения, а не оценки, поэтому она запускает ваш запрос в вашем рабочем пространстве для сбора фактического количества строк и времени. Поскольку профилирование выполняет оператор, включая операции записи, такие как UPDATE, DELETE и INSERT ... SELECT, каждый профилируемый запрос оборачивается в явную транзакцию, которая всегда откатывается. Ничто из того, что функция настройки запросов запускает от вашего имени, никогда не фиксируется.
Откат гарантируется, а не выполняется по принципу «как получится»: он инициируется даже тогда, когда профилируемый запрос завершается ошибкой на каком-то этапе, поэтому сбойный или некорректный оператор никогда не сможет оставить открытую транзакцию в вашей сессии. Перед началом профилирования функция настройки запросов также проверяет состояние транзакции сессии и отказывается от запуска, если у вас уже есть незавершенная транзакция; она никогда не вкладывается в вашу работу, не вмешивается в нее и не отменяет то, что вы начали сами. Все выполняется в вашей существующей сессии редактора под вашими собственными учетными данными и разрешениями, поэтому функция настройки запросов не получает дополнительного доступа к вашим данным и ничего в них не записывает.
Расширение охвата оптимизации запросов и открытие предварительной версии
Ближайший фокус — это охват и доверие. Мы расширяем шаблоны настройки, с которыми работает агент, повышаем надежность обоснований для каждой рекомендации и интегрируем валидацию на уровне движка, чтобы больше предложений можно было проверять с помощью собственной логики оптимизатора SingleStore перед тем, как они попадут к вам.
Если вы занимаетесь настройкой запросов в SingleStore, нам нужна ваша помощь. Мы открываем предварительную версию агента настройки производительности и работаем с партнерами по дизайну. Если вы постоянно настраиваете запросы, нуждаетесь в этом агенте в своих рабочих процессах и хотите сотрудничать с нашими инженерными командами, обратитесь в наши группы по работе с клиентами и поддержке, чтобы начать работу. Попробуйте агента, испытайте его на самых сложных запросах и расскажите нам, в чем он не дорабатывает.






