Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Управление сбором статистики через DBMS_STATS.GATHER_DATABASE_STATS

17.02.2020 10:44


12.02.2020 13:50
OlegON
 
Несколько табличек выросли достаточно значительно по отношению к ресурсам сервера, чтобы DBMS_STATS.GATHER_DATABASE_STATS успевало отработать на них в период регламентных работ. Соответственно, встала задача, каким образом исключить эти таблицы из списка таблиц, по которым в DBMS_STATS.GATHER_DATABASE_STATS статистика собирается автоматически.

Предложенный Oracle вариант достаточно простой
SQL код:
DBMS_STATS.LOCK_TABLE_STATS ('ПОЛЬЗОВАТЕЛЬ','ТАБЛИЦА'
в принципе - вариант, если у вас собственный софт на базе. Но мне этот вариант не подошел, поскольку некоторый ... софт... пытался собирать статистику по этим таблицам сам, лишая работы администратора, и, мало того, что делал это зверски долго и неправильно, так еще и при блокировке статистики падал, хороня длительную процедуру целиком.

Последователи Тома Кайта предлагали еще один вариант, немного странный
SQL код:
DBMS_STATS.SET_TABLE_PREFS('ПОЛЬЗОВАТЕЛЬ''ТАБЛИЦА''PUBLISH''FALSE'); 
Дело в том, что это не отключает автоматический сбор статистики, а просто прячет ее. Т.е. мою задачу не решало вообще никак. Но, зато навели меня на другую мысль.

Остановился я пока на варианте
SQL код:
DBMS_STATS.SET_TABLE_PREFS('ПОЛЬЗОВАТЕЛЬ''ТАБЛИЦА''STALE_PERCENT''99'); 
т.е. не пересобирать статистику автоматически, пока данные в ней не изменятся на 99%. Если администратор доведет ее до такого состояния, то уже повод будет попробовать собрать статистику автоматически. Зато без ошибок при попытках сделать что-то кривософтом, и статистика на месте...

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.