RDT1C icon indicating copy to clipboard operation
RDT1C copied to clipboard

Консоль запросов. Интерактивный режим отладки. InterDataProcessorCommunications

Open PerlAmutor opened this issue 2 years ago • 5 comments

Предлагаю сделать следующую хитрую доработку. Предположим у нас есть задача отладить запрос с менеджером временных таблиц, где больше 100 таблиц размером свыше 500к строк в некоторых из них. Функцией От() такой контекст выгружается как 20Гигабайтовый .deb файл. Который потом в консоль запросов грузится около часа-двух. В некоторых случаях сразу после этого происходит попытка пересоздания менеджера временных таблиц (или их очистка), такое требование у ИР...

Идея заключается в следующем. Добавляем в функцию От() флаг "интерактивного режима" и передаем в неё Запрос или МенеджерВременныхТаблиц. На стороне сеанса ИР в консоли запроса делаем команду - "Подключиться к отладчику", который выставляет "параметр отладки", например через "Общее хранилище системных настроек". На точке останова в коде вызываем функцию От(), которая в "интерактивном режиме" запускает бесконечный цикл (тут нужно подумать о Паузе), если существует сеанс с включенной "отладкой запроса". В этом цикле через какой-нибудь общедоступный вариант (файл в сетевой папке, или то же общее хранилище системных настроек (клиент/сервер)) коммуникации, функция От() входит в "режим сервера", который может отправлять или принимать команды. На стороне сеанса ИР после "удачного соединения с отладчиком запроса" в Консоли запроса появляется текст запроса, список временных таблиц и параметры. Становится доступной кнопка "Выполнить". При нажатии на которую отправляется "команда" в функцию От() на выполнение запроса - передается текст запроса (если изменялся) и параметры (если менялись), после чего запрос выполняется непосредственно в функции От(), а результат передается обратно в "консоль запросов" и выводится. Со стороны пользователя это будет выглядеть как обычная работа с запросом в консоли запросов, хотя весь контекст при этом будет находится совершенно в другом сеансе.

Это позволит отлаживать тяжелые запросы содержащих временные таблицы в МВТ с сохранением их индексов и сократит время ожидания на загрузку .deb файлов.

Основная проблема, которую я пока вижу - организация "межсеансового" взаимодействия и вероятные проблемы на передачу результатов запроса.

PerlAmutor avatar Oct 12 '22 17:10 PerlAmutor

сразу после этого происходит попытка пересоздания менеджера временных таблиц

Этот период настраивается в консоли запросов. Например можно установить 6ч.

Затея мне кажется обречена на неуспех, т.к. штатных механизмов в платформе для ее решения точно нет. К тому же проблема довольно редкая. Поэтому заниматься ею я не буду до предоставления доказательства концепции (рабочего прототипа).

Однако можно подумать над оптимизацией существующего функционала. Для этого желательно предоставить

  1. Снимок, где все таблицы будут обрезаны до 1-10 строк.
  2. Замер производительности отладчика операции открытия в консоли запросов снимка с обрезкой до 100 строк.
  3. Техническую информацию

tormozit avatar Oct 12 '22 18:10 tormozit

Создал задачу на небольшую оптимизацию https://www.hostedredmine.com/issues/951952

tormozit avatar Oct 12 '22 18:10 tormozit

Еще можно попробовать вручную не все временные таблицы сохранять, а сохранять запросы, их создающие. Затем собирать их в один файл консоли запросов. Затем выполнять эти запросы. Затем уже выполнять главный запрос.

tormozit avatar Oct 12 '22 20:10 tormozit

Оптимизация выполнена в 6.49

tormozit avatar Oct 16 '22 16:10 tormozit

Мне было бы полезно узнать, насколько ускорилось выполнение твоей операции.

tormozit avatar Oct 18 '22 21:10 tormozit