|
|
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Господа , подскажите пожалуйста ! Создал очередь, кладу в неё события с заданным свойством expiration равным 5 . Всё прекрасно работает и события спустя 5 сек перестают быть видны для всех подписчиков. Но, наблюдаю такое явление, если событие не было прочитано каким-то подписчиком, то оно хоть и становится недоступно спустя 5 сек, но тем не менее навсегда застревает в таблице очереди :(. Вопрос, каким образом должна производится чистка данной таблицы очередей, вручную или для этого надо настроить какой-то оракловый процесс ( job) или что-то ещё ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2010, 18:44:13 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Какое значение установлено для параметра инициализации aq_tm_processes? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2010, 19:36:54 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
SQL*PlusКакое значение установлено для параметра инициализации aq_tm_processes? Специально никак не выставлял. Его необходимо установить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2010, 19:54:50 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Выполните Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2010, 20:34:50 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Прошу прощение за паузу. Вот результат от select * from v$version --------------------------------- Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 12:29:41 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
В Oracle11g (как и в 10g) параметр AQ_TM_PROCESSES выставлять не нужно. Oracle® Database Reference 11g Release 1 (11.1)AQ_TM_PROCESSES controls time monitoring on queue messages and controls processing of messages with delay and expiration properties specified.You do not need to specify a value for this parameter because Oracle Database automatically determines the number of processes and autotunes them, as necessary. Therefore, Oracle highly recommends that you leave the AQ_TM_PROCESSES parameter unspecified and let the system autotune. Поэтому я и спросил у вас версию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 14:41:43 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Oracle® Streams Advanced Queuing User's Guide 11g Release 1 (11.1)A message is considered PROCESSED only when all intended consumers have successfully dequeued the message. A message is considered EXPIRED if one or more consumers did not dequeue the message before the EXPIRATION time. When a message has expired, it is moved to an exception queue. Не переходят в exception queue? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2010, 15:38:48 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Очень странная ситуация ... Если выполнить select * from ALL_QUEUES то видно что для моей очереди (имеющей тип NORMAL_QUEUE) ровно как и для очереди исключений (EXCEPTION_QUEUE) используется одна и та же таблица ! Но при создании очереди я не указывал какую использовать таблицу для EXCEPTION_QUEUE! Теперь вопрос нужно ли мне указать таблицу для EXCEPTION_QUEUE и как я понимаю в неё попадут все записи expired но это означает что её тоже надо будет как-то чистить! Как чистить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2010, 16:17:05 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
mgA, Like any other queue, the exception queue must be enabled for dequeue using the DBMS_AQADM.START_QUEUE procedure. и далее как обычно через dbms_aq.deque. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2010, 16:44:17 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
aqcleanerи далее как обычно через dbms_aq.deque.Не совсем, "как обычно" Exception Queues An exception queue is a repository for expired or unserviceable messages. Applications cannot directly enqueue into exception queues. Also, a multiconsumer exception queue cannot have subscribers associated with it. However, an application that intends to handle these expired or unserviceable messages can dequeue them exactly once from the exception queue using remove mode. The consumer name specified while dequeuing should be null. Messages can also be dequeued from the exception queue by specifying the message identifier. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.06.2010, 16:51:16 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Т.е. я правильно понимаю что даже если мне эти сообщения не нужны то подругому от них избаиться, кроме как полуить, не получится ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 11:35:36 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Да, an application that intends to handle these expired or unserviceable messages can dequeue them exactly once from the exception queue using remove mode. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 16:23:19 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Не проще ли протухшие сообщения игнорировать (обрабатывать) на стороне получателя, чем откладывать всторону, а потом разбираться с ними отдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 19:26:24 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
mcureenabНе проще ли протухшие сообщения игнорировать (обрабатывать) на стороне получателя А с чего они "протухли"-то? Не с того ли, что получатель не смог их вовремя обработать? Тогда логичный вопрос: а откуда уверенность , что получатель сможет обработать тухлятину? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2010, 19:36:13 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Спасибо всем кто ответил. Тут просто проблема ещё и в том что получателей несколько, кому из них убирать устаревшие сообщения ? Вообщем пришлось отправителю самому периодический получать все устаревшие сообщения. Всё это как-то некрасиво что ли, почему бы всему что устарело не исчезнуть сразу после устаревания ? И ещё походу пока реализовывал вот о чём подумал, а можно скажем не получая сообщейни из очереди просто стереть строки из таблицы очереди? В смысле не нарушит ли это какую-то целостность очереди ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 15:43:24 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
mgAВ смысле не нарушит ли это какую-то целостность очереди ? Это называется "SQL Approach" и, если не ошибаюсь , является документированным способом работы с очередью AQ - давно доку не перечитывал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 16:05:41 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousmcureenabНе проще ли протухшие сообщения игнорировать (обрабатывать) на стороне получателя А с чего они "протухли"-то? Не с того ли, что получатель не смог их вовремя обработать? Тогда логичный вопрос: а откуда уверенность , что получатель сможет обработать тухлятину? А в чём проблема то? Получатель тянет сообщение, оно по сроку тухлое, получатель отправляет это сообщение ф топку. Другое дело, что получатель вообще не читает сообщения... Афтору следует подумать, а не сигнализирует ли образование тухляка о какой либо проблеме? Если так, то следует завести процесс-монитор, который будет читать очередь исключений и сигналить о проблеме. Надо заметить, что исключения могут возникать не только по таймауту но и по количеству попыток обработать сообщение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 16:57:32 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
mcureenab Другое дело, что получатель вообще не читает сообщения... Афтору следует подумать, а не сигнализирует ли образование тухляка о какой либо проблеме? Ну вот видишь, сам догадался :) :) :) Еще один кейс - получатель не успевает обрабатывать поток сообщений, в этом случае доп. нагрузка в виде необходимости читать тухляк образует петлю положительной обратной связи с неизбежной остановкой сервиса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 17:02:08 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousmgAВ смысле не нарушит ли это какую-то целостность очереди ? Это называется "SQL Approach" и, если не ошибаюсь , является документированным способом работы с очередью AQ - давно доку не перечитывал :) Наверное всётаки ошибаешься. Не видал я такой шняги. Хотя делать SQL запросы к представлениям над таблицей очереди можно и иногда полезно. Вот нагугул такое письмо. Delete-from-a-queue-table PS. Как то раз удаляли криво созданную (через импорт) непомерно распухшую очередь. Скрипт надолго завис на операции dequeue. Вероятно, оракл таким образом чистил удаляемую очередь или подписчика. Проблему решили очисткой таблицы очереди посредством truncate table. После удаления таблицу и очереди создали заново. О каких либо проблемах с этой очередью я больше не слышал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 17:05:33 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous Еще один кейс - получатель не успевает обрабатывать поток сообщений, в этом случае доп. нагрузка в виде необходимости читать тухляк образует петлю положительной обратной связи с неизбежной остановкой сервиса. Ok. Встречал такое, когда подписчик слишком долго лежал и не читал сообщения, чистка очереди заняла столько времени, что сервис был убит по таймауту. Решение видится в том, чтобы во время простоя какой то другой сервис читал сообщения из шатной очереди или из очереди исключений (при использовании механизма протухания). Чисто технически проще читать очередь исключений, чем координировать процессы, читающие из одного подписчика. Так чтобы получатель тратил заметное время на dequeue наблюдал только при использовании callback процедуры на очереди. Там запуск процесса в котором выполнялась callback процедура занимал много времени. PS. Интересно, если при создании подписчика в rule указать что то типа "sysdate - 1 < msg_timestamp". Не будут ли такие сообщения удалены автоматически в процессе dequeue или даже асинхронно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 17:56:22 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
mcureenab Вот нагугул такое письмо. Delete-from-a-queue-table Жаль ссылка не открывается :( . Всё же подводя итоги, получается что чистить таблицу очереди допустимо хоть и не совсем документировано, правильно? Тогда, наверное проще будет под job посадить запрос на удаление устаревших сообщений чем читать всё что там набежало ( а набежит очень много, это у меня очередь которая следит за обновлением данных в большой таблице > 10млн. строк) . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 19:18:03 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Когда подписчиков несколько (при этом в моём случае вполне нормально что часть из них временно отсутствует - они могут включиться в работу в любой момент) то избежать устаревших сообщений очень сложно. Особенно когда это различные процессы написанные на различных языках и работающие на различных машинах. В текущей реализации у меня сам отправитель перед отправкой очередного сообщения читает "устаревший" мусор, затем только отправляет новые сообщения. Решение мне кажется не совсем хорошим, потому что по наблюдениям иногда происходит задержка на вставку данных (триггер на вставку - он же кладёт новые сообщения в очередь и чистит предварительно мусор из очереди исключений), что иногда просто приводит к паузам до нескольких секунд. Альтернативу я вижу только в отдельном job процессе который будет периодический читать мусор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2010, 19:31:16 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
mgA Всё же подводя итоги, получается что чистить таблицу очереди допустимо хоть и не совсем документировано, правильно? Я бы сказал, совсем недокументировано, на свой страх и риск. Только вот не совсем понятно, зачем тебе очередь, если сообщения протухают в таком диком колличестве. ИМХО, тут что то типа сигналов (см. DBMS_ALERT) нужно делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 12:18:59 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
Понял, спасибо. mcureenab Только вот не совсем понятно, зачем тебе очередь, если сообщения протухают в таком диком колличестве. ИМХО, тут что то типа сигналов (см. DBMS_ALERT) нужно делать. Да я бы с удовольствием применил DBMS_ALERT, но ведь как я понимаю он коммиты делает сам ? А мне коммиты не хочется делать посреди своих транзакций, и уж тем более подвиснуть лишний раз в блокировке... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 15:50:16 |
|
||
|
Oracle QA чистка очереди.
|
|||
|---|---|---|---|
|
#18+
dbms_alert -- Signal an alert. -- Input parameters: -- name -- Name of the alert to signal. The effect of the signal call only -- occurs when the transaction in which it is made commits. If the -- transaction rolls back, then the effect of the signal call is as -- if it had never occurred. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2010, 17:08:52 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=36699174&tid=1887515]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
88ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 463ms |

| 0 / 0 |
