Как получить план запроса 1с в sql

Обновлено: 07.07.2024

Инструмент "Транслятор запросов 1С в SQL" предназначен для быстрого и удобного получения SQL-запросов, которые генерируются платформой 1С в различных ситуациях: либо выполнение конкретного запроса на языке 1С, либо запуск кода встроенного языка, который также может формировать SQL-запросы к базе данных. Кроме этого, по полученным запросам можно посмотреть дополнительную информацию для диагностики их работы (затраченные ресурсы, планы запроса и другое). Ниже на анимации Вы можете видеть длинный пример работы транслятора. О каждой функции инструмента ниже будет рассказано подробнее.

Основными возможностями инструмента являются:

  • Перевод запроса 1С в SQL с учетом всех особенностей работы платформы. Например, если выполнять запрос к виртуальной таблице "Движения с субконто", то фактически будет выполнен не 1 запрос, а целая серия вспомогательных запросов. Инструмент это покажет. Также будут собраны все связанные служебные запросы (получение информации о метаданных, создание и очистка временных таблиц и др.).
  • Перевод запросов платформы 1С в SQL при выполнении конструкций кода встроенного языка. Вам когда-нибудь было интересно как работает функция "НайтиПоНаименованию(. )"? С помощью этой обработки Вы найдете ответы на все вопросы.
  • Получение информации о затраченных ресурсах каждого отловленного запроса. Для каждого запроса будут получены показатели использования CPU, логических и физических чтений, операций записи и количество возвращенных записей в запросе.
  • Возможность посмотреть план для каждого собранного запроса (если такой план есть на стороне СУБД). Вы можете сразу открыть его в SQL Server Management Studio или же сохранить его на диск в формате "*.sqlplan".
  • Инструмент может быть использован как на тестовом , так и на рабочем окружении . Сам сбор информации о запросах создает минимальную нагрузку на сервер. Подробнее о принципах работы инструмента Вы можете прочитать ниже.
  • Вывод служебной информации об анализируемой базе данных и СУБД.


Требования к работе:

  • Платформа 1С версии 8.3.5 и выше.
  • СУБД Microsoft SQL Server 2008 и выше. 2008 редакция поддерживается в ограниченном режиме в части получения данных расширенных событий по запросам, а также в скорости получения данных.
  • Возможность подключения через ADO c сервера 1С к экземпляру SQL Server с правами "sysadmin".
  • Только управляемые формы. Для использования в обычном приложении используйте известные обходные пути.

Из-за особенностей работы Extended Events для редакции SQL Server 2008 инструмент имеет следующие ограничения:

  • Не все данные по запросам могут быть получены (количество чтений, CPU и др.).
  • Из-за внутренних особенностей работы сессий Extended Events для достоверного получения данных расширенных событий приходиться делать паузку в 30 секунд перед получением данных из сессий.
  • Из-за ограничений условий для отбираемых событий в некоторых случаях может быть выполнена обработка большого массива запросов, чтобы исключить излишние данные при выводе.

В остальном больших отличий пока не было найдено.

Таким образом, данная разработка может оказаться отличным инструментом для диагностики работы запросов и кода встроенного языка в части взаимодействия с СУБД, а также для изучения работы платформы 1С с СУБД. Тем более если диагностику нужно выполнить на рабочем окружении!

Принцип работы


Код обработки открыт и Вы можете самостоятельно его изучить. Сейчас же опишем общий принцип работы инструмента:

  1. Начинаем серверный вызов, в контексте которого и будет выполняться сбор информации.
  2. Определяем идентификатор соединения с СУБД, которое выделено платформой 1С из пула соединений для текущего сеанса (серверного вызова). Т.к. платформа использует пул соединений, то для гарантии того, что это соединение не будет использоваться другими сеансами 1С выполняется несколько трюков с временными таблицами.
  3. После того как мы определили идентификатор соединения, запускаем сессию Extended Events для сбора данных о выполняемых запросах с фильтром по базе данных и по соединению.
  4. Выполняем запросы или конструкции кода встроенного языка для анализа.
  5. Обрабатываем собранные данные и завершаем сессии сбора данных.
  6. Очистка от служебных данных.

Профит! Вся информация получена. За счет "точечной" фильтрации по соединению мы можем собирать данные в многопользовательской среде, т.к. такие фильтры и подход сбора информации практически исключает попадание лишних запросов других сеансов в собранные данные.

Да, для сбора информации НЕ используется технологический журнал. Все базируется на расширенных событиях SQL Server, которые позволяют достаточно эффективно собирать данные для анализа, не мешая основной работе приложения. Об этом мы уже говорили в статье "Мониторинг SQL Server с помощью Extended Events (и не только) для 1С. Как держать руку на пульсе?". Единственный минус такого подхода - то, что запрос / конструкции кода все же выполняются, поэтому если в них будет запущено что-то тяжелое, то именно они и могут повлиять на производительность и стабильность работы. Это стоит учитывать, если Вы пользуетесь инструментом на рабочем окружении.

Примеры использования

Рассмотрим несколько небольших кейсов использования инструмента.

Начало работы

Первое, что нужно сделать для продолжения работы - это настроить подключение к базе данных с правами "sysadmin". Если этого не сделать, то продолжение работы будет недоступно.

Настройки изменяйте под свои задачи.

А теперь в путь!

Что скрывается за простым запросом

Теперь можно попробовать транслировать простой запрос. Как на счет вот такого запроса.

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

Теперь выполним его через инструмент.

Один клик - и SQL-запрос в кармане!

Итого, у нас есть:

Простой запрос 1С - простой запрос SQL.


Запрос выполнялся 289 миллисекунд, с 9 логическими чтениями и возвращает 100 записей.

Перейдем к примерам интереснее.

Найти по наименованию

Запрос транслировать хорошо. А можно ли отловить запросы к базе данных при выполнении кода встроенного языка? Можно! Как на счет такого простого примера.

Тут все просто. Сначала находим ссылку на пользователя, а после выводим представление найденного элемента.

Результат получим следующий.

Первый запрос - это поиск по наименованию, а второй - получение представления найденного элемента. Как и в прошлом примере, мы получили информацию о затраченных ресурсах.

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

Сложный запрос

Можно пойти дальше и выполнить запрос сложнее, чем обычный SELECT. Как на счет запрос к одной из виртуальных таблиц регистра бухгалтерии.

Запрос к виртуальной таблице остатков.

И тут также трансляция будет работать как надо. Плюс посмотрим план запроса.

Транслировали запрос и посмотрели план. Жизнь удалась!

Вроде ничего сложного.

Hardcore!

А теперь что-нибудь особенное. Вас когда-нибудь интересовал вопрос как платформа 1С выполняет пересчет итогов? А вот как!

Осталось только разобрать что каждый запрос делает, но это уже другая история.

Некоторые настройки

Описание некоторых настроек:

Вместо заключения

Инструмент специфический, но может пригодиться как для диагностики запросов и поведения платформы 1С, так и для исследования и изучения ее работы. Вместе с отчетом "Просмотр и анализ структуры базы данных (отчет на СКД)" может послужить для решения множества проблем производительности.

Это только первая версия, в будущем он будет развиваться.

В версии 2.0 будут следующие изменения:

  • Поддержка PostgreSQL
  • Поддержка файловых баз
  • Добавление комментариев к частям SQL-запроса для сопоставления с метаданными 1С и удобного чтения текста запросов.
  • Оптимизации для SQL Server 2016 и выше.
  • И много другое.

Выход 2 версии будет не раньше, чем во второй половине 2020 года :).

24.08.20 - Добавлена поддержка SQL Server 2008 и улучшена работа с планами запросов

  • Добавлена поддержка SQL Server 2008
  • Улучшена работа с планами запросов
  • Изменена фильтрация по базе данных для улучшения производительности
  • Добавлена служебная информация о базе и СУБД (версия СУБД, идентификатор и имя базы данных)
  • Рефакторинг и другие небольшие улучшения

07.01.20 - Опубликована основная версия

Другие ссылки

Авторские разработки

Просмотр и анализ структуры базы данных (отчет на СКД) - отчет для просмотра и анализа структуры базы данных с поддержкой файловых баз (ограниченный режим), а также баз на SQL Server и PostgreSQL.

Просмотр и анализ журнала регистрации (отчет на СКД) - отчет на базе системы компоновки данных (СКД) для просмотра записей журнала регистрации.

История работы пользователей (отчет на СКД) - отчет для просмотра истории работы пользователей (СКД, просмотр для любого пользователя).

Экспорт журнала регистрации. Набор инструментов (приложения + исходный код) - набор инструментов для экспорта данных журнала регистрации во внешние хранилища для Windows и Linux. Готовые приложения и исходный код.

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

    Помощник работы с идентификаторами объектов - инструмент для расширенного анализа идентификаторов объектов.

Анализ производительности APDEX (бесплатный) - отчет для просмотра и анализа замеров производительности в конфигурациях на базе БСП.

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

Пакетная выгрузка / загрузка внешних отчетов и обработок - пакетная выгрузка / загрузка внешних отчетов и обработок для массовый манипуляций с ними.

Мастер полнотекстового поиска - набор инструментов для работы с полнотекстовым индексом платформы 1С. Стандартные и расширенные возможности.

Командный интерпретатор для 1С - инструмент для выполнения команд CMD / PowerShell из 1С

Диагностика контекста выполнения (внешняя компонента) - небольшая экспериментальная внешняя компонента для получения дополнительной информации о контексте выполнения.

В своей работе мы довольно часто сталкиваемся с ситуацией, когда определенный запрос работает медленно, причем по тексту запроса невидно никаких очевидных проблем. Обычно в этом случае необходимо расследовать проблему на более глубоком уровне. Как правило, возникает необходимость посмотреть текст SQLзапроса и его план, и вот в этом нам как раз помогает SQLProfiler.

Что такое SQL Profiler и зачем оно вообще нужно

SQLProfilerэто программа поставляемая вместе с MS SQL Server и предназначена она для и просмотра всех событий, которые происходят в SQL сервер или говоря другими словами для записи трассировки. Зачем SQLProfiler может понадобиться программисту 1С? Хотя бы для того, что бы получить текст запроса на языке SQL и посмотреть его план. Конечно, это можно сделать и с помощью технологического журнала, но это требует некоторых навыков, да и план в ТЖ получается не такой красивый и удобочитаемый. В профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что на мой взгляд, гораздо удобнее. Так же с помощью профайлера можно определить: запросы длиннее определенного времени запросы к определенной таблице ожидания на блокировках таймауты взаимоблокировки и многое другое…

Анализ запросов с помощью SQL Profiler

Наиболее часто профайлер используется именно для анализа запросов. Как правило, нам не нужно отслеживать все запросы, зачастую необходимо увидеть, как определенный запрос на языке 1С транслируется в SQL, и посмотреть план его выполнения. Например, это может потребоваться, что бы определить, почему запрос выполняется медленно или мы написали большой запрос и хотим убедиться, что текст запроса на языке SQL не содержит соединений с подзапросом. Что бы отловить запрос в трассировке делаем следующее:


1. Запускаем SQL Profiler Пуск - Все программы - Microsoft SQL Server 2008 R2 - Средства обеспечения производительности - SQLProfiler
2. Создаем новую трассировку Файл – Создать трассировку (Ctrl+N)
3. Указываем сервер СУБД на котором находится наша база данных и нажимаем «Соединить».


Естественно, ничего не мешает выполнять трассировку сервера СУБД, который находится на другом компьютере. 4. В появившемся окне «Свойства трассировки» переходим на вторую закладку «Выбор событий»

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



Описание событий: ShowplanStatisticsProfile– текстовый план выполнения запроса.
ShowplanXMLStatisticsProfile– графический план выполнения запроса.
RPC:Completed– текст запроса, если он выполняется как процедура (если выполняется запрос 1С с параметрами).
SQL:BatchCompleted– текст запроса, если он выполняется как обычный запрос (если выполнялся запрос 1С без параметров).

6. Теперь необходимо настроить фильтр для событий. Если этого не сделать, то мы будем видеть запросы для всех баз данных расположенных на данном сервере СУБД. Нажимаем кнопку «Фильтры столбцов» и указываем фильтр по имени базы данных


Теперь мы будем видеть в трассировке только запросы к базе данных «TestBase_8_2» При желании можно поставить фильтр и по другим полям, наиболее интересные из них: Duration(Длительность), TextData(обычно это текст запроса) и RowCounts (количество строк возвращаемых запросом).


Например, если мне нужно отловить все запросы к таблице «_InfoRg4312» длительностью более 3-х секунд в базе данных «TestBase_8_2», то я делаю:
a) Фильтр по базе данных, пример показан выше
b) Фильтр по длительности в миллисекундах.


c) Фильтр по тексту запроса

Здесь мы указываем маску. Если необходимо отслеживать запросы, которые обращаются к нескольким таблицам, то создаем несколько элементов в разделе «Похоже на». Условия всех фильтров работают вместе.

7. Теперь можно запускать трассировку. Нажимаем «Запустить», после этого трассировка начинает работу, и вы можете видеть те события, отображение которых вы настроили и которые попадают под ваши фильтры. Для управления трассировкой можно использовать кнопки на командной панели.

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



По трассировке видно, что запросов получилось несколько и только один из них наш. Остальные запросы являются служебными.

10. По свойствам событий можно понять: сколько секунд выполнялся запрос (Duration), сколько было логических чтений (Reads), сколько строк запрос вернул в результате (RowCounts) и т.д. В моем случае запрос выполнялся 2 миллисекунды, сделал 4 логических чтения и вернул 1 строку.


11. Если подняться на одно событие выше, то мы сможем увидеть план запроса в графическом виде.
Как видно из плана, поиск осуществляется по индексу по цене, хотя этот план нельзя назвать идеальным, т.к. индекс не является покрывающим, поля код и наименование получаются с помощью KeyLookup, что отнимает 50% времени.

Используя контекстное меню, графический план можно сохранить в отдельный файл с расширением *.SQLPlan и открыть его в профайлере на другом компьютере или с помощью более продвинутой программы SQL Sentry Plan Explorer.


12. Если подняться еще выше, то мы увидим тот же план запроса, но уже в текстовом виде. Именно этот план отображается в ТЖ, ЦУП и прочих средствах контроля производительности 1С. Для его анализа рекомендую использовать продвинутый текстовый редактор с подсветкой, например Notepad++.



13. Использую меню «Файл-Сохранить как», всю трассировку можно сохранить в различные форматы:
a) В формат самого профайлера, т.е. с расширением *.trc
b) В формат xml
c) Можно сделать из трассировки шаблон. См. следующий пункт.
d) Можно сохранить трассировку в виде таблицы базы данных. Удобный способ, если нам нужно найти например самый медленный запрос во всей трассировке либо отобрать запросы по какому-либо параметру. Файл – Сохранить как – Таблица трассировки – Выбираем сервер СУБД и подключаемся к нему Далее нужно выбрать базу данных на указанном сервере и указать имя таблицы, куда будет сохранена трассировка. Можно выбрать уже существующую таблицу, либо написать новое имя и тогда таблица будет создана автоматически в выбранной базе данных.

Далее вы можете строить запросы любой сложности к этой таблице, например искать наиболее долгие запросы.


При этом нужно учитывать, что Duration сохраняется в таблицу в миллионных долях секунды и при выводе результата, желательно переводить значение в миллисекунды. Так же в таблицу добавляется столбец RowNumber, который показывает номер данной строки в трассировке.

14. Если вам требуется часто использовать профайлер для анализа запросов, то настройка необходимых фильтров и событий быстро надоест и к тому же будет отнимать много времени. На помощь приходят шаблоны трассировок, где мы указываем нужные нам фильтры и порядок колонок, а далее просто выбираем этот шаблон при создании новой трассировки. Для создания шаблона используем меню Файл – Шаблоны – Новый шаблон


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



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

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

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

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

Требования

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

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

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

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

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

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

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

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

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

Просмотр графического отображения плана выполнения для запросов 1С

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

(6) Моя обработка не использует техжурнал и, как следствие, не приводит к дополнительной нагрузке и не накладывает требований по наличию прав доступа к хосту сервера приложений. Я достаю планы выполнения непосредственно из кеша планов SQL Server.

Ваш подход в целом точнее, но затратнее.

(7) логирование в ТЖ одной сессии создает настолько мизерные затраты, что говорить что это "более затратное" самообман (9) Я говорю о затратах не столько технических, сколько организационных. Для ларьков эти затраты действительно мизерные.

(10) а что по вашему лучше, логин с авторизацией на субд или без авторизации в какую либо базу данных на сервере 1С?


Не первый раз слышу в такой формулировке и каждый раз улыбаюсь. Вы, безусловно, молодцы, но формулировка улыбает.
Типа 1С всей фирмой пыталась-пыталась, пыталась-пыталась и таки не смогла - "фух, не могу больше, не выходит каменный цветок. Такое только команде самого Гилева под силу". (16) если не следили за развитием ЦУПа, то иронию понимаю, а вот если следили. ))) (10) Ваня :)
Это кому там понадобилось-то?
"Неужели в наших котлетах будет мясо?" (с)
Эх.. Ромы на вас нет :)))) (12) Привет! Мне и понадобилось. :) Как говорится, делал как для себя. :)

(7) Иван, хорошая работа, спасибо!

ИМХО цитату хорошо бы включить в описание публикации

"Моя обработка не использует техжурнал и, как следствие, не приводит к дополнительной нагрузке и не накладывает требований по наличию прав доступа к хосту сервера приложений. Я достаю планы выполнения непосредственно из кеша планов SQL Server. " Есть еще бесплатная утилита SQL Sentry Plan Explorer для чтения планов. Если скрестить ее с этой консолькой, то и студия на клиенте не нужна. (2) SSMS - бесплатный инструмент от вендора СУБД. Более функциональный, чем Plan Explorer. в чем именно SQL Server Management Studio более функциональный, чем SentryOne Plan Explorer? Возможность обойтись без тех-журнала - несомненный плюс. Доброе утро!
Решение востребованное без условно.
Меня терзают смутные сомнения, вы
не из компании "Раздолье" случайно?
С уважением (17) Нет, если не ошибаюсь, Иван трудится в иной компании :)

(20) :) Ok, добавлю в описание.

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

If Cluster.HostName = HostName Then
надо приводить к одному регистру, иначе не срабатывает (в строке подключения стоит uppercase например, а в Cluster.HostName lowercase)

(22) .. (25) Спасибо за комментарии. Основные косяки исправил, но пока не выкладывал.

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

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

По сопоставлению - для пакета порядок запросов в пределах секунды иногда нарушается. При этом сопоставление пока не работает.
Если не работает для одного запроса - опять же давай тестовый пример.

(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
если СтрокаПодключения + ИмяСервера + ";Database=" + ИмяБазыДанных + ";"
Так работает.

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

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

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

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

отрабатывают и все находят и сопоставляют, но толку то мне от них?.
Запросы посложнее, типа

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

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

И таких запросов тоже много, и не пакетных, и пакетных. Просто привел пример для самого простого из таких.

(27) Выложил исправленную версию с улучшенным сопоставлятором.

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

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

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

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

Такое впечатление, что программе надо SQL 2012 или новее, о чем надо сообщать заранее. Ну или какие-то настройки на сервере дополнительные нужны.

Автору на заметку
Добавляю в текст запроса
, qp.query_plan AS ПланВыполнения
, qp.dbid as ИДБазы <-------- вот эту строчку. И у меня, для многих баз, qp.dbid = null.
Соответственно, в условии
and qp.dbid = db_id()

null не равен 10 (id моей базы)

Ну и на закуску
Убираю в запросе строчку and qp.dbid = db_id(), чтобы были все запросы.

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

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

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

Обработку скачивать не рекомендую.

29. user617199_pablonikolaev 26.07.17 09:36 Сейчас в теме Аналогичный инструмент "Статистика по запросам MSSQL" есть в подсистеме Инструменты разработчика . Он также использует процедурный кэш MSSQL и не создает какой либо нагрузки на работу серверов. В этой же подсистеме в инструменте "Консоль запросов" на странице "Запрос результата" с помощью кнопки "Статистика MSSQL" можно посмотреть статистику по последнему выполненному запросу.

Просмотры 19261

Загрузки 63

Рейтинг 31

Создание 24.06.17 22:35

Обновление 05.09.17 19:51

№ Публикации 639003

Конфигурация Конфигурации 1cv8

Операционная система MS SQL

Вид учета Не имеет значения

Доступ к файлу Абонемент ($m)

Код открыт Да


См. также

Универсальный редактор данных (УРД) Промо

Универсальный редактор данных (УРД) - это лучший инструмент в своем классе, который позволяет редактировать реквизиты и движения объектов

1 стартмани

27.08.2021 5975 124 Adeptus 51

Конвертация любых адресов, написанных в свободной форме, к ФИАС

Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.

2 стартмани

30.06.2020 7679 68 XilDen 15

Инструменты оптимизации для 1С на MS SQL Server

Набор базовых инструментов для поиска узких мест в работе 1С на MS SQL Server.

1 стартмани

15.12.2019 21555 243 berezdetsky 23

CF & SQL : конструктор прямых запросов к БД 1С

Программа для чтения и анализа внутренней структуры данных 1С V8.х, Содержит конструктор прямых SQL запросов, позволяет обрабатывать и редактировать тексты SQL-запросов, выполнять прямые запросы к базе данных 1С и обрабатывать полученные результаты.

1 стартмани

02.10.2019 30898 298 dmitrydemenew 63

Удаление и/или копирование сохраненных в 1С настроек (например настроек печати табличных форм) Промо

Иногда нужно удалить сохраненную в 1С "покореженную" настройку или скопировать "удачную" другому пользователю.

1 стартмани

01.09.2012 66875 1378 AnryMc 46

Модель объекта

Подсистема позволяет описать модель данных объекта, где описана зависимость между реквизитами, и затем использовать эту модель в разных сценариях работы с объектом. Версия платформы: 8.3.6 и выше. С небольшими доработками будет работать на 8.2.

1 стартмани

30.06.2019 16835 1 vadim1980 5

Редактор объектов информационной базы 8.3

Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.57 от 09.10.2021

2 стартмани

23.01.2019 43309 486 ROL32 50

Конструктор мобильного клиента Simple WMS Client: способ создать полноценный ТСД без мобильной разработки. Теперь новая версия - Simple UI (обновлено 14.11.2019)

Планом запроса называется последовательность логических и физических операторов, которые должны быть выполнены СУБД для того чтобы получить результат SQL-запроса. Получение плана запроса может потребоваться в различных ситуациях, а в первую очередь при задачах оптимизации запросов.

Я хочу описать три способа получить план запроса используя инструменты СУБД MS SQL Server, каждый из способов может оказаться предпочтительнее в той или иной ситуации.

  1. Настроить Profiler (или Extended Events) и поставить его на паузу
  2. Если трассировка содержит данные, очистить окно трассировки
  3. С помощью отладчика в 1С:Предприятие остановиться перед выполнением необходимого запроса
  4. Снять Profiler с паузы
  5. Выполнить запрос
  6. Остановить Profiler
  7. Проанализировать полученную информацию

Profiler является инструментом для создания трассировок и управления ими. С помощью данного инструмента можно получать различную информацию о работе СУБД. В данном случае мы будем использовать его для получения информации о выполняемом запросе, в частности, для того чтобы получить его план выполнения.

Для того чтобы получить план запроса в Profiler следует добавить следующие события:

Событие Описание
Showplan All Выводит подробную информацию о предполагаемом плане запроса в текстовом виде
Showplan Statistics Profile Выводит подробную информацию о действительном плане запроса в текстовом виде
Showplan XML Выводит подробную информацию о предполагаемом плане запроса в XML формате (может быть представлен графически)
Showplan XML Statistics Profile Выводит подробную информацию о действительном плане запроса в XML формате (может быть представлен графически)

Также можно добавить необходимые отборы: по имени/идентификатору базы данных, номеру соединения, длительности выполнения.

Получение кэшированного плана запроса с помощью динамической функции

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

Функция Описание
dm_exec_query_stats Возвращает суммарную статистику производительности для кэшированных планов запросов в SQL Server
dm_exec_sql_text Возвращает текст пакета SQL, который определен указанным параметром
dm_exec_query_plan Возвращает события инструкции Showplan в XML-формате для пакета, указанного в дескрипторе плана

Для поиска плана запроса необходимо выполнить в SQL Server Management Studio нижеприведенный запрос (также доступен во вложении к статье), при этом изменив условия отбора:

Читайте также: