Привет.
Очень часто ко мне обращаются пользователи или наши тестировщики со следующей проблемой:
"У меня программа стала работать МЕДЛЕННО!"
При этом совсем нет времени на детальное изучение проблемы, да еще и рабочие сервера как правило работают с параметром sql_trace = false ...
В этом случае я для себя нашел следующее "экспресс"-решение.1. Просим пользователя "зайти" в программу
2. Находим sid и serial сессии пользователя ( select sid, serial# from v$session where <условия поиска> )
3. Выполняем такой PL/SQL блок
declare
-- 0/1/null <--> false/true/null
-- Boolean parameters are translated from/to integers:
sql_trace boolean := sys.diutil.int_to_bool(1);
begin
-- Call the procedure
dbms_system.set_sql_trace_in_session
(sid => 56,
serial# => 6656,
sql_trace => sql_trace);
end;
После его выполнения начинается трассировка указанной сессии.
4. Просим пользователя выполнить долгую операцию...
5. Ждем ...
6. Отключает трассировку, выполнив еще раз этот скрипт, указывая параметр sql_trace = 0
7. Находим в каталоге UDUMP сервера файл .trc
Имя файла содержит в себе идентификатор процесса операционной системы. Найти его можно так
SQL> select p.spid from v$session s, v$process p
2 where s.paddr=p.addr
3 and ...мои_критерии_отбора...
4 /
8. Обрабатываем этот файл утилитой TKPROF ( TKPROF <имя trc-файла> <имя выходного файла> )
9. В полученном файле анализируем финальные итоги, оценивая параметры CPU и ELAPSED
Например, сегодня я получил такую картину.
И итогах видно, что проблема ЕСТЬ и она сосредоточена во времени ожидания получения данных (20.85 сек)
Надо искать проблемные запросы.
10. В Window с помощью команды find "total" <имя выходного файла> >1.txt
ищем все строки, которые начинаются с "total" и сохраняем их в файл 1.txt
11. Бегло проматриваем этот файл и находим значения, которые по свей величине нас не устраивают.
Для моего сегодняшнего случая было 2 таких тотальных строки для двух запросов, которые занимали практически собой все время ожидания.
total 9 0.00 0.00 0 21 0 9
total 3 0.03 0.02 0 3 0 0
total 3 0.01 0.00 0 14 0 5
total 3 0.64 10.89 11848 17504 0 4
total 3 0.07 0.06 0 214 0 29
total 15 0.00 0.00 0 15 0 5
total 3 0.01 0.00 0 3 0 0
total 3 0.00 0.00 0 4 0 1
total 3 0.00 0.00 0 8 0 6
total 6 0.04 0.02 0 8 0 2
total 3 0.00 0.00 0 4 0 1
total 3 0.00 0.00 0 3 1 1
total 3 0.00 0.00 0 2 0 1
total 3 0.01 0.00 0 8 2 1
total 2 0.00 0.00 0 4 1 1
total 3 0.00 0.00 0 2 0 1
total 3 0.21 9.85 7760 12354 0 1
total 6 0.00 0.00 0 0 0 0
total 6 0.00 0.00 0 0 0 0
Дальше по этим значениям из этих строк в обработанном trace-файле находим проблемные запросы и разбираемся с ними.
Мне сегодня было достаточно построить два индекса...
ВСЕ...
По моему опыту с помощью этих нехитрых манипуляций решаются около 90 процентов замечаний по производительности серверов.
Вы можете спросить, а зачем выполнять 10 пункт. Ведь можно и в обработанном TRC-файле искать проблемные запросы. КОНЕЧНО МОЖНО. Не если таких запросов в одном trace несколько сотен, то проще бегло просмотреть или обработать только тотал, а потом перейти к деталям...
Удачи.
Очень часто ко мне обращаются пользователи или наши тестировщики со следующей проблемой:
"У меня программа стала работать МЕДЛЕННО!"
При этом совсем нет времени на детальное изучение проблемы, да еще и рабочие сервера как правило работают с параметром sql_trace = false ...
В этом случае я для себя нашел следующее "экспресс"-решение.
2. Находим sid и serial сессии пользователя ( select sid, serial# from v$session where <условия поиска> )
3. Выполняем такой PL/SQL блок
declare
-- 0/1/null <--> false/true/null
-- Boolean parameters are translated from/to integers:
sql_trace boolean := sys.diutil.int_to_bool(1);
begin
-- Call the procedure
dbms_system.set_sql_trace_in_session
(sid => 56,
serial# => 6656,
sql_trace => sql_trace);
end;
После его выполнения начинается трассировка указанной сессии.
4. Просим пользователя выполнить долгую операцию...
5. Ждем ...
6. Отключает трассировку, выполнив еще раз этот скрипт, указывая параметр sql_trace = 0
7. Находим в каталоге UDUMP сервера файл .trc
Имя файла содержит в себе идентификатор процесса операционной системы. Найти его можно так
SQL> select p.spid from v$session s, v$process p
2 where s.paddr=p.addr
3 and ...мои_критерии_отбора...
4 /
8. Обрабатываем этот файл утилитой TKPROF ( TKPROF <имя trc-файла> <имя выходного файла> )
9. В полученном файле анализируем финальные итоги, оценивая параметры CPU и ELAPSED
Например, сегодня я получил такую картину.
И итогах видно, что проблема ЕСТЬ и она сосредоточена во времени ожидания получения данных (20.85 сек)
Надо искать проблемные запросы.
10. В Window с помощью команды find "total" <имя выходного файла> >1.txt
ищем все строки, которые начинаются с "total" и сохраняем их в файл 1.txt
11. Бегло проматриваем этот файл и находим значения, которые по свей величине нас не устраивают.
Для моего сегодняшнего случая было 2 таких тотальных строки для двух запросов, которые занимали практически собой все время ожидания.
total 9 0.00 0.00 0 21 0 9
total 3 0.03 0.02 0 3 0 0
total 3 0.01 0.00 0 14 0 5
total 3 0.64 10.89 11848 17504 0 4
total 3 0.07 0.06 0 214 0 29
total 15 0.00 0.00 0 15 0 5
total 3 0.01 0.00 0 3 0 0
total 3 0.00 0.00 0 4 0 1
total 3 0.00 0.00 0 8 0 6
total 6 0.04 0.02 0 8 0 2
total 3 0.00 0.00 0 4 0 1
total 3 0.00 0.00 0 3 1 1
total 3 0.00 0.00 0 2 0 1
total 3 0.01 0.00 0 8 2 1
total 2 0.00 0.00 0 4 1 1
total 3 0.00 0.00 0 2 0 1
total 3 0.21 9.85 7760 12354 0 1
total 6 0.00 0.00 0 0 0 0
total 6 0.00 0.00 0 0 0 0
Дальше по этим значениям из этих строк в обработанном trace-файле находим проблемные запросы и разбираемся с ними.
Мне сегодня было достаточно построить два индекса...
ВСЕ...
По моему опыту с помощью этих нехитрых манипуляций решаются около 90 процентов замечаний по производительности серверов.
Вы можете спросить, а зачем выполнять 10 пункт. Ведь можно и в обработанном TRC-файле искать проблемные запросы. КОНЕЧНО МОЖНО. Не если таких запросов в одном trace несколько сотен, то проще бегло просмотреть или обработать только тотал, а потом перейти к деталям...
Удачи.
Комментариев нет:
Отправить комментарий