powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle QA чистка очереди.
25 сообщений из 37, страница 1 из 2
Oracle QA чистка очереди.
    #36674052
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
Господа , подскажите пожалуйста !

Создал очередь, кладу в неё события с заданным свойством expiration равным 5 .
Всё прекрасно работает и события спустя 5 сек перестают быть видны для всех подписчиков.

Но, наблюдаю такое явление, если событие не было прочитано каким-то подписчиком, то оно хоть и становится недоступно спустя 5 сек, но тем не менее навсегда застревает в таблице очереди :(.

Вопрос, каким образом должна производится чистка данной таблицы очередей, вручную или для этого надо настроить какой-то оракловый процесс ( job) или что-то ещё ?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36674124
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое значение установлено для параметра инициализации aq_tm_processes?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36674136
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
SQL*PlusКакое значение установлено для параметра инициализации aq_tm_processes?
Специально никак не выставлял.
Его необходимо установить ?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36674173
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выполните
Код: plaintext
1.
SELECT * FROM v$version;
и покажите результат.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36680307
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
Прошу прощение за паузу.

Вот результат от
select * from v$version
---------------------------------
Код: plaintext
1.
2.
3.
4.
Oracle Database 11g Enterprise Edition Release  11 . 1 . 0 . 6 . 0  - 64bit Production
PL/SQL Release  11 . 1 . 0 . 6 . 0  - Production
CORE	 11 . 1 . 0 . 6 . 0 	Production
TNS for Linux: Version  11 . 1 . 0 . 6 . 0  - Production
NLSRTL Version  11 . 1 . 0 . 6 . 0  - Production
----------------------------------
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36680734
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 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.
Поэтому я и спросил у вас версию...
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36680942
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36683292
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
Очень странная ситуация ...
Если выполнить
select * from ALL_QUEUES
то видно что для моей очереди (имеющей тип NORMAL_QUEUE) ровно как и для очереди исключений (EXCEPTION_QUEUE) используется одна и та же таблица !

Но при создании очереди я не указывал какую использовать таблицу для EXCEPTION_QUEUE!

Теперь вопрос нужно ли мне указать таблицу для EXCEPTION_QUEUE и как я понимаю в неё попадут все записи expired но это означает что её тоже надо будет как-то чистить! Как чистить ?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36683367
aqcleaner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mgA,

Like any other queue, the exception queue must be enabled for dequeue using the DBMS_AQADM.START_QUEUE procedure.

и далее как обычно через dbms_aq.deque.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36683386
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36697931
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
Т.е. я правильно понимаю что даже если мне эти сообщения не нужны то подругому от них избаиться, кроме как полуить, не получится ?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36698710
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да,
an application that intends to handle these expired or unserviceable messages can dequeue them
exactly once from the exception queue using remove mode.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36699149
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не проще ли протухшие сообщения игнорировать (обрабатывать) на стороне получателя, чем откладывать всторону, а потом разбираться с ними отдельно.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36699174
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabНе проще ли протухшие сообщения игнорировать (обрабатывать) на стороне получателя
А с чего они "протухли"-то? Не с того ли, что получатель не смог их вовремя обработать?
Тогда логичный вопрос: а откуда уверенность , что получатель сможет обработать тухлятину?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706225
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
Спасибо всем кто ответил.

Тут просто проблема ещё и в том что получателей несколько, кому из них убирать устаревшие сообщения ?

Вообщем пришлось отправителю самому периодический получать все устаревшие сообщения.

Всё это как-то некрасиво что ли, почему бы всему что устарело не исчезнуть сразу после устаревания ?


И ещё походу пока реализовывал вот о чём подумал, а можно скажем не получая сообщейни из очереди просто стереть строки из таблицы очереди? В смысле не нарушит ли это какую-то целостность очереди ?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706295
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mgAВ смысле не нарушит ли это какую-то целостность очереди ?
Это называется "SQL Approach" и, если не ошибаюсь , является документированным способом работы с очередью AQ - давно доку не перечитывал :)
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706466
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousmcureenabНе проще ли протухшие сообщения игнорировать (обрабатывать) на стороне получателя
А с чего они "протухли"-то? Не с того ли, что получатель не смог их вовремя обработать?
Тогда логичный вопрос: а откуда уверенность , что получатель сможет обработать тухлятину?

А в чём проблема то? Получатель тянет сообщение, оно по сроку тухлое, получатель отправляет это сообщение ф топку.
Другое дело, что получатель вообще не читает сообщения...

Афтору следует подумать, а не сигнализирует ли образование тухляка о какой либо проблеме? Если так, то следует завести процесс-монитор, который будет читать очередь исключений и сигналить о проблеме. Надо заметить, что исключения могут возникать не только по таймауту но и по количеству попыток обработать сообщение.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706480
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab
Другое дело, что получатель вообще не читает сообщения...
Афтору следует подумать, а не сигнализирует ли образование тухляка о какой либо проблеме?
Ну вот видишь, сам догадался :) :) :)
Еще один кейс - получатель не успевает обрабатывать поток сообщений, в этом случае доп. нагрузка в виде необходимости читать тухляк образует петлю положительной обратной связи с неизбежной остановкой сервиса.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706500
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousmgAВ смысле не нарушит ли это какую-то целостность очереди ?
Это называется "SQL Approach" и, если не ошибаюсь , является документированным способом работы с очередью AQ - давно доку не перечитывал :)

Наверное всётаки ошибаешься. Не видал я такой шняги. Хотя делать SQL запросы к представлениям над таблицей очереди можно и иногда полезно.

Вот нагугул такое письмо.
Delete-from-a-queue-table

PS. Как то раз удаляли криво созданную (через импорт) непомерно распухшую очередь. Скрипт надолго завис на операции dequeue. Вероятно, оракл таким образом чистил удаляемую очередь или подписчика. Проблему решили очисткой таблицы очереди посредством truncate table. После удаления таблицу и очереди создали заново. О каких либо проблемах с этой очередью я больше не слышал.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706652
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Еще один кейс - получатель не успевает обрабатывать поток сообщений, в этом случае доп. нагрузка в виде необходимости читать тухляк образует петлю положительной обратной связи с неизбежной остановкой сервиса.

Ok. Встречал такое, когда подписчик слишком долго лежал и не читал сообщения, чистка очереди заняла столько времени, что сервис был убит по таймауту.

Решение видится в том, чтобы во время простоя какой то другой сервис читал сообщения из шатной очереди или из очереди исключений (при использовании механизма протухания). Чисто технически проще читать очередь исключений, чем координировать процессы, читающие из одного подписчика.

Так чтобы получатель тратил заметное время на dequeue наблюдал только при использовании callback процедуры на очереди. Там запуск процесса в котором выполнялась callback процедура занимал много времени.

PS. Интересно, если при создании подписчика в rule указать что то типа "sysdate - 1 < msg_timestamp". Не будут ли такие сообщения удалены автоматически в процессе dequeue или даже асинхронно?
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706818
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
mcureenab
Вот нагугул такое письмо.
Delete-from-a-queue-table


Жаль ссылка не открывается :( .
Всё же подводя итоги, получается что чистить таблицу очереди допустимо хоть и не совсем документировано, правильно?

Тогда, наверное проще будет под job посадить запрос на удаление устаревших сообщений чем читать всё что там набежало ( а набежит очень много, это у меня очередь которая следит за обновлением данных в большой таблице > 10млн. строк) .
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36706839
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
Когда подписчиков несколько (при этом в моём случае вполне нормально что часть из них временно отсутствует - они могут включиться в работу в любой момент) то избежать устаревших сообщений очень сложно. Особенно когда это различные процессы написанные на различных языках и работающие на различных машинах.

В текущей реализации у меня сам отправитель перед отправкой очередного сообщения читает "устаревший" мусор, затем только отправляет новые сообщения.

Решение мне кажется не совсем хорошим, потому что по наблюдениям иногда происходит задержка на вставку данных (триггер на вставку - он же кладёт новые сообщения в очередь и чистит предварительно мусор из очереди исключений), что иногда просто приводит к паузам до нескольких секунд.

Альтернативу я вижу только в отдельном job процессе который будет периодический читать мусор.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36707819
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mgA
Всё же подводя итоги, получается что чистить таблицу очереди допустимо хоть и не совсем документировано, правильно?


Я бы сказал, совсем недокументировано, на свой страх и риск.

Только вот не совсем понятно, зачем тебе очередь, если сообщения протухают в таком диком колличестве. ИМХО, тут что то типа сигналов (см. DBMS_ALERT) нужно делать.
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36708510
mgA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
mgA
Гость
Понял, спасибо.

mcureenab
Только вот не совсем понятно, зачем тебе очередь, если сообщения протухают в таком диком колличестве. ИМХО, тут что то типа сигналов (см. DBMS_ALERT) нужно делать.
Да я бы с удовольствием применил DBMS_ALERT, но ведь как я понимаю он коммиты делает сам ?
А мне коммиты не хочется делать посреди своих транзакций, и уж тем более подвиснуть лишний раз в блокировке...
...
Рейтинг: 0 / 0
Oracle QA чистка очереди.
    #36708797
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle QA чистка очереди.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]