|
|
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
Есть некий джоб, который разгребает очередь неких заявок. Проблема в том, что джоб выполняется по расписанию. Допустим, раз в минуту. Запускается и обрабатывает накопившиеся к моменту запуска заявки. Если заявок нет - отрабатывает вхолостую и завершается. Но получается, если заявка поступила после того, как джоб уже закончил работу - она целую минуту висит "В очереди". Вот этого простоя до очередного запуска джоба хотелось бы каким-то образом избежать. Можно конечно уменьшить период запуска джоба. Запускать раз в секунду, например. Но на это ДБА как-то косо смотрит (учитывая, что такой джоб не один в базе - его можно понять). Есть-ли какое-то стандартное архитектурное решение у данной проблемы без использования AQ ? Требования следующие: 1) Разгребать очередь должен строго один процесс. (Т.е. спавнить для каждой заявки свой асинхронный процесс в момент постановки - не прокатит) 2) Когда заявок нет - не хотелось бы, чтобы процесс слишком часто запускался, чтобы проверить наличие заявок. 3) Когда заявка поступила, хочется, чтобы процесс как можно быстрее начал её обрабатывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 00:43 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
anvano, на всякий случай сообщу что ставить время срабатывания джоба "раз в секунду" не имеет никакого смысла - можете сами убедиться что запускаться он все равно будет примерно раз в 5 секунд, что связано с механизмом того как оракл запускает джобы. В вашем же случае не понимаю почему не сделать постоянно висящий процесс, который раз в секунду или сколько там просыпается и смотрит не появилось ли новых заявок. Засыпать можно с помощью dbms_lock.sleep, это не должно аффектить перформанс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 05:08 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
anvanoКогда заявка поступила, хочется, чтобы процесс как можно быстрее начал её обрабатывать.Автономка: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 09:27 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
Elic, Сорри, а почему не просто .run ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 12:10 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
авторВ вашем же случае не понимаю почему не сделать постоянно висящий процесс, который раз в секунду или сколько там просыпается и смотрит не появилось ли новых заявок. Засыпать можно с помощью dbms_lock.sleep, это не должно аффектить перформанс. Пока на этом остановились. Но в этом решении есть побочные эффекты. Для продакшена - оно в принципе нормально работает. Но для инстансов разработки и тестирования - не очень, т.к. постоянно висящий процесс лочит используемые пакеты (DDL locks) и не дает накатывать некоторые пакеты. Приходится постоянно помнить, что где-то там висит джоб, который надо остановить. Хотя всё равно вспоминаешь об этом только когда пытаешься скомпилировать какой-то пакет и он залипает. Попробую еще решение на базе Elic`a , чтобы в момент постановки заявки толкать некую процедурину в автономной транзакции, которая изменит время старта нужного джоба на ближайшие несколько секунд. Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 13:37 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
проходил мимо...Elic, Сорри, а почему не просто .run ?Даже не знаю, зачем объяснять разницу между одной и несколькими сессиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2017, 16:43 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
anvanoТребования следующие: 1) Разгребать очередь должен строго один процесс. 2) Когда заявок нет - не хотелось бы, чтобы процесс слишком часто запускался, чтобы проверить наличие заявок. 3) Когда заявка поступила, хочется, чтобы процесс как можно быстрее начал её обрабатывать. Может и job не нужен? Похоже на захват изменений данных в таблицах. Недавно тема была 1266481 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2017, 15:19 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
anvanoбез использования AQа чем AQ не угодил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2017, 15:45 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
-2-anvanoбез использования AQа чем AQ не угодил? +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2017, 15:51 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
Посмотрите возможности пакета DBMS_ALERTDBMS_ALERT supports asynchronous notification of database events (alerts). By appropriate use of this package and database triggers, an application can notify itself whenever values of interest in the database are changed. Может быть это как раз для вашего случая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2017, 16:36 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
SQL*PlusМожет быть это как раз для вашего случая...Хрен редьки не слаще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2017, 16:38 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
-2-anvanoбез использования AQа чем AQ не угодил? Не угодил тем, что я скорее всего не умею его готовить правильно. Сколько раз пробовал - постоянно какие-то проблемы. Чаще всего проблемы возникают при нестабильной сети. В самый неожиданный момент отваливаются подписчики и перестают получать уведомления. При этом внешне всё хорошо - типа всё работает, но при этом ничего не работает. А диагностировать, что "уже не работает", со стороны подписчика практически нереально. Приходилось даже костыли делать типа принудительного перезапуска подписчиков по расписанию. Причем я работал в разное время в разных конторах - проблемы с AQ были схожие везде, не только у меня. Признаться честно - после нескольких факапов со стороны AQ, мы просто сдались и перешли на понятный, простой и железобетонный велосипед собственного производства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2017, 10:10 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
а если повесить триггер на добавление записи в таблицу заявок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2017, 12:00 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
Есть за что погнобить? Код: plsql 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. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 15:00 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
Кроик Семёна если повесить триггер на добавление записи в таблицу заявок? +1, самое логичное с виду? На триггер посадить процедуру которая будет обрабатывать заявки, собственно та которую дергает джоб. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2017, 12:47 |
|
||
|
Механизм заявок. Как заставить джоб начать работать раньше времени?
|
|||
|---|---|---|---|
|
#18+
anvano-2-пропущено... а чем AQ не угодил?проблемы возникают при нестабильной сетичто поменяется в случае замены таблицы с типом велосипед на таблицу с типом aq и заменой джоба по расписанию на по событию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2017, 15:06 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=151&tid=1885458]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
295ms |
get topic data: |
11ms |
get forum data: |
4ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 579ms |

| 0 / 0 |
