Консоль запросов для больших баз данных (БД)





Самая обычная консоль запросов для толстого клиента, но обладающая некоторыми специальными возможностями для отладки и сверки сложных запросов, которые выбирают большие объёмы данных.
А именно:
-Сохранение результата запроса в файл;
-Возможность выборки из сохраненного файла;
-Замеры времени выполнения отдельных временных таблиц в запросе;
-Подготовка текста запроса к помещению в модуль;
-Проверка запроса на не уничтоженные временные таблицы;

В последнее время очень регулярно приходится писатьпереписыватьдописывать сложные запросы, содержащие в себе море расчётов. Но хуже всего, что данные запросы вытягивают большие объемы данных, и время выполнения порой затягивается на минуты и десятки минут. И тут я оснастил свою консоль инструментами, которые помогают мне с комфортом решать ряд задач. 

1. Например, у меня есть какой-то отчет (запрос), который мне нужно оптимизировать. Я пишу свой, новый запрос. Который работает быстрее. Но мне надо убедиться, что результат идентично правильный. Что делать?

Сначала я беру старый запрос и выгружаю его результат в файл.

А затем то же самое делаю с новым запросом. 

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

 Пример выборки из файлов с ТЗ

 

2. Встречаются мне такие запросы, в которых очень много выборок во временные таблицы, ввиду наличия сложных расчётов и большого количества полей в конечной таблице. Да и сам такие запросы порой вынужден писать.

Когда объем данных вырастает на порядки, такие запросы иногда начинают тормозить.

Чтобы понять, в какой именно части запроса «слабое звено», — запускаем замер. Желательно ограничить в разумных пределах результат выборки, чтобы не ждать по полдня (смотря, конечно, насколько долго выполняется запрос). И получаем в результате время выполнения каждой временной таблицы.

Замер времени выполнения временных таблиц запроса 

3. Подготовка текста запроса к помещению в модуль.

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

Подготовка текста запроса к помещению в модуль

 

4. В тех же самых длинных запросах, которые растягиваются на тысячи строк, не всегда можно с легкостью визуально отследить — все ли временные таблицы своевременно уничтожаются.

Для этих целей я также сделал кнопочку, которая выдаст Вам список временных таблиц, которые не были уничтожены. Это сэкономит Ваше время и сократит размеры tempdb на SQL сервере. (Для тех, кому невыгодно из-за производительности использовать менеджер временных таблиц).

Проверка на наличие не уничтоженных временных таблиц

8 Comments

  1. vec435

    интересно, в каком модуле работает конструкция «Выбрать … Из [File]»

    Reply
  2. ixilimuse

    (1) vec435, Добрый день, если я правильно понял Ваш вопрос, то все прописано в модуле формы консоли.

    Перед непосредственным выполнением запроса, я просто ищу в тексте данную конструкцию, разбираю её на 2 компонента: Параметр, ПутьКФайлу.

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

    p.s. Ссори, в публикации не рассмотрел детально данный нюанс.

    Данная строка состоит из двух частей, разделяется строкой: «<+>»

    То что стоит до разделителя — это то как будет называться параметр, в который будет помещена таблица значений. И из которого собственно будет производиться выборка.

    А то что стоит после разделителя — путь к файлу, который был ранее сохранен из этой же консоли (либо с помощью любой своей обработки). Файл должен содержать таблицу значений в формате 1С.

    Reply
  3. necropunk

    (2) с файлом идея интересная. А чем не устроила консоль из «Инструментов Разработчика», например?

    Reply
  4. ixilimuse

    (3) necropunk, инструменты разработчика мне очень нравятся и я очень уважаю труды создателя 🙂

    Но так сложилось исторически, мою гряду запросов я начал сопровождать в старой, стандартной консоли ещё до того как узнал про «ИР».

    Качал ИР, немного смотрел — классно там все. Но в силу привычки и уже настроенного sel файла так и не перешёл тогда.

    В день когда публиковал этот пост, в очередной раз скачал свежую версию ИР. Хочу ещё раз пощупать. А то уж чувствую пропускаю много приятного мимо))

    Reply
  5. necropunk

    (4) я сам качал, щупал, никак не мог приноровиться, а потом столкнулся с базой, куда она интегрирована — прелесть просто, теперь без нее — никуда.

    Reply
  6. tormozit

    Продолжаешь изобретать велосипеды? =)

    Reply
  7. ixilimuse

    (6) tormozit, иногда случается, увы 😀

    Даже оправдываться не буду))))

    Reply
  8. echo77

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

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *