Збір статистики оптимізатора вручну

Рада з передової практики: Збирайте статистичні дані досить часто, щоб таблиці ніколи не измель більш ніж на 10 відсотків (приблизно) між періодами збору статистики. Це може зажадати ручного збору статистики або додаткових вікон обслуговування.

Статистичні дані можуть бути вручну зібрані або при використанні Enterprise Manager, або за допомогою пакета DBMS_STATS. Системна статистика може бути зібрана тільки при використанні пакета DBMS_STATS. Системні статистичні дані описують апаратні характеристики системи, такі як введення-виведення, продуктивність ЦП і використання, для оптимізатора запитів.

Вибір пункту меню Gather Optimizer Statistics запускає майстер, який дозволяє Вам вибрати контекст, об'єкти, опції і розклад для завдання, яке збере статистику оптимізатора. Майстер запускає завдання DBMS_STATS.GATHER_ * _ в контексті, який Ви визначаєте: таблиця, схема або база даних. У цього майстра Ви встановлюєте переваги значень за замовчуванням, що використовуються пакетом DBMS_STATS, і Ви вказуєте розклад, щоб запустити завдання в певний час.

Збір статистики вручну як повсякденна операція не рекомендується, тому що статистичні дані збираються більш ефективно і з меншим впливом на користувачів під час вікон обслуговування. Ручне завдання може також бути виконано, якщо автоматичне завдання перестало працювати або було відключено.

Можна також зібрати статистику оптимізатора, використовуючи пакет DBMS_STATS безпосередньо:

SQL> EXEC dbms_stats.gather_table_stats ( 'HR', 'EMPLOYEES');
SQL> SELECT num_rows FROM dba_tables
2 WHERE owner = 'HR' AND table_name = 'EMPLOYEES';
NUM_ROWS
----------
214

Зауважте, що число рядків тепер правильно відображає те, що було в таблиці під час, коли статистичні дані були зібрані. DBMS_STATS також дозволяє ручне збирання статистики для всієї схеми або навіть для цілої бази даних.

Системні статистичні дані не змінюються, якщо робоче навантаження не змінюється значно. В результаті системні статистичні дані не потребують частої коригуванню. Процедура DBMS_STATS.GATHER_SYSTEM_STATS збере системні статистичні дані за вказаний період, або можна запустити збір системної статистики і виконати інший виклик, щоб припинити збір.

Підказка з передової практики: Використовуйте наступну команду, коли Ви створюєте базу даних:

SQL> EXEC dbms_stats.gather_system_stats ( 'NOWORKLOAD');

Опція NOWORKLOAD займає кілька хвилин (в залежності від розміру бази даних) і отримує оцінки характеристик введення-виведення, такі як середній час пошуку читання і швидкість передачі введення-виведення.