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

05.09.17

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Просмотр графического отображения плана выполнения для запросов 1С
.epf 18,50Kb ver:1.03
73 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Построение плана выполнения для запросов 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

См. также

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

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

15500 руб.

02.09.2020    213451    1170    413    

1050

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    40764    223    115    

212

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

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

16000 руб.

10.11.2023    18862    76    39    

92

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    26695    67    30    

96

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9500 руб.

17.05.2024    37756    134    55    

176

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

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше.<br/> Далее в публикации:<br/> MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    4274    8    10    

15

Инструментарий разработчика 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    3719    7    0    

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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



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