Опис основних розділів статистики бази даних

Для прикладу будемо розглядати конкретну базу даних, яка складається з 12
таблиць, велика частина роботи проводиться з однією таблицею, яка посилається на
4 довідника і щоденний приріст записів складає близько 1000 записів.
Загальна кількість записів на момент написання статті становить 192285 записів.
Розмір файлу бази даних складає 302 мегабайта.

Запустивши утиліти gstat (з ключем-header) або використавши компонент
FIBStatisticalServices можна отримати статистичні дані про нашій базі даних.
Частина інформації є статичною, частина – змінюється в залежності від
відбуваються в базі даних змін.

Приклад заголовної інформації:

Database header page information:
Flags 0
Checksum 12345
Generation 724306
Page size 4096
ODS version 10.1
Oldest transaction 723951
Oldest active 724301
Oldest snapshot 724301
Next transaction 724304
Bumped transaction 1
Sequence number 0
Next attachment ID 0
Implementation ID 16
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Oct 23, 2004 0:20:46
Attributes force write
Variable header data:
Sweep interval: 20000

CHECKSUM – контрольна сума


Контрольна сума матися як на заголовної сторінці, так і на будь-який
сторінці бази даних, але в сучасних версіях InterBase / FireBird ця сума не
використовується і її значення завжди дорівнює 12345.

PAGESIZE – розмір сторінки


Розмір сторінки, вимірюється в байтах. Параметр, який встановлює одне з
важливих властивостей бази даних. Цей параметр встановлюється при створення бази
даних, а також при її відновленні з резервної копії і визначає розмір
всіх сторінок бази даних.

OLDEST TRANSACTION


Цей параметр показує ідентифікатор найстарішої зацікавленої транзакції
в базі даних. Значення цього параметра часто порівнюється з параметром NEXT
TRANSACTION. Різниця цих параметрів показує кількість сміття в базі даних
і можна судити про доцільність виконання резервного копіювання. Різниця
цих параметрів для нашої бази даних складає 353, для експерименту зробимо
резервну копію з подальшим відновлення (для цих операцій були
використані компоненти FIBBackUPService і FIBRestoreService) і знову отримаємо
статистичну інформацію.

Результат наступний:

 Oldest transaction     1
Oldest active 2
Oldest snapshot 1
Next transaction 35

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

OLDEST ACTIVE і OLDEST SNAPSHOT


Параметр OLDEST ACTIVE ідентифікує найстарішу активну транзакцію, у
більшості випадків його значення близьке до NEXT TRANSACTION, параметр OLDEST
SNAPSHOT визначає кількість транзакцій з рівнем ізоляції SNAPSHOT, які
створюють старі версії записів в базі даних (сміття).

SWEEP INTERVAL


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

Далі будемо розглядати статистичну інформацію по таблиці й індексами, з
якої здійснюється найбільше операцій.

        DECLARATIONS (129)
Primary pointer page: 156, Index root page: 157
Data pages: 8082, data page slots: 8082, average fill: 87%
Fill distribution:
0 – 19% = 0
20 – 39% = 0
40 – 59% = 0
60 – 79% = 0
80 – 99% = 8082

Де DECLARATIONS – ім'я таблиці, 129 – ідентифікатор таблиці, записаний у
системної таблиці RDB $ RELATIONS. PRIMARY POINTER PAGE – це номер першої
сторінки покажчиків у базі даних для цієї таблиці, INDEX ROOT PAGE – номер
першої сторінки покажчика для індексів цієї таблиці. FILL DISTRIBUTION – таблиця
показує кількість заповнювання сторінок, тобто остання сторінка
заповнена на 80% -99%. Якщо дані на сторінках сильно розряджені, то слід
переглянути саму структуру таблиці, може бути, варто з цієї таблиці виділити
зберігання будь то даних в довідники.

Статистика по первинному ключу виглядає наступним чином:

Index PKDECLARATIONS (9)
Depth: 3, leaf buckets: 1052, nodes: 192285
Average data length: 6.00, total dup: 0, max dup: 0
Fill distribution:
0 – 19% = 0
20 – 39% = 0
40 – 59% = 908
60 – 79% = 34
80 – 99% = 110

Параметр DEPTH визначає глибину індексу, тобто показує, скільки гілок
в <дереві> необхідно пройти, щоб обчислити потрібну запис. Тут потрібно
відмітити що глибина індексу не повинна перевищувати значення 3, інакше ефект від
використання індексу значно менше і для виправлення цього необхідно
збільшити розмір сторінки (PAGE SIZE) в базі даних.

Програмна реалізація отримання статистики бази даних в Delphi


Для отримання статистики був використаний компонент FIBStatisticalServices
(FibStatistical) і область виводу текстової інформації Memo.

Для того щоб стартувати процес отримання статистики, необхідно заповнити
певні поля в компоненті fibStatistical:

/ / Вказуємо користувача
fibStatistical.Params.Add(“user_name=SYSDBA”);
/ / І пароль
fibStatistical.Params.Add(“password=masterkey”);
/ / Не запитувати кожен раз пароль
fibStatistical.LoginPrompt := False;
/ / Шлях до файлу бази даних
fibStatistical.DatabaseName := edDBName.Text;
/ / Активуємо процес
fibStatistical.Active := True;
/ / І стартуємо сам процес
fibStatistical.ServiceStart;

Слід зазначити, що в нашому прикладі виводити вся статистична інформація,
але за допомогою властивості Options можна вибирати яку облать даних потрібно вивести:

/ / Відповідає ключу-data
fibStatistical.Options := [DataPages];
/ / Відповідає ключу-header
fibStatistical.Options := [HeaderPages];


Процес отримання статистики проходить певний час тому, щоб не
бентежити користувача простоєм програми змінимо курсор:

Screen.Cursor := crSQLWait;

Далі нам потрібно відображати інформацію в поле Мемо:

while not (fibStatistical.Eof) do mDBInfo.Lines.Add (fibStatistical.GetNextLine);

По завершенню виконуємо наступні дії:

 Screen.Cursor: = crDefault; / / Повертаємо курсор в стандартний вигляд
fibStatistical.Active: = False; / / деактивувавши процес

У підсумку в нас повинне вийти наступне:


Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*