FBMonLogger
FBMonLogger теперь является частью HQbird Standard!
FBMonLogger - это инструмент для анализа вывода таблиц мониторинга в Firebird и поиска проблем с медленными SQL-запросами, некорректно спроектированными транзакциями (долго выполняющиеся транзакции, транзакции с неправильным уровнем изоляции и т.д.), а также для выявления проблемных приложений.
FBMonLogger может подключиться к базе данных Firebird с проблемами производительности и определить причину медленной работы: является ли это каким-то пользовательским подключением, медленным SQL-запросом или долго выполняющейся транзакцией?
FBMonLogger поддерживает Firebird 2.1, 2.5 и 3.0 - для более старых версий Firebird или InterBase, пожалуйста, используйте FBScanner.
FBMonLogger может показать вам:
- Топ подключений с наибольшим количеством операций ввода-вывода, неиндексированных и индексированных чтений
- Топ SQL-запросов с наибольшим количеством операций ввода-вывода, неиндексированных и индексированных чтений
- Проблемные транзакции: долго выполняющиеся транзакции, транзакции с ошибочным уровнем изоляции, транзакции чтения/записи, а также связанную информацию: когда они начались, какие приложения запустили эти транзакции, с какого IP-адреса и т.д.
- Подключения и запросы с наиболее интенсивными операциями сборки мусора
- Соотношение чтения/записи, соотношение INSERT/UPDATE/DELETE и многое другое.
После подключения к базе данных, где вы хотите найти проблемы с производительностью, необходимо сделать несколько снимков таблиц мониторинга - нажмите «Get Snapshot», чтобы сделать снимок.
Агрегированная статистика производительности для подключений пользователей
На первом экране мы видим агрегированную статистику для подключений к базе данных и можем определить подключения с наибольшими проблемами:
Последовательные чтения / Индексированные чтения
«Sequential reads / Indexed reads» показывает общее соотношение между последовательными (неиндексированными) чтениями и индексированными чтениями в приложении. Обычно количество неиндексированных чтений должно быть низким, поэтому большой процент последовательных чтений является признаком того, что многие SQL-запросы имеют NATURAL планы выполнения, и они могут быть причиной медленного времени отклика.
Нажатие на запись в «TOP attachments: sequential/indexed reads» приведет вас на вкладку «Attachments», где вы можете увидеть более подробную информацию о подключении, а затем перейти на вкладку «Transactions» или «Statements», где вы увидите транзакции и запросы, связанные с выбранным подключением (если установлен флажок «Link to selected attachment», в противном случае будут показаны все транзакции/запросы для всех подключений).
Детали записи
«Write details» дает вам обзор операций записи: соотношение между INSERT/UPDATE/DELETE среди всех подключений к базе данных. В таблице топ-писателей вы можете увидеть подключения с наибольшим количеством операций записи. Это полезно для выявления приложений или программных модулей, которые выполняют чрезмерное количество операций обновления или удаления (которые являются наиболее опасными операциями с точки зрения сборки мусора).
Детали сборки мусора
Что означают операции сборки мусора?
- Purge - движок удаляет бэк-версии, в базе данных остается только основная версия.
- Expunge - удалены и основная версия, и все бэк-версии.
- Backout - удалена только основная версия (из-за отката).
Обычно мы можем связать purge с операцией UPDATE, Expunge с DELETE, а Backout с откатом INSERT или UPDATE. Много операций backout может означать, что в приложении есть проблема с управлением транзакциями.
Использование памяти
График «Memory usage» показывает общий объем памяти, используемой всеми активными подключениями сейчас, и пик выделенной памяти для них в прошлом.
Список топ-подключений по использованию памяти показывает самых крупных потребителей памяти среди ваших подключений. Это полезно для поиска приложений или программных модулей с чрезмерным использованием памяти.
Агрегированная статистика производительности для запросов
На второй вкладке вы можете найти агрегированную статистику производительности для запросов. Эта статистика лучше отражает текущую ситуацию в базе данных - поскольку таблицы мониторинга собирают информацию с момента начала жизни каждого объекта, запросы, которые вы видите здесь, - это те, которые выполнялись в момент создания снимка.
Последовательные чтения / Индексированные чтения
В этом списке мы видим топ-запросы, которые выполняют много последовательных чтений из базы данных. Обычно такие запросы требуют настройки SQL - либо через настройку индексов, либо через перепроектирование SQL-запроса.
Чтобы настроить запрос, проверьте его план выполнения: обычно можно улучшить скорость запроса, устранив NATURAL в планах с помощью новых индексов или перепроектирования запроса. Нажмите на запрос в этом списке, чтобы открыть вкладку «Statements», где вы можете найти более подробную информацию о выбранном запросе и перейти к связанной транзакции или подключению.
Чтения страниц / Записи страниц
Эти графики и список показывают краткую информацию о топ-запросах, которые выполняют много чтений - это означает, что они потребляют значительный объем ввода-вывода и могут влиять на производительность других запросов. SQL-запросы с пиковыми значениями должны быть тщательно проверены на оптимальную производительность.
Детали записи для запросов
На этом графике вы можете увидеть, какие пишущие SQL-запросы выполнялись в момент создания снимка таблиц мониторинга, и выявить UPDATE и DELETE, которые внесли много изменений в базу данных.
Детали сборки мусора для запросов
На этом графике мы можем увидеть, сколько операций сборки мусора было выполнено запросами, работавшими в момент создания снимка.
Использование памяти для запросов
В отличие от агрегированной статистики использования памяти для подключений, использование памяти запросами может показать нам список конкретных запросов, которые потребляют много памяти в данный момент.
Подключения
Третья вкладка - «Attachments». Вы можете открыть эту вкладку напрямую, перейдя туда, нажав на одну из записей в «Агрегированной статистике производительности».
«Attachments» показывает список пользователей, подключенных к базе данных Firebird, с множеством полезных деталей: USER и ROLE подключения, время начала и ID подключения, включена ли сборка мусора для подключения, имя удаленного процесса, установившего подключение, а также несколько накопленных счетчиков производительности для подключения: количество последовательных чтений [выполненных подключением с момента его начала], количество индексированных чтений, количество вставок, обновлений и удалений, а также backout, purge и expunge записей.
По умолчанию некоторые столбцы подключений отключены, чтобы показывать только самую важную информацию.
Конечно, каждый раз, когда вы нажимаете на подключение, вы можете перейти к транзакциям, выполняющимся внутри него, а затем к запросам. В левом верхнем углу вкладок Transactions и Statements есть флажок, который управляет этим поведением - когда он установлен, будут показаны только транзакции и запросы, отмеченные выбранным ID подключения.
Транзакции
Вкладка «Transactions» показывает активные транзакции на момент создания снимка. Если установлен флажок «Link to selected attachment», будут показаны только транзакции для выбранного подключения, в противном случае показываются все транзакции.
Одной из наиболее важных характеристик является время жизни транзакций: поскольку Firebird спроектирован для работы с короткими пишущими транзакциями, важно держать их как можно более короткими. FBMonLogger выделяет транзакции с режимами изоляции и настройками чтения-записи, которые удерживают самую старую активную транзакцию (Oldest Active Transaction) и тем самым провоцируют накопление лишних версий записей, которые не очищаются. Если вы видите такую транзакцию и она началась некоторое время назад, это означает, что она может быть ответственна за чрезмерное количество версий записей.
Отсортируйте по столбцу «started at» и ищите старые транзакции, отмеченные красным: все пишущие транзакции и read-only снимки удерживают самую старую активную транзакцию и провоцируют удержание чрезмерного количества версий записей. Определите, где начались эти транзакции (щелкните правой кнопкой мыши и выберите «View parent attachment»), и исправьте свой код, чтобы фиксировать эту транзакцию раньше.
Statements
Вкладка «Statements» показывает операторы, активные на момент снимка: если вам нужно перехватить все операторы, следует использовать FBPerfMon или FBScanner (все эти инструменты входят в состав IBSurgeon Optimization Pack).
Если включена опция «Link to selected attachment», будут показаны только операторы для конкретного подключения, в противном случае в списке отображаются все активные операторы.
Некоторые операторы не имеют связанного идентификатора транзакции (=0): такие запросы подготовлены, но не выполнены.




