Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Вот возникла очередная задача при переходе с Оракла на ДБ2. Нужно определить проблемы производительности сессии. Есть сессия, которая посылает базе запросы типа INSERT, UPDATE, DELETE, SELECT. 1. Нужно определить суммарное время затрат ЦПУ, суммарные ожидания по видам. 2. Кроме того такую же статистику нужно получить для каждого отдельного запроса дабы выяснить, какие запросы расходуют ЦПУ, какие долго ждут и почему. В Оракле для решения задачи 1 есть системные представления в которых собирается сессионная статистика. После отработки теста я могу точно сказать, сколько база потратила ЦПУ на мою сессию, сколько она ждала на дисковых операциях по чтению, по записи и пр. Для решения задачи 2 есть сессионные трейсы, которые собирают статистику в разрезе отдельных запросов - планы запросов, сколько фетчей было сделано по запросу, сколько физических чтений с диска, сколько чтений из кеша и пр. Какие средства ДБ2 нужно использовать, чтобы получить аналогичные результаты. Ткните, пожалуйста, в правильную доку и статьи. Доку "Tuning Database Performance" изучаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2009, 13:26 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2009, 14:31 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinшубин_ду, Почитайте тут про create event monitor. Прочитал, попробовал, но остается много вопросов. Например, каждый запрос записывается в таблицу мониторинга STMT_XXX 4 раза. Разборки выявили отличие в колонке STMT_OPERATION. Это поле числовое. Значения 1,4,7,6. В доке System Monitor Guide and Reference в описании STMT_OPERATION приводятся однако строковые значения SELECT, PREPARE, EXECUTE. Из чего сделал вывод, что каждая строка в STMT_XXX соответствует фазе исполнения запроса. Но как сопоставить числа строковым значениям? Собственно вопрос даже не столько в этой частности, сколько в том, есть ли описание методики тестирования производительности в виде док, статей, книг и пр.? Где было бы написано как правильно интерпретировать результаты event monitoring. Пока поиски ничего не дали. Может есть какой-нибудь классический источник, в котором представлены основные методики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 17:00 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_дуПрочитал, попробовал, но остается много вопросов. Например, каждый запрос записывается в таблицу мониторинга STMT_XXX 4 раза. Разборки выявили отличие в колонке STMT_OPERATION. Это поле числовое. Значения 1,4,7,6. В доке System Monitor Guide and Reference в описании STMT_OPERATION приводятся однако строковые значения SELECT, PREPARE, EXECUTE. Из чего сделал вывод, что каждая строка в STMT_XXX соответствует фазе исполнения запроса. Но как сопоставить числа строковым значениям?ищите в ...\sqllib\include\sqlmon.h по строке "Statement Operation Types". шубин_дуСобственно вопрос даже не столько в этой частности, сколько в том, есть ли описание методики тестирования производительности в виде док, статей, книг и пр.? Где было бы написано как правильно интерпретировать результаты event monitoring. Пока поиски ничего не дали. Может есть какой-нибудь классический источник, в котором представлены основные методики? Best practices for DB2 for Linux, UNIX, and Windows . Ищите там по "Tuning". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 17:49 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_ду Может есть какой-нибудь классический источник, в котором представлены основные методики? Можно здесь и здесь посмотреть для начала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 17:50 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Спасибо, Mark и mitek, буду разбираться дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2009, 18:33 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Протестировал приложение с использованием SYSIBMADM.SNAPAPPL. ELAPSED_EXEC_TIME_S + ELAPSED_EXEC_TIME_MS/1000000.0 действительно показывают правду. Полученное значение очень близко к значению которое получаем из клиента путем вычитания время завершения приложения из времени старта. Но из каких компонент состоит ELAPSED_EXEC_TIME непонятно. Смастерил вот такой запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Включил в запрос все временные компоненты, которые нашел в SYSIBMADM.SNAPAPPL. И все равно время TOTAL_TIME на 50% меньше времени ELAPSED_EXEC_TIME. elapsed = 150 секунд, total = 102 секунды. А на что пошли еще 48? То, что это не APPL_IDLE_TIME проверил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 20:42 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Аналогичная проблема с анализом через event monitor. Данные мониторинга пишу в таблицу. Вот запрос для таблицы CONN для монитора TEST_DB_01: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. elapsed в моем тесте равен 20 секундам. А сумма всех остальных времен только 15 секунд. На что ушли оставшиеся 5 секунд? Учитывается ли тут время на статический SQL? У меня есть триггеры и вызовы процедур из триггеров. Процедуры выдает пару селектов и инсертов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2009, 22:06 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Дайте вывод команды: db2 get dbm cfg | grep DFT_MON ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 09:48 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Mark BarinsteinДайте вывод команды: db2 get dbm cfg | grep DFT_MON Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Спасибо. Мысль понял. Сбор временной статистики для сортировак не был включен. Сейчас проверю снова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 12:48 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_дуСпасибо. Мысль понял. Сбор временной статистики для сортировак не был включен. Сейчас проверю снова.Только сделайте Код: plaintext И всё равно, скорее всего, не сойдется. :) В случае выключенного параллелизма Код: plaintext Если YES и приложение использует несколько агентов, то сравенение может быть вообще некорректным, т.к. некоторые операции оно может делать параллельно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 13:03 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Возникла новая проблема - Как посмотреть производительность статического SQL. В базе имеется несколько хранимых процедур, которые очевидно сильно грузят базу. Но в SYSIBMADM.SNAPDYN_SQL нет ни одного запроса, которые выдаются из этих хранимых процедур. В доке "Administrative Routines and Views" ничего подходящего не нашел. В best practise нашел только вот это: db2pd –static ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 17:11 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Есть еще такая утилитка db2mon . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 17:17 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_дуВозникла новая проблема - Как посмотреть производительность статического SQL. В базе имеется несколько хранимых процедур, которые очевидно сильно грузят базу. Но в SYSIBMADM.SNAPDYN_SQL нет ни одного запроса, которые выдаются из этих хранимых процедур. В доке "Administrative Routines and Views" ничего подходящего не нашел. В best practise нашел только вот это: db2pd –staticЭто и event monitor for statements ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 17:48 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinшубин_дуВозникла новая проблема - Как посмотреть производительность статического SQL. В базе имеется несколько хранимых процедур, которые очевидно сильно грузят базу. Но в SYSIBMADM.SNAPDYN_SQL нет ни одного запроса, которые выдаются из этих хранимых процедур. В доке "Administrative Routines and Views" ничего подходящего не нашел. В best practise нашел только вот это: db2pd –staticЭто и event monitor for statements Спасибо, Mark! Сделал мониторинг в режиме statements. Анализ трейсовой таблицы STMT_XXX показывает, что после каждой операции UPDATE на таблице с триггерами идет список "пустых" операций у которых поле STMT_TEXT не заполнено. Судя по-всему это и есть статический SQL, который вызывается при изменении записи в таблице. Такие "пустые" строки имеют 1 в колонке STMT_TYPE, тогда как строки с заполненным текстом SQL имеют в STMT_TYPE значение 2. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. В поле пакета у таких запросов стоит нечто, отличное от SYS, вероятно по этому имени как-то можно отыскать текст статического SQL. А как это сделать не понял. Есть какая-то возможность получить в трейсе текст статического SQL, а не только статистику по нему? Иначе непонятно, какую нагрузку на базу накладывают запросы из триггеров. Еще раз спасибо за поддержку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.01.2009, 20:53 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_ду, 1. О влиянии триггеров на команду вы можете судить только по INT_ROWS_DELETED, INT_ROWS_INSERTED, INT_ROWS_UPDATED Вся остальная статистика приводится по команде в целом. 2. Чтоб достать текст любого (динамического или статического (STMT_TYPE = 1)) запроса: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 11:06 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Спасибо Mark, статический SQL нашелся. Однако оказалось, что трейс для режима statements не содержит SQL-запросов, которые были выданы из триггера. Монитор создавал так: Код: plaintext 1. Триггер делает INSERT в таблицу X и вызывает хранимую процедуру, которая делает DELETE из таблицы X. INSERT в трейсе отсутствует, тогда как DELETE в трейсе имеется (в виде статического SQL). Может быть триггер выполняется под другим APPL_ID и поэтому выданные им запросы не попадают в трейс? Собственно сейчас удалось установить, что приложение тормозит из-за триггера. Если его отключить, то время DIRECT_WRITE_TIME в SYSIBMADM.SNAPAPPL для приложения резко сокращается. Хотелось бы получить точную статистику для SQL-запросов внутри триггера, чтобы быть уверенным, что "виноват" триггер. Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 13:22 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_дустатический SQL нашелся. Однако оказалось, что трейс для режима statements не содержит SQL-запросов, которые были выданы из триггера. Монитор создавал так:Вы нигде текст триггера не увидите в трейсах. Это действительно неудобно. шубин_дуСобственно сейчас удалось установить, что приложение тормозит из-за триггера. Если его отключить, то время DIRECT_WRITE_TIME в SYSIBMADM.SNAPAPPL для приложения резко сокращается.DIRECT_... связано с объектами, которые не кэшируются, а работа с которыми производится напрямую с диска (long varchar, lob). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 13:30 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Mark Barinsteinшубин_дустатический SQL нашелся. Однако оказалось, что трейс для режима statements не содержит SQL-запросов, которые были выданы из триггера. Монитор создавал так:Вы нигде текст триггера не увидите в трейсах. Это действительно неудобно. шубин_дуСобственно сейчас удалось установить, что приложение тормозит из-за триггера. Если его отключить, то время DIRECT_WRITE_TIME в SYSIBMADM.SNAPAPPL для приложения резко сокращается.DIRECT_... связано с объектами, которые не кэшируются, а работа с которыми производится напрямую с диска (long varchar, lob). Речь идет не от тексте триггера, а о INSERT, SELECT, которые выдаются внутри триггера. Мне нужна статистика по SQL-запросам, выдаваемым внутри триггера. Что касается DIRECT_WRITE_TIME, то при записи на диск (INSERT, DELETE) у меня увеличивается время именно в этой колонке, а не в POOL_WRITE_TIME. LONG и LOB в приложении нет, но сейчас еще раз проверю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 15:00 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_дуРечь идет не от тексте триггера, а о INSERT, SELECT, которые выдаются внутри триггера. Мне нужна статистика по SQL-запросам, выдаваемым внутри триггера.Я это и имел ввиду. Кроме кол-ва измененных строк триггерами отдельной статистики по триггерам нет. шубин_дуЧто касается DIRECT_WRITE_TIME, то при записи на диск (INSERT, DELETE) у меня увеличивается время именно в этой колонке, а не в POOL_WRITE_TIME. LONG и LOB в приложении нет, но сейчас еще раз проверю.Виноват, в прямую запись еще входит увеличение sms табличных пространств: direct_writes ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 15:14 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
После всех проведенных тестов обнаружил в базе один запрос у которого особенно большое время total_exec_time. Чтобы установить на что тратится время сделал такой запрос, в который включил все колонки со временем из sysibmadm.snapdyn_sql: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Получаю вот такую статистику для наиболее тяжелого запроса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Если сложить имеющиеся в snapdyn_sql времена, то получим, что время EXEC_TIME на порядки превышает эту сумму, то есть запрос занимается чем-то, что не входит в статистику. Вероятно читает большую таблицу без индекса. Или ждет чего-то из-за блокировки. Непонятно, как можно увидеть время, затраченное на ожидания ввода/вывода, на ожидания освобождения блокировки и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 19:16 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Столкнулся с несовпадением статистик по общему времени исполнения: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Получается, что сумма времен исполнения по всей базе равна 227844, по всем приложениям 29009, по всем динамическим запросам 220314. Предполагаю, что это связано с тем, что SNAP дает моментальный снимок. Те приложения, которые уже закончились сюда не входят. Поэтому сумма по приложениям существенно меньше суммы по базе. Сумма динамических запросов меньше суммы по базе в связи с тем, что часть запросов уже вытеснена из кеша. И кроме того еще имеются статические запросы, которые вносят вклад в сумму для базы, но не учитываются в динамических запросах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2009, 20:59 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
Очередная странность с elapsed_exec_time_s Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Как может быть ELAPSED_EXEC_TIME меньше время процессора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.02.2009, 19:42 |
|
||
|
Мониторинг производительности сессии
|
|||
|---|---|---|---|
|
#18+
шубин_дуКак может быть ELAPSED_EXEC_TIME меньше время процессора?На очень коротких промежутках времени такое бывает. Не уверен, но по-моему производитель не делает "транзакций" для показателей монитора. Т.е. в како-то момент времени вы можете, действительно, поймать показатели на состоянии, когда оно обновило уже детальный счётчик, а аггрегат, в который он входит - нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2009, 18:20 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=35785330&tid=1603430]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 259ms |
| total: | 450ms |

| 0 / 0 |
