InterBase - статьи


Анализ статистики базы данных InterBase/FireBird - часть 2


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; // И стартуем сам процесс




- Начало -  - Назад -  - Вперед -