- Использование MS SQL Profiler и 1С
- Создание трассировки в Profiler и 1С
- Запуск трассировки в Profiler для 1С
- Анализ данных из Profiler
- Использование SQL Profiler для 1С
- Как ускорить 1С – Анализ запросов с помощью SQL Profiler
- Анализ запросов с помощью SQL Profiler
- SQL Profiler – предназначение
- Анализ запросов с помощью SQL Profiler
- PDF-версия статьи для участников группы ВКонтакте
- Комментарии / обсуждение (9):
Использование MS SQL Profiler и 1С
Программный продукт SQL Server Profiler представляет собой графическую оболочку, предназначенную для создания трассировок и анализа результатов трассировок. События сохраняются в файле трассировки, который затем может быть проанализирован или использован для воспроизведения определенных последовательностей шагов для выявления возникших проблем.
Создание трассировки в Profiler и 1С
Для того чтобы отследить действия, выполняющиеся в данный момент, необходимо запустить MS SQL Profiler, создать новую трассу и настроить анализ показателей:
На вкладке «Общие» необходимо указать название трассировки. Указать, куда будут сохраняться данные снятой трассы — на файл и/или в таблицу базы данных.
Большой интерес представляет вкладка «Выбор событий»:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
На данной странице указываются события, которые необходимо отслеживать. На этом примере укажем данные, необходимые для отслеживания планов запросов.
По умолчанию трассировка проходит по всем указанным событиям во всех базах данных. Для того чтобы наложить отборы на получаемые данные, необходимо нажать кнопку «Фильтры столбцов …»:
Например, установим отбор по идентификатору информационной базы (Узнать ID базы можно с помощью запроса SELECT DB_ID(N’ИмяБазы’) ).
Запуск трассировки в Profiler для 1С
После того как все настройки сделаны, осталось запустить отслеживание, для этого необходимо нажать «Запустить» (RUN). С этого момента в трассировку начнут попадать все действия, указанные в фильтре:
Например, я запускаю трассу на время проведения документа «Поступления товаров и услуг» с целью отследить самые трудозатратные операции.
После того как трассировка получена, необходимо её проанализировать.
Анализ данных из Profiler
Для анализа полученную трассировку можно сохранить либо в файл, либо в таблицу. Мы сохраним в таблицу базы данных:
Сохраним её в таблицу с названием «trace1».
После сохранения таблицы с ней можно полноценно работать, как с обычной таблицей SQL. Например, отсортируем по duration (время выполнение операции) с помощью нехитрого запроса:
В запросе мы видим, что в этот момент было выполнено два наиболее затратных запроса — с duration 15442 и 15153. Найти их можно в исходной трассировке по номеру строки (RowNumber). Найдя их, мы можем без труда проанализировать проблемы, из-за которых запрос выполняется неоптимально:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник
Использование SQL Profiler для 1С
SQL Profiler это программа, которая входит в состав утилит управления сервером MS SQL Server. Ее можно запустить как самостоятельно, так и из Management Studio в меню Tools — SQL Profiler.
С помощью SQL Profiler можно диагностировать проблемы низкой производительности запросов 1С. После запуска необходимо авторизоваться и создать новый профиль или выбрать уже существующий.
Показатели выбираются на закладке Event selection. Для отображения всех показателей необходимо поставить галочку Show all events.
Основные показатели, которые необходимы для оценки производительности:
Немного подробнее о каждом пункте.
- Showplan Statistics Profile отображает в текстовом виде какой план запроса был выбран при выполнении.
- Showplan XML Statistics Profile показывает план запроса в графическом виде.
- RPC: Completed показывает текст запроса, если на стороне 1С он был с параметрами.
- SQL: BatchCompleted показывает текст запроса, если на стороне 1С он был без параметров.
По кнопке Column Filters можно наложить определенные отборы, например ограничить отбор только определенной таблицей.
Накладывать ограничения на LoginName бесполезно, помните, что 1С работает с SQL от имени одной учетной записи.
После выбора всех параметров можно приступать к трассировке. Вверху окна есть кнопки для начала, паузы и остановки трассировки.
Например, при выполнении запроса в базе, получились следующие данные.
При выборе вверху строки с планом XML вы увидим как запрос выполнялся, из каких таблиц собирался и какие способы соединения сервер SQL посчитал наиболее производительными.
При выборе строки RPC: Comleted мы можем увидеть запрос, который сервер 1С отправил на MS SQL и сможем оценить, насколько он производителен и в целом похож на то, что мы собирались увидеть.
Дальнейшее использование этого инструмента зависит от ваших задач, в качестве примера можно привести статью по определению производительности функций запроса ВЫРАЗИТЬ и ССЫЛКА.
Источник
Как ускорить 1С – Анализ запросов с помощью SQL Profiler
Другие статьи по оптимизации 1С:
Анализ запросов с помощью SQL Profiler
- Предназначение инструмента трассировки SQL Profiler
- Как отследить текст запроса к СУБД, в который транслируется запрос 1С
- Настройки фильтров трассировки
- Как выполнить персональную настройку SQL Profiler
Зачастую в работе возникает ситуация, когда запрос в 1С по каким-то причинам работает медленно, но анализ текста запроса не говорит нам о каких-либо проблемах.
В таком случае приходится изучать эту проблему на более низком уровне. Для этого нам нужно посмотреть текcт SQL-запроса и план запроса. Для этого можно использовать SQL Profiler.
SQL Profiler – предназначение
SQL Profiler – это программа, входящая в MS SQL Server, которая предназначена для просмотра всех событий, которые происходят в SQL-сервере. Иначе говоря, она нужна для записи трассировки.
В каких случаях данный инструмент может быть полезен 1С программисту? Прежде всего, можно получить текст запроса на языке SQL и посмотреть его план. Это также можно сделать и в технологическом журнале (ТЖ), но план запроса в ТЖ получается не таким удобным и требует наличия некоторых навыков и умений. К тому же в профайлере можно посмотреть не только текстовый, но и графический план выполнения запроса, что является более удобным.
Также профайлер позволяет узнать:
- запросы длиннее определенного времени
- запросы к определенной таблице
- ожидания на блокировках
- таймауты
- взаимоблокировки и т. д.
Анализ запросов с помощью SQL Profiler
Зачастую 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. Окно трассировки состоит из двух частей. В верхней части находятся события и их свойства, в нижней – информация, зависящая от типа событий. Для нашего примера здесь будет отображаться либо текст запроса, либо его план.
9. Запустим на выполнение запрос в консоли запросов 1С и посмотрим, как он отразится в профайлере:
По поведению трассировки видно, что запросов в итоге получилось несколько, и только один из них нам интересен. Остальные запросы – служебные.
10. Свойства событий дают возможность оценить:
- сколько секунд выполнялся запрос (Duration)
- сколько было логических чтений (Reads)
- сколько строк запрос вернул в результате (RowCounts) и т.д.
В нашем случае запрос выполнялся 2 миллисекунды, сделал 4 логических чтения и вернул 1 строку.
11. Если взглянуть на одно событие выше, то можно увидеть план запроса в графическом виде:
Из плана видно, что поиск осуществляется по индексу по цене, этот план нельзя назвать идеальным, так как индекс не является покрывающим, поля код и наименование получаются с помощью KeyLookup, что отнимает 50% времени.
Используя контекстное меню, полученный графический план запроса возможно сохранить в отдельный файл с расширением *.SQLPlan и открыть его в профайлере на другом компьютере или с помощью программы SQL Sentry Plan Explorer, которая является более продвинутой.
12. Если подняться еще выше, то мы увидим тот же план запроса, но уже в текстовом виде. Именно этот план отображается в ТЖ, ЦУП и прочих средствах контроля производительности 1С.
13. Через меню Файл – Сохранить как можно сохранить всю трассировку в различные форматы:
- В формат самого профайлера, то есть с расширением *.trc
- В формат xml
- Сделать из трассировки шаблон (См. следующий пункт)
- Cохранить полученную трассировку в виде таблицы базы данных. Это весьма удобный способ, когда, к примеру, нужно найти самый медленный запрос в трассировке или отфильтровать запросы по какому-либо параметру.
Используем меню Файл – Сохранить как – Таблица трассировки – Выбираем сервер СУБД и подключаемся к нему.
Затем выбираем базу данных на указанном сервере, указываем имя таблицы, куда будет сохранена трассировка. Можно использовать существующую таблицу, или дать ей новое имя, и тогда эта таблица будет создана автоматически.
Теперь возможно строить запросы любой сложности к нашей таблице: к примеру, искать наиболее долго выполняющиеся запросы.
Также нужно помнить, что Duration сохраняется в таблицу в миллионных долях секунды, и при выводе результата нужно переводить значение в миллисекунды. Также в таблице присутствует столбец RowNumber, показывающий номер данной строки в трассировке.
14. При частом использовании профайлера для анализа запросов постоянная настройка нужных событий и фильтров будет постоянно отнимать у вас много времени.
В данном случае нам помогут шаблоны трассировок, где мы настраиваем нужные нам фильтры и порядок колонок, а далее просто используем уже имеющийся шаблон при создании новой трассировки.
Для создания шаблона используем меню Файл – Шаблоны – Новый шаблон:
На первой закладке указываем тип сервера, имя шаблона и при необходимости ставим флаг для использования данного шаблона по умолчанию.
На второй закладке делаем выбор нужных событий и осуществляем настройку фильтров (как было показано выше).
Дополнительно рекомендуется выполнить настройку порядка столбцов в трассировке, что экономит время при последующем анализе запросов. Удобным представляется следующий порядок:
При создании новой трассировки можем указать нужный шаблон, и тогда на второй закладке все фильтры и события заполнятся автоматически по созданному шаблону.
PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Вы можете скачать эту статью в формате PDF по следующей ссылке: Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
35 учебных часов, подготовка к 1С:Эксперт, правильная настройка серверной части, оптимизация кода, мониторинг загруженности оборудования и прочие взрослые вещи.
Комментарии / обсуждение (9):
Добрый день. Подскажите, пожалуйста, почему в Profiler отображается не название используемого индекса (_Reference7_ByFieldFld109), а его номер (_Reference7_9)?
В примерах: Index Seek(OBJECT:([demo].[dbo].[_Reference7].[_Reference7_ByFieldFld109] AS [T1])
У меня: Index Seek(OBJECT:([demo].[dbo].[_Reference7].[_Reference7_9] AS [T1])
И только в обработке “Просмотр метаданных” я по номеру 9 нахожу этот индекс в списке и понимаю, что на самом деле поиск шел по индексу _Reference7_ByFieldFld109?
Здравствуйте!
Начиная с одной из версий платформы, индексы в СУБД стали именоваться по другому принципу “ИмяТаблицы_ПорядковыйНомер”, ранее нумерация была связана с названием и типом полей из которых индекс состоит. Изменение в платформе произошло относительно недавно, с этим и связано такое отличие.
Андрей, правильно я понимаю, что порядковый номер индекса совпадает с порядком в обработке “Структура хранения метаданных” и начинается не с 0, а с 1?
Имя индекса отображается одинаково и в MS SQL и в обработке структура хранения метаданных и начинается с 1.
Источник