Консультация № 140849
28.07.2008, 06:18
0.00 руб.
0 4 0
На сервере БД запущены очень большие select'ы (например 10), как узнать, какой из них сколько процессорного времени отнимает?
Схема всей системы - классическая трехзвенка (сервер БД, сервер приложений и клиент), СУБД - Oracle 9i (минимальной и максимальной комплектации) и рассматриваем 2 платформы - Windows и *nix.
Просто интересно, у кого какие варианты (интересны именно встроенные средства Oracle - например как это узнать это имея под рукой только SQL Plus). Цель - понять какой из запросов "вешает" сервер БД, ну и систему в целом. Свой вариант есть, но он не универсален (поскольку для этого необходимо стороннее ПО, типа Toad, а если мы не имеем под рукой, то значит уже не сможем глянуть), может кто юзает DBMS для этого или что-то ещё? Разобрался в пакете Oracle Perfomance Manager и иже с ним - лучшее из всего что видел, но и он работает только когда "накачен" соответствующий Pack и включены фичи в Оракле.

Обсуждение

давно
Мастер-Эксперт
425
4118
28.07.2008, 13:12
общий
Не совсем в тему вопроса, но возможно Вам стоит пересмотреть структуру таблиц БД, в плане оптимизации индексов, т.к. если нет нужных индексов по составленному Вами запросу, то сервер работает непосредственно с таблицей, перебирая каждую запись один за другой, что замедляет до двух порядков (а может и больше ) выполнение запросов.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
28.07.2008, 15:03
общий
У нас всё нормально и с базой и системой и с запросами. Но возможны след. повороты событий. К примеру, в результате интеграции нескольких систем на одной базе данных или ESB запросы сторонних систем (а не наших) вешают сервер БД напрочь, заказчик обращается к нам и говорит, что наша система убивает их корп. инф-ную систему и тянет на дно. Мы оперативно подключаемся к их удаленному рабочему столу и определяем: загрузку серверов, выполняемые на них запросы и смотрим, что всё-таки "вешает" КИС - работа наших систем или сторонних.
Неизвестный
28.07.2008, 15:44
общий
Каждый запрос в отдельной сессии. После этого можно посмотреть статистику по сессиям:
select
S.sid, SS.username, SS.machine, SS.terminal, SS.process
, SS.status
, SS.program
, SS.module
, S.value
, N.name AS stat_name
, DECODE(N.class, 1,'User', 2,'Redo', 4,'Enqueue', 8,'Cache', 16,'OS'
, 32,'Real Application Clusters', 64,'SQL', 128,'Debug'
, 8+64,'Cache + SQL', 8+32,'Cache + Real Application Clusters'
, N.class) AS stat_class
from v$sesstat S
, v$statname N
, V$session SS
WHERE S.statistic# = N.statistic#
AND SS.sid = S.sid
AND S.value <> 0
AND LOWER(N.name) LIKE '%cpu%session%'
ORDER BY sid

Неизвестный
28.07.2008, 17:07
общий
Огромное спасибо, Евгений!
Форма ответа