gifts2017

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

Опубликовал Евгений Мукомело (ixilimuse) в раздел Программирование - Инструментарий

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

 

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

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

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

Скачать файлы

Наименование Файл Версия Размер
КонсольЗапросов 16
.epf 45,31Kb
29.06.16
16
.epf 1.0 45,31Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Владимир Чаклин (vec435) 30.06.16 09:41
интересно, в каком модуле работает конструкция "Выбрать ... Из [File]"
2. Евгений Мукомело (ixilimuse) 30.06.16 11:04
(1) vec435, Добрый день, если я правильно понял Ваш вопрос, то все прописано в модуле формы консоли.
Перед непосредственным выполнением запроса, я просто ищу в тексте данную конструкцию, разбираю её на 2 компонента: Параметр, ПутьКФайлу.
Затем подменяю данную конструкцию на параметр, в который далее помещаю считанную из файла таблицу значений. И после уже идет стандартный код выполнения запроса, описанный до моего вмешательства))

p.s. Ссори, в публикации не рассмотрел детально данный нюанс.
Данная строка состоит из двух частей, разделяется строкой: "<+>"
То что стоит до разделителя - это то как будет называться параметр, в который будет помещена таблица значений. И из которого собственно будет производиться выборка.
А то что стоит после разделителя - путь к файлу, который был ранее сохранен из этой же консоли (либо с помощью любой своей обработки). Файл должен содержать таблицу значений в формате 1С.
3. Сергей (necropunk) 30.06.16 11:11
(2) ixilimuse, с файлом идея интересная. А чем не устроила консоль из "Инструментов Разработчика", например?
4. Евгений Мукомело (ixilimuse) 30.06.16 11:40
(3) necropunk, инструменты разработчика мне очень нравятся и я очень уважаю труды создателя :)
Но так сложилось исторически, мою гряду запросов я начал сопровождать в старой, стандартной консоли ещё до того как узнал про "ИР".
Качал ИР, немного смотрел - классно там все. Но в силу привычки и уже настроенного sel файла так и не перешёл тогда.

В день когда публиковал этот пост, в очередной раз скачал свежую версию ИР. Хочу ещё раз пощупать. А то уж чувствую пропускаю много приятного мимо))
5. Сергей (necropunk) 30.06.16 12:54
(4) ixilimuse, я сам качал, щупал, никак не мог приноровиться, а потом столкнулся с базой, куда она интегрирована - прелесть просто, теперь без нее - никуда.
ixilimuse; +1 Ответить
6. Сергей Старых (tormozit) 01.07.16 07:24
Продолжаешь изобретать велосипеды? =)
zqzq; myjob1c; DrAku1a; Il; h00k; +5 Ответить 1
7. Евгений Мукомело (ixilimuse) 01.07.16 08:23
(6) tormozit, иногда случается, увы :D
Даже оправдываться не буду))))
8. Александр Крынецкий (echo77) 04.07.16 05:43
Сравнить результаты выполнения запросов проще используя механизм сравнения файлов и сохранения результата в таблицу, или текстовый файл. Правда для этого желательно результаты отсортировать единым образом.