Графический план выполнения запроса 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

См. также

INFOSTART TECH EVENT 2023, 11-13 октября, Санкт-Петербург

Инструментарий разработчика Мобильная разработка DevOps и автоматизация разработки Администрирование СУБД Мероприятия Россия Платные (руб)

XIII конференция по управлению и технологиям автоматизации учета на платформе 1С:Предприятие, которая пройдет в Санкт-Петербурге и соберет 1500 участников из разных регионов России и мира.

4000 руб.

09.12.2022    30068    12    0    

440

Онлайн-интенсив "DevOps для 1С". с 4 сентября по 17 октября 2023 г.

Инструментарий разработчика DevOps и автоматизация разработки DevOps для 1С Платные (руб)

Данный онлайн-курс (интенсив) предусматривает изучение процессов, инструментов и методик DevOps, их применение при разработке на платформе 1С. 

18000 руб.

20.06.2023    9926    40    2    

122

SALE! %

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

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

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

12000 10000 руб.

02.09.2020    93794    478    380    

532

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    170311    1052    0    

793

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

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

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.

4200 руб.

16.04.2021    12571    3    9    

9

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

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

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

5000 руб.

07.02.2018    96539    234    97    

286

Менеджер конфигураций 1С

Инструментарий разработчика Платные (руб)

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

1439 руб.

21.02.2023    5283    2    33    

14

Программное формирование существующих печатных форм

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

Получение списка печатных форм, формирование выбранной печатной формы и сохранение ее в файл.

1 стартмани

17.12.2021    14133    39    RocKeR_13    5    

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

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

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

Не первый раз слышу в такой формулировке и каждый раз улыбаюсь. Вы, безусловно, молодцы, но формулировка улыбает.
Типа 1С всей фирмой пыталась-пыталась, пыталась-пыталась и таки не смогла - "фух, не могу больше, не выходит каменный цветок. Такое только команде самого Гилева под силу".
JohnyDeath; ivv1970; TreeDogNight; RailMen; Bukaska; +5 Ответить
18. Gilev.Vyacheslav 1906 28.06.17 09:55 Сейчас в теме
(16) если не следили за развитием ЦУПа, то иронию понимаю, а вот если следили... )))
12. zarucheisky 27.06.17 00:16 Сейчас в теме
(10) Ваня :)
Это кому там понадобилось-то?
"Неужели в наших котлетах будет мясо?" (с)
Эх.. Ромы на вас нет :))))
15. berezdetsky 617 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 1438 28.06.17 11:07 Сейчас в теме
(7) Иван, хорошая работа, спасибо!

ИМХО цитату хорошо бы включить в описание публикации
"Моя обработка не использует техжурнал и, как следствие, не приводит к дополнительной нагрузке и не накладывает требований по наличию прав доступа к хосту сервера приложений. Я достаю планы выполнения непосредственно из кеша планов SQL Server. "
2. unichkin 1547 25.06.17 00:20 Сейчас в теме
Есть еще бесплатная утилита SQL Sentry Plan Explorer для чтения планов. Если скрестить ее с этой консолькой, то и студия на клиенте не нужна...
4. berezdetsky 617 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 485 25.06.17 12:59 Сейчас в теме
Возможность обойтись без тех-журнала - несомненный плюс.
17. zekrus 152 28.06.17 08:21 Сейчас в теме
Доброе утро!
Решение востребованное без условно.
Меня терзают смутные сомнения, вы
не из компании "Раздолье" случайно?
С уважением
19. zarucheisky 28.06.17 10:56 Сейчас в теме
(17) Нет, если не ошибаюсь, Иван трудится в иной компании :)
21. berezdetsky 617 28.06.17 12:55 Сейчас в теме
(17) Нет.

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


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

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

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

По сопоставлению - для пакета порядок запросов в пределах секунды иногда нарушается. При этом сопоставление пока не работает.
Если не работает для одного запроса - опять же давай тестовый пример.
27. sevushka 300 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 617 25.07.17 23:31 Сейчас в теме
(27) Выложил исправленную версию с улучшенным сопоставлятором.

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

Сопоставление идеальное не получится, т.к. СхемаЗапроса разбирает не все секции запроса, а писать свой парсер - проще профайлер запустить.. Можно пойти в другую сторону - показывать в SSMS в плане выполнения имена метаданных 1С.
23. sevushka 300 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 300 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 300 19.07.17 09:07 Сейчас в теме
Ну и на закуску
Убираю в запросе строчку and qp.dbid = db_id(), чтобы были все запросы.

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

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

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



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