Графический план выполнения запроса 1С

05.09.17

Разработка - Инструментарий разработчика

Публикация размещена исключительно в образовательных целях и подходит только для платформы версии 8.28.3.
Использует недокументированные средства доступа к базе данных 1С. Прямое обращение к СУБД нарушает лицензионное соглашение,
может изменить поведение платформы, привести к разрушению базы данных, скомпрометировать данные,
а также привести к отказу в официальной поддержке Фирмы 1С.
Просмотр графического отображения плана выполнения для запросов 1С. Для информационных баз на MS SQL Server.

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

Наименование Файл Версия Размер
Просмотр графического отображения плана выполнения для запросов 1С
.epf 18,50Kb
72
.epf 1.03 18,50Kb 72 Скачать

Построение плана выполнения для запросов 1С

Описание

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

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

v1.03.

Требования

Клиент-серверная ИБ на MS SQL Sever 2005 или выше. Управляемые формы.

Платформа 8.2 или 8.3.

У пользователя SQL Server - право "VIEW SERVER STATE".

У пользователя 1С - право "Интерактивное открытие внешних обработок".

Изменения в метаданных не требуются.

Использование

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

Расшифровка строки (по двойному щелчку мышки) позволяет открыть план выполнения в виде графического отображения или как файл в формате XML.

Для графического отображения плана выполнения требуется установленная среда SQL Server Management Studio.

план выполнения запрос sql server

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122159    670    389    

714

SALE! 25%

Infostart PrintWizard

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

18000 15300 руб.

06.10.2023    7293    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 8000 руб.

10.11.2023    3537    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2520 руб.

14.01.2013    177749    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99347    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18113    6    8    

39

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28110    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23602    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 24.06.17 23:28
Сообщение было скрыто модератором.
...
3. пользователь 25.06.17 01:14
Сообщение было скрыто модератором.
...
5. пользователь 25.06.17 10:49
Сообщение было скрыто модератором.
...
6. Gilev.Vyacheslav 1910 25.06.17 11:31 Сейчас в теме
(1)
(5)Тогда так http://www.gilev.ru/#ConsoleGilevRu учетка Пользователь без пароля
7. berezdetsky 620 25.06.17 12:08 Сейчас в теме
(6) Моя обработка не использует техжурнал и, как следствие, не приводит к дополнительной нагрузке и не накладывает требований по наличию прав доступа к хосту сервера приложений. Я достаю планы выполнения непосредственно из кеша планов SQL Server.

Ваш подход в целом точнее, но затратнее.
9. Gilev.Vyacheslav 1910 25.06.17 14:54 Сейчас в теме
(7) логирование в ТЖ одной сессии создает настолько мизерные затраты, что говорить что это "более затратное" самообман
10. berezdetsky 620 25.06.17 22:08 Сейчас в теме
(9) Я говорю о затратах не столько технических, сколько организационных. Для ларьков эти затраты действительно мизерные.
11. Gilev.Vyacheslav 1910 26.06.17 23:13 Сейчас в теме
(10) а что по вашему лучше, логин с авторизацией на субд или без авторизации в какую либо базу данных на сервере 1С?

это если обсуждать "запятые", главное что в нашей обработке - двойной эврестический анализ плана запроса, т.е. не просто отображение, а переработка плана анализом и отображение проблем с рекомендациями как исправить, даже фирма 1С не смогла ничего подобного написать
13. zarucheisky 27.06.17 00:17 Сейчас в теме
16. herfis 498 27.06.17 15:05 Сейчас в теме
(11)
даже фирма 1С не смогла ничего подобного написать

Не первый раз слышу в такой формулировке и каждый раз улыбаюсь. Вы, безусловно, молодцы, но формулировка улыбает.
Типа 1С всей фирмой пыталась-пыталась, пыталась-пыталась и таки не смогла - "фух, не могу больше, не выходит каменный цветок. Такое только команде самого Гилева под силу".
JohnyDeath; ivv1970; TreeDogNight; RailMen; Bukaska; +5 Ответить
18. Gilev.Vyacheslav 1910 28.06.17 09:55 Сейчас в теме
(16) если не следили за развитием ЦУПа, то иронию понимаю, а вот если следили... )))
12. zarucheisky 27.06.17 00:16 Сейчас в теме
(10) Ваня :)
Это кому там понадобилось-то?
"Неужели в наших котлетах будет мясо?" (с)
Эх.. Ромы на вас нет :))))
15. berezdetsky 620 27.06.17 11:18 Сейчас в теме
(12) Привет! Мне и понадобилось. :) Как говорится, делал как для себя. :)
14. zarucheisky 27.06.17 00:25 Сейчас в теме
(10) ИМХО, ежели MS SSMS перекрыт вместе с MS VS, то можно воспользоваться
http://www.atlantis-interactive.co.uk/api/applicationdownload.ashx?key=ASE
20. artbear 1448 28.06.17 11:07 Сейчас в теме
(7) Иван, хорошая работа, спасибо!

ИМХО цитату хорошо бы включить в описание публикации
"Моя обработка не использует техжурнал и, как следствие, не приводит к дополнительной нагрузке и не накладывает требований по наличию прав доступа к хосту сервера приложений. Я достаю планы выполнения непосредственно из кеша планов SQL Server. "
2. unichkin 1559 25.06.17 00:20 Сейчас в теме
Есть еще бесплатная утилита SQL Sentry Plan Explorer для чтения планов. Если скрестить ее с этой консолькой, то и студия на клиенте не нужна...
4. berezdetsky 620 25.06.17 10:02 Сейчас в теме
(2) SSMS - бесплатный инструмент от вендора СУБД. Более функциональный, чем Plan Explorer.
30. kirinalex 15 18.11.19 08:12 Сейчас в теме
(4)
SSMS
в чем именно SQL Server Management Studio более функциональный, чем SentryOne Plan Explorer?
8. herfis 498 25.06.17 12:59 Сейчас в теме
Возможность обойтись без тех-журнала - несомненный плюс.
17. zekrus 151 28.06.17 08:21 Сейчас в теме
Доброе утро!
Решение востребованное без условно.
Меня терзают смутные сомнения, вы
не из компании "Раздолье" случайно?
С уважением
19. zarucheisky 28.06.17 10:56 Сейчас в теме
(17) Нет, если не ошибаюсь, Иван трудится в иной компании :)
21. berezdetsky 620 28.06.17 12:55 Сейчас в теме
(17) Нет.

(20) :) Ok, добавлю в описание.
22. sevushka 302 19.07.17 06:34 Сейчас в теме
Мелкие нюансы, для будущих поколений :)
ProgId = "V" + XMLСтрока(ВерсияПриложения.Основная) + XMLСтрока(ВерсияПриложения.Младшая) + ".COMConnector";
Основная а не старшая. По крайней мере для 8.3.8


If Cluster.HostName = HostName Then
надо приводить к одному регистру, иначе не срабатывает (в строке подключения стоит uppercase например, а в Cluster.HostName lowercase)
26. berezdetsky 620 24.07.17 23:29 Сейчас в теме
(22) .. (25) Спасибо за комментарии. Основные косяки исправил, но пока не выкладывал.

Про dsn не понял. У меня named pipes везде выключены. По tcp/ip и shared memory подключается без проблем.

qp.dbid = null на 1Сных запросах не видел. Покажи пример запроса и версии 1С и SQL Server, пожалуйста.

По сопоставлению - для пакета порядок запросов в пределах секунды иногда нарушается. При этом сопоставление пока не работает.
Если не работает для одного запроса - опять же давай тестовый пример.
27. sevushka 302 25.07.17 07:24 Сейчас в теме
(26)
По пунктам. Копать наверное в сторону 1С, но куда именно пока не понимаю.
Microsoft SQL Server Management Studio 10.50.6220.0
Компоненты доступа к данным (MDAC) 6.3.9600.17415
ОС на клиенте - не принципиально, вин 7,10, 2012...

1с - 8.3.8.1964,
если СтрокаПодключения = "Provider=SQLNCLI10;Server=" + ИмяСервера + ";Database=" + ИмяБазыДанных + ";"
Не работает, выдает что не может подключиться через named pipes
если СтрокаПодключения = "Provider=SQLNCLI10;Server=tcp:" + ИмяСервера + ";Database=" + ИмяБазыДанных + ";"
Так работает.


8.3.10.2466.
Работают оба варианта, и оба лезут через tcp.

Пример выше - это два разных компа, может и не в 1с проблема. Особо разбираться некогда.


qp.dbid = null - не понимаю что показывать. там много разных запросов, где дбид нулл.


по сопоставлению. Запросы типа

выбрать т1.ссылка из документ.реализациятоваровуслуг как т1 где т1.ссылка=&оно


отрабатывают и все находят и сопоставляют, но толку то мне от них?.
Запросы посложнее, типа
ВЫБРАТЬ
	Т1.ОснованиеПлатежа,
	Т1.Сумма,
	ВЫБОР
		КОГДА 1 В
				(ВЫБРАТЬ ПЕРВЫЕ 1
					1
				ИЗ
					Справочник.ЕПБ_ДопИнформация КАК ДИ
				ГДЕ
					ДИ.Документ = Т1.ОснованиеПлатежа
					И ДИ.КодСобытия = 2
					И ДИ.ПометкаУдаления = ЛОЖЬ)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК БылаЧастичнаяОплата
ИЗ
	Документ.ПриходныйКассовыйОрдер.РасшифровкаПлатежа КАК Т1
ГДЕ
	Т1.Ссылка = &ДокПКО
Показать



со включенной галочкой "показать все доступные запросы" отлавливаются,
sql


Но не сопоставляются, т.е. если эту галочку убрать, то таблица снизу пустая.


И таких запросов тоже много, и не пакетных, и пакетных. Просто привел пример для самого простого из таких.
28. berezdetsky 620 25.07.17 23:31 Сейчас в теме
(27) Выложил исправленную версию с улучшенным сопоставлятором.

По named pipes возьму таймаут - поиграюсь с разными версиями.

Сопоставление идеальное не получится, т.к. СхемаЗапроса разбирает не все секции запроса, а писать свой парсер - проще профайлер запустить.. Можно пойти в другую сторону - показывать в SSMS в плане выполнения имена метаданных 1С.
23. sevushka 302 19.07.17 07:26 Сейчас в теме
Продолжение (не могу исправлять предыдущее сообщение)
СтрокаПодключения = "Provider=SQLNCLI11;Server=" + ИмяСервера + ";Database=" + ИмяБазыДанных + ";";
не у всех есть 11, кто-то и на 10 сидит (SQL - 2008R2).

Далее. Еще надо настраивать dsn, по умолчанию он лезет через named pipes, а на некоторых серверах (например моем) они выключены, надо использовать tcp/ip (или менять строку подключения, или включать каналы на сервере).

Ну и в итоге - не сработало. Подключилось (причем пользователя давал и датабейз овнера, и sa, и domain authorization - разницы нет). Запрос выполняется, колонки таблицы тз в ВыполнитьЗапросSQL заполняются, но запрос пустой.
Если Не Recordset.EOF Тогда <---- здесь истина, т.е. данных нет. Время на клиенте и сервере совпадает.

Такое впечатление, что программе надо SQL 2012 или новее, о чем надо сообщать заранее. Ну или какие-то настройки на сервере дополнительные нужны.
24. sevushka 302 19.07.17 07:55 Сейчас в теме
Автору на заметку
Добавляю в текст запроса
, qp.query_plan AS ПланВыполнения
, qp.dbid as ИДБазы <-------- вот эту строчку. И у меня, для многих баз, qp.dbid = null.
Соответственно, в условии
and qp.dbid = db_id()

null не равен 10 (id моей базы)
25. sevushka 302 19.07.17 09:07 Сейчас в теме
Ну и на закуску
Убираю в запросе строчку and qp.dbid = db_id(), чтобы были все запросы.

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

а еще в таблице результатов при даблклике {(2,62)}: Переменная не определена (ЭтотОбъект)
Новый ОписаниеОповещения("ОповещениеОВыбореРежимаОткрытия", <<?>>ЭтотОбъект, Расшифровка),

т.е. для конфигураций, которые еще работают в режиме совместимости, это тоже не работает.



Обработку скачивать не рекомендую.
29. user617199_pablonikolaev 26.07.17 09:36 Сейчас в теме
31. tormozit 7136 18.11.19 09:40 Сейчас в теме
Аналогичный инструмент "Статистика по запросам MSSQL" есть в подсистеме Инструменты разработчика . Он также использует процедурный кэш MSSQL и не создает какой либо нагрузки на работу серверов. В этой же подсистеме в инструменте "Консоль запросов" на странице "Запрос результата" с помощью кнопки "Статистика MSSQL" можно посмотреть статистику по последнему выполненному запросу.
Прикрепленные файлы:
e9504100606; Drivingblind; triviumfan; t278; +4 Ответить
Оставьте свое сообщение