Отследить событие сбора статистики по конкретному объекту

Sergey_Korolev
Дата: 26.09.2015 11:51:43
Добрый день!

Версия 11.2.0.3

Задача:
Отследить событие сбора статистики по конкретному объекту(таблица, индекс) с тем, что-бы тут же ее(статистику) немного подправить.
Статистика может собираться в любое время и любым возможным способом:
командой ANALIZE
DBMS_STAT
штатным джобом Oracle

Опробованные способы решения.

1. Создание триггера на DBA_TABLE, поле LAST_ANALISED из под SYS => выбрасывает ошибку Невозможно создать триггер на объект, принадлежащий SYS.

2. Создание триггера на уровне БД. Отлавливаются только ANALIZE.

Какие могут быть еще варианты ?

Вариант создания джоба, который с заданной периодичностью селектит DBA_TABLE, отложен на случай, если не будет ничего лучше.
дбмс_статский советник
Дата: 26.09.2015 12:41:42
Sergey_Korolev
Статистика может собираться в любое время и любым возможным способом
больная голова костылями не лечится.
stax..
Дата: 26.09.2015 14:27:24
Sergey_Korolev,

подменить dbms_stat

.....
stax
stax..
Дата: 26.09.2015 14:31:32
Sergey_Korolev,

не подойдет?

LOCK_TABLE_STATS Procedure

This procedure locks the statistics on the table.

stax
Sergey_Korolev
Дата: 27.09.2015 10:55:15
stax..,

В постановке задачи
автор
Отследить событие сбора статистики по конкретному объекту(таблица, индекс) с тем, что-бы тут же ее(статистику) немного подправить.


Далее решается задача, подробно описанная в
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=97320826083650&id=877645.1&_afrWindowMode=0&_adf.ctrl-state=t935ba30k_4

Конкретно
3) Manually setting the Max or min value of the statistics to reflect what data will be there and maintaining this value to continually reflect new data.

Вручную процедура модификации статистики по проблемным полям работает как нужно.

Здесь задача: автоматизировать процесс. После сбора статистики по проблемным таблицам запустить уже готовую процедуру.

Для команды ANALYZE создан и успешно работает триггер на уровне БД. Там есть соответствующее событие.

Нужно тоже самое для

'auto optimizer stats collection'

DBMS_STATS
Sergey_Korolev
Дата: 29.09.2015 10:29:58
Коллеги,
будем считать эту ситуацию очередным усовершенствованием Oracle. В старых версиях это можно было сделать. Перешли на новые инструменты и про возможность контроля забыли :)
kva6513
Дата: 29.09.2015 11:08:30
Sergey_Korolev,

Не пробовали зарегистрировать обработчика на изменение SYS.TAB$.ANALYZETIME через object change notification ? Натравить на него DBMS_CQ_NOTIFICATION, зарегистрировав PL/SQL callback из постоянно выполняющегося задания DBMS_SCHEDULER-а. Если таблиц для мониторинга не 1-2, то вполне себя оправдает.
Sergey_Korolev
Дата: 29.09.2015 12:44:01
kva6513, спасибо за вариант!

Так в
http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm#ADFNS1014

пишут

Developing Applications with Database Change Notification
Supported Query Types

Change Notification allows the application to register most query types including queries executed as part of stored procedures and REF cursors. When performing a registration, the application is required to be only executing queries, that is, DML or DDL operations are not permitted. In addition, the following types of queries are not supported for registration.

Queries on fixed tables or fixed views.



Или это не так?
Sayan Malakshinov
Дата: 29.09.2015 12:51:13
Sergey_Korolev
Статистика может собираться в любое время и любым возможным способом:
командой ANALIZE
DBMS_STAT
штатным джобом Oracle
не надо собирать как попало и когда попало. Отсюда и отталкивайтесь. Установите регламент сбора, настройте preferences, создайте нужные процедуры и шедульные расписания с джобами.
Elic
Дата: 29.09.2015 12:51:37
Sergey_Korolev
Или это не так?
RTFM Contents of the Dynamic Performance Views (FAQ)