GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Дерево каталогов NESTED SETS (вложенные множества) и управление им(151729)
Дерево каталогов NESTED SETS (вложенные множества) и управление им. Часть 2(25840)
SQL сервер PostgreSQL(23468)
Теоретические основы реляционных баз данных(22566)
Введение в Базы данных(18238)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Базы данных » Анализ статистики базы данных InterBase/FireBird

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


Рудюк Сергей
sergey@rudjuk.kiev.ua
http://www.rudjuk.kiev.ua/

Статистика базы данных InterBase/FireBird, полученная через gstat или Services API, предоставляет большое количество статистических данных, которые могут быть использованы для анализа работы сервера и самой базы данных. Приложения, работающие с базой данных, могут корректно работать с транзакциями и самими данными, то есть не создают длительные активные транзакции, не запускают длительные snapshot транзакции. Все это верно для небольшого количества одновременно работающих пользователей, но как только количество пользователей возрастет на порядок и следовательно увеличиться количество операций по вставке, редактированию и удалению данных, могут возникнуть проблемы по сборке, так называемого, мусора. Проведенная и проанализированная статистика может помочь в процессе сборки мусора.

С помощью утилиты gstat с соответствующими ключами или Services API можно получить следующие виды статистики:

  • Статистика заголовочной страницы - это информация о глобальных свойствах всей базы данных, хранящаяся на заголовочной страницы каждой базы данных ( -header );
  • Статистика страниц данных – информация о таблицах содержащихся в базе данных ( -data);
  • Статистика индексов – информация об индексах в базе данных (-index);
  • Статистика системных таблиц (-system).

Пример использования gstat:

gstat  –header  –user SYSDBA  –password masterkey  c:work.gdb 
gstat  –all  –user SYSDBA  –password masterkey  c:work.gdb  получаем полную 
статистическую информацию базы данных

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

Для примера будем рассматривать конкретную базу данных, которая состоит из 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 можно выбирать какую облать данных нужно вывести:

fibStatistical.Options := [DataPages];      //соответствует ключу –data

fibStatistical.Options := [HeaderPages];  //соответствует ключу –header

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

Screen.Cursor := crSQLWait;

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

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

По завершению выполняем следующие действия:

Screen.Cursor := crDefault;    // Возвращаем курсор в стандартный вид

fibStatistical.Active := False;   // Деактивируем процесс

В итоге у нас должно получиться следующее:

 
16.03.2006
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.