powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / X$KGLOB и прочие странности при старте приложения
8 сообщений из 8, страница 1 из 1
X$KGLOB и прочие странности при старте приложения
    #38747127
shared_pool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приложение на старте зачем-то делает
Код: plsql
1.
2.
3.
4.
SELECT DISTINCT SUBSTR(KGLNAOBJ,11) SID
FROM
X$KGLOB WHERE KGLHDNSP = 7 AND KGLNAOBJ LIKE 'ORA$ALERT$%' AND
BITAND(KGLHDFLG,128)!=0 UNION SELECT DISTINCT SID FROM DBMS_ALERT_INFO;


при этом тормозит секунд так 10.
Есть ли идеи, что это оно хочет сделать и можно ли это как-то ускорить настройками БД или сегментов? Может, баг какой-то?
Версия 11.2.0.3, соответственно, сразу после flush shared_pool некоторое время работает нормально.
...
Рейтинг: 0 / 0
X$KGLOB и прочие странности при старте приложения
    #38747146
Фотография Я и ёжик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот запрос вызывается только при первом вызове DBMS_ALERT.register в сессии, связан он с тем, что при использовании в первый раз в сессии пакета DBMS_ALERT, необходимо удалить потерянные pip-ы alert-а. Для этого осуществляется просмотр всего shared_pool.

Начиная с 11GR2 у функции DBMS_ALERT.register есть параметр cleanup, который показывает выполнять ли эту очистку.
Oracle® Database PL/SQL Packages and Types Reference
11g Release 2 (11.2)DBMS_ALERT.REGISTER (
name IN VARCHAR2,
cleanup IN BOOLEAN DEFAULT TRUE);

cleanup
Specifies whether to perform cleanup of any extant orphaned pipes used by the DBMS_ALERT package. This cleanup is only performed on the first call to REGISTER for each package instantiation. The default for the parameter is TRUE.
...
Рейтинг: 0 / 0
X$KGLOB и прочие странности при старте приложения
    #38747205
shared_pool
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К счастью или сожалению, не имею доступа к исходникам. Есть ли возможность изменить поведение по умолчанию или что-то еще придумать для ускорения этого несчастья?
...
Рейтинг: 0 / 0
X$KGLOB и прочие странности при старте приложения
    #38747276
OlegON
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bug 9437010 DBMS_ALERT.REGISTER is slow
Range of versions believed to be affected Versions BELOW 12.1
...
Рейтинг: 0 / 0
X$KGLOB и прочие странности при старте приложения
    #38747374
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была еще фишка, что DBMS_ALERT_INFO разрастается неподецки и выборка из нее занимает неприлично много времени (и существующий индекс здесь не помогает)
Job-ы стали очень медленно работать. Помогите разобраться.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
X$KGLOB и прочие странности при старте приложения
    #40103784
serpv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DBMS_ALERT.REGISTER (
   name      IN  VARCHAR2,
   cleanup   IN  BOOLEAN DEFAULT TRUE);

	name
Name of the alert in which this session is interested
	cleanup
Specifies whether to perform cleanup of any extant orphaned pipes used by the DBMS_ALERT package. 
This cleanup is only performed on the first call to REGISTER for each package instantiation. 
The default for the parameter is TRUE.

Есть нагруженная СУБД, 19с версия, раскучерявленое приложение активно пользует DBMS_ALERT короткоживущими сессиями через ORDS. сессии оттормаживают на сабжевом запросе по X$KGLOB, трейсы это показывают.
High Waits on "Latch: library cache" Linked to DBMS_ALERT.REGISTER Queries on X$KGLOB Even With Fix Bug 9437010 (Doc ID 2238764.1) дает пояснение причин - cleanup инициализация, nothing can be done to mitigate the higher initial costs of the first call.
Раскопал хранимую процедуру с вызовом проблемного DBMS_ALERT.REGISTER, на тесте попробовал cleanup => false - запрос по X$KGLOB ушел, функциональных нарушений не оттестировано, но коректность и полнота тесткейсов под сомнением, т.к. пока не хватает понималки творческого замысла автора самого приложения, возможных последствий от "непрочищеных чакр" и как последствия правильно ловить на тесте.

Кто работал с этим пакетом, проясните плз смысл последнего параметра cleanup, не догоняю по документации. Какие именно 'ORA$ALERT$%' pipes считаются за "orphaned"? При первом вызове DBMS_ALERT.REGISTER (alertname, TRUE) что именно удалится-зачистится и насколько потенциально опасно как для логики приложения так и здоровья shared pool БД самовольно сменить в приложении cleanup на FALSE?
...
Рейтинг: 0 / 0
X$KGLOB и прочие странности при старте приложения
    #40103808
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serpv,

Заведите SR на сайте MOS.
Пусть техподдержка официально ответит на ваши вопросы и даст рекомендации.
...
Рейтинг: 0 / 0
X$KGLOB и прочие странности при старте приложения
    #40107750
serpv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вердикт наших DBA после общения с саппортом вот такой:
orphaned pipes - это именно те, которые остаются из под сессий, выполняемый код в которых не удосужился или не получил возможности сделать DBMS_ALERT.REMOVE или DBMS_ALERT.REMOVEALL после использования DBMS_ALERT. cleanup => true - костыль от неаккуратного кода.

Логику приложения cleanup => false не нарушит, сигналы по алертам-сиротам просто проигнорируются, риск только в затрате ресурсов на эти отправки сигналов, возможно несколько вырастет общее потребление CPU со стороны приложения.
Бесхозные алерты со временем удалятся фоновыми процессами СУБД, их бесконтрольное накопление можно мониторить например запросом SELECT count(SID) FROM DBMS_ALERT_INFO, для поиска именно бесхозных можно сопоставлять строки DBMS_ALERT_INFO.sid текущим SID SERIAL# из v$session.

т.е. все последствия отражены вот тут:
Код: plaintext
1.
2.
DBMS_ALERT.REMOVE
Removing alerts is important because it reduces the amount of work done by signalers of the alert.
If a session dies without removing the alert, that alert is eventually (but not immediately) cleaned up.

Соответственно можно смело применить изменение cleanup => false для проблемного DBMS_ALERT.REGISTER при условии контроля за накоплением алертов в DBMS_ALERT_INFO и связанным с ним потреблением CPU. Если что пойдет не так - вашему SR всегда будут рады :)

остались открытыми вопросы:
1. Почему в документации Oracle, вместо что бы явно написать про удаление-неудаление алертов завершенных сессий, зачем-то пространно написано про «cleanup of any extant orphaned pipes used by the DBMS_ALERT package»,
2. Зачем «проверочный» запрос на cleanup=>true помимо SELECT DISTINCT SID FROM DBMS_ALERT_INFO делает дополнительно фуллскан по всему shared pool.

так что запрос
Код: plsql
1.
SELECT DISTINCT SUBSTR(KGLNAOBJ,11) SID FROM X$KGLOB WHERE KGLHDNSP = 7 AND KGLNAOBJ LIKE 'ORA$ALERT$%' AND BITAND(KGLHDFLG,128)!=0

тоже возможно имеет смысл в качестве мониторинга последствий cleanup => false.

У меня главной проблемой являлся запрос по X$KGLOB, критично увеличивающий время DBMS_ALERT.REGISTER, тоже потребляющий ресурсы. Этот запрос при cleanup => false ушел, проблему это решило, без последствий или особенностей. Мониторили начнут ли копиться пайпы. Этого не произошло – т.е. приложение аккуратно за собой прибирает или фоновые процессы СУБД это успевают сделать. Специальный мониторинг по порогам и с оповещениями не понадобился, в моем случае все хорошо.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / X$KGLOB и прочие странности при старте приложения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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