Oracle Database, Optimizer Statistics Advisor

Материал из sysadm
Перейти к навигации Перейти к поиску

Ссылки по теме


В Oracle Database 12c появился новый инструмент, помощник по оптимизации статистики Optimizer Statistics Advisor (OSA).

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


Управление периодом хранения данных, собираемых OSA.

-- определение периода хранения данных собранных OSA, по умолчанию это 30 дней
select TASK_NAME,parameter_name, parameter_value FROM DBA_ADVISOR_PARAMETERS WHERE task_name='AUTO_STATS_ADVISOR_TASK' and PARAMETER_NAME='EXECUTION_DAYS_TO_EXPIRE';

-- изменение периода хранения данных собранных OSA
EXEC DBMS_ADVISOR.SET_TASK_PARAMETER(task_name=> 'AUTO_STATS_ADVISOR_TASK', parameter=> 'EXECUTION_DAYS_TO_EXPIRE', value => 10);

Важно! В Multitenant среде автоматическая чистка данных OSA на основе периода хранения EXECUTION_DAYS_TO_EXPIRE в подключаемых PDB базах не выполняется, поэтому табличное пространство SYSAUX будет постоянно расти. Для чистки данных, необходимо переключится в контекст соответствующей PDB и запустить процесс чистки вручную. Данные будут очищаться на основе заданного для данной базы значения EXECUTION_DAYS_TO_EXPIRE. Если чистка не выполнялась длительное время, то чистка большого объема может создать существенную нагрузку и может выполняться очень долго, поэтому чистить лучше частями, а не все сразу. Для чистки частями задайте сначала большой период хранения EXECUTION_DAYS_TO_EXPIRE и постепенно уменьшайте его перед каждой итерацией чистки.

В не Multitenant среде также возможны проблемы с автоматической чисткой

Запуск чистки данных OSA вручную

exec prvt_advisor.delete_expired_tasks;

OSA хранит данные отдельно по каждой процедуре сбора данных.

-- список операций сбора данных, по которым данные еще не очищены
SELECT EXECUTION_NAME, EXECUTION_END, STATUS FROM DBA_ADVISOR_EXECUTIONS
WHERE TASK_NAME = 'AUTO_STATS_ADVISOR_TASK'
ORDER BY 2;

-- количество неочищенных операций сбора данных
SELECT count(*) FROM DBA_ADVISOR_EXECUTIONS
WHERE TASK_NAME = 'AUTO_STATS_ADVISOR_TASK';

Как известно, удаление записей в таблице не уменьшает размер ее сегмента, поэтому после основательной чистки для освобождения места в табличном пространстве SYSAUX, необходимо выполнить следующее:

alter table WRI$_ADV_OBJECTS move;
alter index WRI$_ADV_OBJECTS_PK rebuild;
alter index WRI$_ADV_OBJECTS_IDX_01 rebuild;
alter index WRI$_ADV_OBJECTS_IDX_02 rebuild;