(C) Кощеев Артем.
Оригинал на http://www.sap-easy.net.ru/trc.htm
==========================================
Трассировка 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.
Оригинал на http://www.sap-easy.net.ru/trc.htm
==========================================
Трассировка 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.
Комментариев нет:
Отправить комментарий