На одном из моих серверов есть 3 экземпляра определенного процесса (они запускаются ежедневно в течение примерно 30 минут и завершаются), теперь проблема в том, что иногда любой из них застревает в запросе SQL, а затем застревает навсегда, покаЯ иду и убиваю его вручную. Сервер Exadata Oracle 11g
SET LOCK_TIMEOUT 1800;это еще больше испортит ситуацию, поскольку у меня уже есть наши межпроцессные блокировки.Я ищу другой вариант тайм-аута, если есть какие-либо, которые могут быть запланированы в файле свойств в Unix для этого сервера.Также, если какой-то другой подход поможет мне автоматически остановить зависший SQL.
for i in `jps | grep -i um | cut -d" " -f1`
do ps -eaf | grep $i | grep java | awk 'BEGIN{"date +%H:%M" | getline;d=$0}{print d,$5;e=to_min(d)-to_min($5)
if(e>=120){print e}}
function to_min(a){split(a,b,":")
c=(b[1]*60)+b[2]
return c}'
done
гм (имя процесса)
Здесь я только что написал этот сценарий, который можно запланировать в crontab, чтобы мы могли автоматизировать его отправку электронной почты, если любой такой процесс выполняется сэто имя дольше 2 часов.Но в идеале это не очень хороший подход.
Ожидается некоторая опция, которую можно настроить так, чтобы долгосрочный SQL завершался сам по себе через 2 часа.