Эта страница переведена машинным переводом. Читайте английский оригинал. English

IBAnalyst теперь является частью HQbird Standard!

IBAnalyst - это инструмент, который позволяет администратору базы данных анализировать детальную статистику Firebird или InterBase и выявлять возможные проблемы с производительностью базы данных, её обслуживанием и взаимодействием приложения с базой данных.

Документация

IBAnalyst наглядно отображает статистику базы данных Firebird (или InterBase) в удобном для пользователя виде и выделяет следующие проблемы:

  • фрагментация таблиц и BLOB-полей,
  • версионирование записей,
  • сборка мусора,
  • эффективность индексов и т.д.

Кроме того, IBAnalyst может автоматически давать интеллектуальные рекомендации по улучшению производительности базы данных и её обслуживанию.

IBAnalyst может получать статистику из работающих производственных баз данных через Services API (рекомендуется) или анализировать текстовый вывод команд gstat -a -r …. Статистика, полученная в периоды пиковой нагрузки, может дать много информации о реальных проблемах производительности в производственных базах данных.

Как IBAnalyst может помочь найти проблемы в вашей базе данных Firebird или InterBase

Давайте рассмотрим ключевые возможности IBAnalyst. Когда вы впервые смотрите на статистику вашей базы данных в IBAnalyst, многое может быть неясно, особенно если IBAnalyst показывает множество предупреждений с красными и жёлтыми ячейками в представлениях Summary, Tables и Index. Рассмотрим несколько реальных примеров статистики.

Сводное представление

IBAnalyst Summary

Страница Summary показывает много информации, но наиболее ценной является состояние транзакций ( пожалуйста, прочитайте описание возможных состояний транзакций в справке IBAnalyst, она доступна по нажатию F1 или в меню Help).

На этом скриншоте видно, что некоторая транзакция активна в течение длительного времени - «60% от среднесуточного значения». IBAnalyst помечает такое состояние транзакции красным, потому что эта транзакция может препятствовать тому, чтобы накопленные версии считались сервером мусором и, соответственно, подвергались сборке мусора. Это возможная причина замедления: чем больше версий существует для некоторой записи, тем больше времени потребуется на её чтение.

Чтобы найти эту долго выполняющуюся транзакцию, вы можете использовать модуль MON$Logger из FBScanner или выполнить прямой запрос к таблицам MON$. Затем, чтобы выяснить, какие таблицы были затронуты долго выполняющимися транзакциями (таблицы с большим количеством версий записей), нужно перейти в представление «Tables» в IBAnalyst.

Представление Tables

IBAnalyst Tables

В представлении «Tables» вы можете видеть таблицы и их важные параметры: количество записей, количество версий записей, длину записи, максимальное количество версий и т.д.

Вы можете отсортировать это представление, чтобы найти самые большие таблицы. Особенно нас интересуют таблицы с большим количеством версий записей - множество версий записей сделает сборку мусора для затронутых таблиц более длительной. Обычно необходимо изменить алгоритмы обновления и удаления, чтобы избавиться от множества версий записей.

Row Versions показывает общее количество версий для конкретной таблицы, а строка Max Vers показывает максимальное количество версий, достигнутое некоторой записью. Например, если посмотреть на таблицу NAB, там 11,9 миллиона записей, общее количество версий - 20932, но одна запись имеет 176 версий. Чтение и разбор такого пакета с диска занимает больше времени, поэтому чтение этой записи происходит медленнее, чем чтение других.

Эта картина также показывает множество таблиц, в которых данные были удалены. Но из-за долго выполняющейся транзакции сервер не может удалить эти версии, и они всё ещё находятся на диске, всё ещё индексированы и всё ещё читаются сервером при чтении данных.

Представление Index

IBAnalyst Indices

В некоторых производственных базах данных могут быть индексы, в которых индексируется только одно значение ключа. Это может произойти, потому что база данных разрабатывалась «с расчётом на расширение в будущем», или кто-то просто экспериментировал с индексами во время разработки или тестирования. Вы можете увидеть такие индексы как «Useless» в IBAnalyst:

SKIN04, SKIN05, SKOUT03 и т.д., построенные на столбце, который имеет только одно значение для всех строк (миллионы строк). Эти индексы действительно бесполезны, потому что:

  • оптимизатор может использовать этот индекс, если вы укажете «where field = …». Поскольку поле содержит только одно значение, использование индекса вызовет бесполезное чтение страниц индекса с диска в память и потребление памяти (и времени), когда сервер будет подготавливать, какие строки показать для этого запроса.
  • создание индексов является частью процесса восстановления. Дополнительные индексы добавляют дополнительное время.

Конечно, это не всё, что вы можете узнать о своей базе данных в IBAnalyst. Вы также можете найти:

  • среднее количество транзакций в день
  • были ли откаты или потерянные соединения, и когда
  • насколько велики (в мегабайтах) каждая таблица и индекс
  • таблицы, в которых записи чередуются с BLOB-полями, и поэтому чтение только записей происходит медленнее
  • пустые таблицы - просто забытые или пустые на момент снятия статистики
  • индексы с большим количеством дублирующихся ключей (можно задуматься о распределении значений в столбце)
  • индексы с глубиной 4 и более - возможно, вам нужно увеличить размер страницы для ускорения работы

Автоматические рекомендации

Если вас смущает чтение предупреждений в цветных ячейках, просто откройте «Reports\View recommendations» - здесь собрано всё, что необходимо для производительности базы данных. Пожалуйста, не стесняйтесь задавать любые вопросы ([email protected]).