Недействительные и Неприменимые Объекты

Рубрика: Управление производительностью

Воздействие на производительность:

  • Объекты кода PL/SQL перекомпилируются.

  • Индексы пересоздаются.

Недействительные и Неприменимые Объекты

Недействительные объекты PL/SQL и неприменимые индексы оказывают влияние на производительность. Недействительный объект PL/SQL должен быть перекомпилирован прежде, чем он сможет использоваться. Это потребует времени на перекомпиляцию, которое надо будет добавить к первому действию, которое пытается получить доступ к пакету PL/SQL, процедуре или функции. Если PL/SQL не удалось перекомпилировать успешно, операция завершится с ошибкой. Неприменимые индексы игнорируются оптимизатором. Если надлежащая производительность SQL-оператора зависит от индекса, который был отмечен как неприменимый, производительность не улучшится, пока индекс не будет пересоздан.

Недействительные объекты PL/SQL: Текущий статус объектов PL/SQL может быть просмотрен, запрашивая словарь данных. Можно найти недействительные объекты PL/SQL следующим образом:

    

SELECT object_name, object_type FROM DBA_OBJECTS
WHERE status = 'INVALID';

По умолчанию метрика количества недействительных объектов владельца проверяется каждые 24 часа. Если число объектов для отдельного владельца превышает два, возникает предупреждение.

Если Вы находите объекты PL/SQL с состоянием INVALID, первыq вопрос, на который Вы должны ответить - “Был ли этот объект когда-либо действительным (VALID)?” Разработчики приложений часто забывают очищать код, который не работает. Если объект PL/SQL является недействительным из-за ошибки в коде, мало что можно сделать, чтобы исправить ошибку. Если процедура была действительна в некоторый момент в прошлом и недавно стала недействительной, у Вас есть две опции для того, чтобы решить проблему:

  • Ничего не делать. Большинство PL/SQL объектов автоматически перекомпилируются если нужно, когда их вызывают. Пользователи испытывают небольшую задержку, пока происходит перекомпиляция. (В большинстве случаев эта задержка даже не заметна.)

  • Вручную перекомпилировать недействительный объект.

Недействительные PL/SQL объекты могут быть вручную перекомпилированы в Enterprise Manager или посредством команд SQL:

    

ALTER PROCEDURE HR.add_job_history COMPILE;

Ручная перекомпиляция пакетов PL/SQL состоит из двух шагов:

    

ALTER PACKAGE HR.maintainemp COMPILE;
ALTER PACKAGE HR.maintainemp COMPILE BODY;

Неприменимые индексы: Неприменимые индексы могут быть найдены, запрашивая представление словаря данных DBA_INDEXES:

    

SELECT index_name, table_name FROM DBA_INDEXES
WHERE status = 'UNUSABLE';

Для разделенных индексов состояние хранится в представлении DBA_IND_PARTITIONS.

Неприменимые индексы делаются действительными посредством их пересоздания, чтобы повторно вычислить указатели. Восстановление неприменимого индекса пересоздает индекс в новом расположении и затем удаляет неприменимый индекс. Это может быть сделано в Enterprise Manager или посредством команд SQL:

    

ALTER INDEX HR.emp_empid_pk REBUILD;
ALTER INDEX HR.emp_empid_pk REBUILD ONLINE;
ALTER INDEX HR.email REBUILD TABLESPACE USERS;

Если предложение TABLESPACE не указывается, индекс пересоздается в том же самом табличном пространстве , где он существовал прежде. Предложение REBUILD ONLINE позволяет пользователям продолжать обновлять таблицу индекса, в то время как происходит пересоздание индекса. (Без ключевого слова ONLINE пользователи должны ожидать, пока не закончится пересоздание, прежде, чем выполнить DML на таблице, индекс которой пересоздается. Если индекс неприменим, он не применяется во время пересоздания, даже если используется ключевое слово ONLINE.)

Enterprise Manager использует действие Reorganize, чтобы восстановить неприменимый (UNUSABLE) индекс.

Отметьте: Пересоздание индекса требует, чтобы было доступно свободное пространство для пересоздания. Проверьте, что есть достаточно места прежде, чем делать попытку пересоздания. Enterprise Manager автоматически проверяет требования пространства.

Далее: Сбой и Восстановление экземпляра

Смотрите также
Комментарии
Написать

(обязательно)

(обязательно)

Это не спам (обязательно)