Статья #8

Анализ и оптимизация запросов в 1С с помощью AI

Проблема производительности

Медленные запросы — частая причина проблем с производительностью 1С:
- Отсутствие индексов
- Избыточные соединения
- Неоптимальные условия
- Использование виртуальных таблиц без необходимости

AI-анализ запросов

1. Автоматическое выявление проблем

"Проанализируй этот запрос и найди проблемы производительности:

ВЫБРАТЬ
    Документы.Номер,
    (ВЫБРАТЬ СУММА(ДвиженияТоваров.Количество)
     ИЗ РегистрНакопления.ДвиженияТоваров
     ГДЕ ДвиженияТоваров.Регистратор = Документы.Ссылка) КАК Количество
ИЗ
    Документ.РеализацияТоваров КАК Документы

Предложи оптимизированную версию."

Ответ Claude Code:

Проблемы:
1. Коррелированный подзапрос выполняется для каждой строки
2. Отсутствует индекс по полю Регистратор
3. Можно использовать JOIN вместо подзапроса

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

ВЫБРАТЬ
    Документы.Номер,
    ЕСТЬNULL(ДвиженияТоваров.КоличествоОборот, 0) КАК Количество
ИЗ
    Документ.РеализацияТоваров КАК Документы
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДвиженияТоваров.Обороты(,,Регистратор,) КАК ДвиженияТоваров
        ПО Документы.Ссылка = ДвиженияТоваров.Регистратор

2. MCP-сервер для мониторинга запросов

// query-performance-mcp.js
class QueryPerformanceServer {
  async analyzeSlowQueries() {
    // Получение медленных запросов из ТЖ
    const slowQueries = await this.getSlowQueries();

    // AI анализ каждого запроса
    for (const query of slowQueries) {
      const analysis = await claude.analyzeQuery({
        query: query.text,
        executionTime: query.duration,
        context: query.context
      });

      await this.suggestOptimizations(analysis);
    }
  }
}

3. Генерация индексов

"Проанализируй эти запросы и предложи индексы для оптимизации:
[список запросов из ТЖ]

Учти, что избыточное индексирование тоже вредно."

4. Рефакторинг сложных запросов

"Разбей этот сложный запрос на несколько простых временных таблиц
для улучшения читаемости и возможной оптимизации планировщиком."

5. Автоматические отчеты

"Создай еженедельный отчет по производительности запросов:
- Топ-10 самых медленных
- Тренды изменения производительности
- Рекомендации по оптимизации"

Практический пример

// До оптимизации: 45 секунд
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Товары.Наименование
|ИЗ
|    Справочник.Номенклатура КАК Товары
|ГДЕ
|    Товары.Ссылка В
|        (ВЫБРАТЬ РАЗЛИЧНЫЕ
|            Продажи.Номенклатура
|        ИЗ
|            Документ.РеализацияТоваров.Товары КАК Продажи
|        ГДЕ
|            Продажи.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон)";

// После оптимизации AI: 2 секунды
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|    Товары.Наименование
|ИЗ
|    Документ.РеализацияТоваров КАК Реализация
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров.Товары КАК РеализацияТовары
|        ПО Реализация.Ссылка = РеализацияТовары.Ссылка
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
|        ПО РеализацияТовары.Номенклатура = Товары.Ссылка
|ГДЕ
|    Реализация.Дата МЕЖДУ &ДатаНач И &ДатаКон";

Результаты

  • Ускорение запросов: в среднем 5-10x
  • Снижение нагрузки на СУБД: 30-50%
  • Улучшение user experience

Интересно узнать больше?

Посмотрите другие статьи о том, как AI ускоряет разработку 1С

Перейти к блогу