Графический план выполнения запроса 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С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 9600 руб.

02.09.2020    101380    560    385    

604

Онлайн-интенсив "DevOps для 1С". с 5 февраля по 19 марта 2024 г.

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

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

25000 руб.

20.06.2023    11430    3    2    

142

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    172798    1076    0    

813

SALE! 25%

Infostart PrintWizard

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

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

18000 14400 руб.

06.10.2023    3440    3    0    

17

SALE! 20%

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

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

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

10000 8000 руб.

10.11.2023    1347    3    1    

20

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

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

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

5000 руб.

07.02.2018    97531    236    97    

287

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

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

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

2400 руб.

24.09.2019    22344    14    15    

27

SALE! 10%

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

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

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

4200 руб.

16.04.2021    13804    5    9    

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

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

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

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

ИМХО цитату хорошо бы включить в описание публикации
"Моя обработка не использует техжурнал и, как следствие, не приводит к дополнительной нагрузке и не накладывает требований по наличию прав доступа к хосту сервера приложений. Я достаю планы выполнения непосредственно из кеша планов SQL Server. "
2. unichkin 1552 25.06.17 00:20 Сейчас в теме
Есть еще бесплатная утилита SQL Sentry Plan Explorer для чтения планов. Если скрестить ее с этой консолькой, то и студия на клиенте не нужна...
4. berezdetsky 619 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 491 25.06.17 12:59 Сейчас в теме
Возможность обойтись без тех-журнала - несомненный плюс.
17. zekrus 151 28.06.17 08:21 Сейчас в теме
Доброе утро!
Решение востребованное без условно.
Меня терзают смутные сомнения, вы
не из компании "Раздолье" случайно?
С уважением
19. zarucheisky 28.06.17 10:56 Сейчас в теме
(17) Нет, если не ошибаюсь, Иван трудится в иной компании :)
21. berezdetsky 619 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 619 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 619 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 7074 18.11.19 09:40 Сейчас в теме
Аналогичный инструмент "Статистика по запросам MSSQL" есть в подсистеме Инструменты разработчика . Он также использует процедурный кэш MSSQL и не создает какой либо нагрузки на работу серверов. В этой же подсистеме в инструменте "Консоль запросов" на странице "Запрос результата" с помощью кнопки "Статистика MSSQL" можно посмотреть статистику по последнему выполненному запросу.
Прикрепленные файлы:
e9504100606; Drivingblind; triviumfan; t278; +4 Ответить
Оставьте свое сообщение