Завершить длительный процесс - PullRequest
0 голосов
/ 03 марта 2011

Привет, я использую C на Solaris. У меня есть процесс, который подключается к базе данных. Мне нужно определить, выполняет ли один и тот же процесс один и тот же запрос в течение длительного времени (скажем, 15 секунд), а затем мне нужно отключиться и восстановить соединения с базой данных.

Я знаю, что могу проверить на то же процессы с идентификаторами процессов. Но я меня больше беспокоит знание того, как определить, является ли тот же процесс выполняется тот же запрос?

Любая помощь глубоко заметна.

Ответы [ 3 ]

1 голос
/ 10 марта 2011

«Мне нужно определить, выполняет ли один и тот же процесс один и тот же запрос в течение длительного времени (скажем, 15 секунд), затем мне нужно отключиться и восстановить соединения с базой данных».

Не уверен, к какой проблеме вы обращаетесь.

Если вы потеряете соединение, то сеанс базы данных может продолжаться в течение некоторого времени. Потенциально все еще держит замки тоже.

Кроме того, если блок PL / SQL зацикливается и выполняет 1000 запросов, каждый из которых занимает одну десятую секунды, должен ли это считаться 1 оператором для вашей логики прерывания?

Вы можете посмотреть на V $ SESSION и SQL_ID или SQL_HASH_VALUE. Затем проверьте снова через пятнадцать секунд и посмотрите, изменилось ли оно. Вы также можете посмотреть на v $ sessstat / v $ statname для таких вещей, как «число выполнения» или «пользовательские вызовы», чтобы определить, является ли это один и тот же SQL, выполняющийся в течение длительного времени, или несколько вызовов SQL.

1 голос
/ 03 марта 2011

если вы начинаете свои запросы прямо с вашего клиента, вы можете проверить v$session.last_call_et. В этом столбце показано, сколько секунд назад был запущен последний вызов сервера для этого сеанса. Вызов сервера в этом случае является запросом на выполнение. Это не сработает, если ваш клиент запускает блок pl / sql и запускает запросы оттуда. В этом случае last_call_et будет указывать на начало блока pl / sql, так как это был последний элемент, запущенный вашей сессией. Это может быть самым простым.

Помогает ли?

Рональд - http://ronr.blogspot.com

0 голосов
/ 06 марта 2011

Я советую вам устранить основную причину, а не лечить симптомы.

...