Недавно нашел в просторах инета мою старую статью с сайта sap-easy.net.ru, спасибо что сохранили!

Публикую здесь, но в скором времени адаптирую под более свежие версии SAP.

Трассировка SQL

В данном разделе я попытаюсь рассказать о самом, на мой взгляд, полезном инструменте системы SAP R/3 — это «Трасировка SQL». При помощи данного инструмента вы сможете легко получить информацию о всех произведенных вами запросах к БД за время измерения. При этом вы получаете возможность оценить каждый запрос, увидеть код возврата (т.е. узнать о исходе запроса), просмотреть код программы инициирующей данный запрос.

Данная утилита важна при желании узнать таблицы в которые записываются данные при работе стандартных транзакций.

Итак, приступим…

Для проведения измерений я приготовил программу со следующим ABAP-кодом

REPORT ZFM_ART_TEMP1 .

TABLES: BSEG.

SELECT SINGLE * FROM BSEG
WHERE BUKRS = ‘MAGN’
AND GJAHR = ‘2002’
AND BELNR = ‘5100000010’
AND BUZEI = 1.

WRITE:/ BSEG-BELNR, BSEG-HKONT.

Если вы не первый раз видите код написанный на АВАР, то вы поймете что данная программа выбирает из таблицы BSEG (позиции бух. документа) одну запись и выводит её на экран.

Перед запуском программы включим трассировку (транзакция ST05).

Для этого нужно установить флажок «SQL Trace» (он установлен по умолчанию) и нажать кнопку «Trace on». После запуска трассировки запускаем свою программу, выключаем трассировку и выводим список (кнопки «Trace off» и «List trace») Перед выводом списка на экран, перед вами появится окно в котором я думаю вы без труда разберетесь, здесь можно ограничить перечень выводимых объектов и сделать другие настройки выводимого списка. По умолчанию в окне указывается диапазон времени последней трассировки, но вы можете задать и другой. Единственное что я еще должен упомянуть по этому поводу — данные трассировки хранятся в кольцевом буфере, а это значит, что при слишком большой выборке у вас будет происходить перезапись буфера.

При этом получается следующая картина

В данном окне мы видим все операции с базой данных за время измерения, при этом, как вы видите, они представлены не в OpenSQL, а в NativeSQL. И вы понимаете что наш запрос

SELECT SINGLE * FROM BSEG
WHERE BUKRS = ‘MAGN’
AND GJAHR = ‘2002’
AND BELNR = ‘5100000010’
AND BUZEI = 1.

на самом деле будет запросом к кластеру RFBLG.

Итак вы видите следующие данные

Duration — время операции в милисекундах

Object — объект (таблица)

DB op. — операция с БД

Четвертый столбик (в 4.6 обозначен как REC) — количество выбранных записей

Пятый столбик — код возврата.

SQL statement — я думаю не нужно объяснять

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

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

— информация об объекте словаря, тоже моно просто два раза кликнуть по полю с объектом.

— после нажатия этой кнопки перед вами откроется следующая картина

Верхний рисунок отображает структуру нашего запроса, а нижний — его полную детализацию.

Первый раздел детализации описывает технические данные запроса, второй — время выполнения составных частей запроса.

Для описания других разделов я изменю программу и сделаю выборку из таблицы BSAK (она не кластерная и будет намного нагляднее показать именно её)

REPORT ZFM_ART_TEMP1 .

TABLES: BSAK.

SELECT SINGLE * FROM BSAK
WHERE BUKRS = ‘MAGN’
AND GJAHR = ‘2002’
AND BELNR = ‘5100000011’.

WRITE:/ BSAK-BELNR, BSAK-HKONT.

Из всех разделов более всего (на мой взгляд) полезны предпоследний и последний.

Предпоследний показывает аргументы запроса, а последний информацию о том как этот запрос отработал — какой при этом использовался индекс, какие индексы брались во внимание оптимизатором.

Посмотрев на данный рисунок вы без труда поймете, что при выборке использовался индекс «Z01″ с полями MANDT, BUKRS, BELNR, GJAHR и BUZEI. Это пользовательский индекс, я его создавал сам, для оптимизации запросов по документам.

на этом рисунке

R3TSMDATA/BSAK+Z01 — индекс «Z01″
R3TSMDATA/BSAK+1 — «1»
R3TSMDATA/»BSAK+0″ — «0», первичный индекс
R3TSMDATA/BSAK+Z02 — «Z02″, тоже созданный мной индекс.

Следующая возможность заложенная в трассировку SQL — это просмотр ABAP-кода. Для просмотра части программы, вызвавшей запрос, нужно отметить этот запрос на экране и нажать кнопку

И последний пункт, о котором я расскажу — расширенный вывод

При нажатии этой кнопки перед вами просто появится расширенный список Трассировки SQL.

   
© 2013 sap-blog.ru
Яндекс.Метрика