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

FBScanner заменён на HQbird. См. Мониторинг в HQbird.

FBScanner (Firebird Scanner) - это инструмент для решения всех типов проблем производительности Firebird.

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

Модули FBScanner

FBScanner - один из самых эффективных инструментов IBSurgeon: он отслеживает SQL-трафик между сервером и клиентами. Возможности FBScanner:

  1. LogAnalyzer - инструмент для детального анализа SQL-запросов, планов, транзакций и соединений, поддерживает все версии Firebird и InterBase.
  2. FBScanner Viewer - просмотрщик в реальном времени, показывает соединения, запросы и транзакции, проходящие через FBScanner Service, поддерживает все версии Firebird и InterBase.
  3. Поддержка всех версий Firebird (1.0 - 2.5) и InterBase (4.0-XE3). FBScanner - единственный инструмент для анализа SQL-запросов в производственных базах данных Firebird и InterBase версий до Firebird 2.1, особенно если приложение разработано сторонними разработчиками и исходный код недоступен.

Список наиболее впечатляющих возможностей FBScanner:

  • Журналирование SQL-запросов, соединений и транзакций со всеми параметрами для детального анализа (для одного или нескольких рабочих мест) с целью поиска узких мест производительности в Firebird (ВСЕ версии) и InterBase (ВСЕ версии).
  • Мониторинг соединений в реальном времени. FBScanner Viewer показывает все соединения с выбранным сервером базы данных: IP/DNS-имя подключённого клиента, базу данных и время соединения.
  • Мониторинг SQL-запросов в реальном времени. Для каждого соединения FBScanner показывает все выполняемые в данный момент SQL-запросы вместе с их параметрами транзакций.
  • Обнаружение самого старого соединения и самой старой активной транзакции, что позволяет проанализировать возможное неоптимальное поведение транзакций, неправильную их разработку или выявить пользователей, которые могут использовать приложение способом, влияющим на производительность.
  • Разрывы соединений клиентов (ошибки 10054). Проверка корректности разъединения, а также возможность отключения пользователей для проведения обслуживания или обновления базы данных.
  • FBScanner позволяет маршрутизировать конкретные приложения или отдельных пользователей, чтобы сосредоточиться на конкретных приложениях или пользователях.

Как FBScanner может помочь выявить и решить проблему производительности Firebird или InterBase? Давайте быстро рассмотрим наиболее интересные функции FBScanner и начнём с модуля LogAnalyzer.

ШАГ 1: LogAnalyzer «Нагрузка на сервер»

FBScanner Log Analyzer

Скачайте демо-версию FBScanner и установите её. Запустите «FBScanner Service Settings» из меню «Пуск», затем нажмите «Advanced options», вкладка «SQL Log».

Создайте базу данных журнала (она должна находиться на другом экземпляре Firebird на этом или другом компьютере - подробности см. в «Руководстве пользователя FBScanner», страницы 14-16). После этого весь SQL-трафик, проходящий через FBScanner, будет сохраняться в базе данных журнала.

Запустите «FBScanner Log Analyzer» и подключитесь к базе данных журнала. На первой вкладке «Нагрузка на сервер» вы увидите обзор SQL-соединений и операторов. Легко заметить пики нагрузки и определить моменты, когда производительность была плохой.

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

ШАГ 2: SQL-журнал в LogAnalyzer

FBScanner Log Analyzer

Если вы выбрали вкладку «Все операторы», будет показан последующий список всех SQL-запросов. Обратите внимание, что здесь представлены SQL-запросы со всех соединений, которые регистрируются FBScanner (можно настроить FBScanner на мониторинг только одного соединения или группы компьютеров, или только выбранного приложения - для этого достаточно использовать соответствующую строку подключения и/или порты - подробнее об этом читайте в «Руководстве пользователя FBScanner»).

Вы можете сузить поиск - задайте начальный и конечный моменты времени, а затем фильтруйте запросы по EXECUTION_TIME, чтобы увидеть самые длительные запросы.

Для каждого запроса вы можете увидеть текст SQL-запроса, его параметры, время начала/окончания, количество извлечённых записей, а также узнать, кто и когда его выполнил: IP-адрес, имя пользователя и т.д.

Вы также можете заставить FBScanner регистрировать SQL-планы - для этого необходимо установить соответствующую галочку в «FBScanner Service Settings».

Когда вы определили проблемный запрос, вы можете увидеть его соединение и транзакцию: для этого щёлкните правой кнопкой мыши и выберите «Просмотреть соединение и транзакции для оператора ID=…». Это приведёт вас на вкладку «Все соединения и журналы».

ШАГ 3: Соединения и транзакции

FBScanner Log Analyzer

Вкладка «Все соединения и журналы» содержит список всех соединений и связанных с ними транзакций и операторов в виде «мастер-деталь».

Когда вы щёлкаете по SQL-запросу в таблице ниже, все операторы в рамках той же транзакции выделяются жирным шрифтом. Это даёт понимание реального потока транзакций. Также присутствуют параметры транзакции (пустые параметры транзакции означают, что эта транзакция имеет параметры по умолчанию «wait, write, snapshot»).

Кроме того, FBScanner LogAnalyzer позволяет выполнить выбранный запрос на другой версии базы данных и сравнить его производительность. Он также может выполнять массовое выполнение SQL, что может быть полезно при миграции между версиями Firebird.

Важно! Демо-версия FBScanner сохраняет некоторые тексты запросов как «Demo» и работает только 7 дней. Полная версия не имеет этих ограничений.

ШАГ 4: FBScanner Viewer

FBScanner Log Analyzer

FBScanner Viewer - это часть FBScanner, отвечающая за отслеживание соединений, запросов и транзакций в реальном времени. FBScanner Viewer подключается напрямую к FBScanner Service и получает информацию о SQL-трафике.

FBScanner Viewer может запускаться на любой машине в локальной сети: он подключается через порт 30100 по умолчанию и получает онлайн-данные от FBScanner Service.

По умолчанию FBScanner Viewer обновляет свой статус каждые 0,5 секунды, а также позволяет просматривать 20 самых последних запросов соединения.

Для медленных (интернет) соединений FBScanner Viewer можно настроить на обновление данных каждые 5 секунд, например.

Кроме того, FBScanner Viewer можно использовать для управления соединениями: он может отключать пользователей (выбранных, всех, по маске) с имитацией ошибки разрыва 10054 и поддерживает функциональность белого и чёрного списков.

Советы для успешной оптимизации

Важно! Рекомендуется начинать расследование проблем производительности с MON$Logger: сделайте несколько снимков базы данных во время пиковой нагрузки (когда пользователи испытывают наибольшее замедление) и попытайтесь выяснить, какие бизнес-процессы потребляют больше всего операций ввода-вывода (обратите внимание на запросы с высокими значениями READ_SEQ_READS и RECORD_IDX_READS).

Затем установите FBScanner Service на этих рабочих станциях (или используйте выделенный сервер) и регистрируйте все запросы с подозрительных рабочих станций: исследуйте их время EXECUTE и PREPARE, проверяйте SQL-планы и т.д. Найдите и исправьте проблему, затем убедитесь, что новая версия работает быстрее предыдущей!

Используйте FBScanner Viewer для просмотра запросов, выполняемых на сервере, в реальном времени (эта функция также очень полезна для отладки сложных SQL-запросов).

Описание FBScanner

FBScanner - это мощный инструмент для администраторов и разработчиков Firebird и InterBase, предназначенный для перехвата и анализа TCP/IP-трафика между сервером и клиентскими приложениями.

FBScanner извлекает в реальном времени множество деталей о соединениях, запросах (операторах), транзакциях, помечает и отслеживает все эти объекты трафика с помощью уникального механизма тегов. FBScanner также может регистрировать всю активность во внешней базе данных Firebird и выполнять ряд уникальных административных задач.

FBScanner (Firebird Scanner) - это инструмент, который позволяет отслеживать и просматривать весь трафик между серверами Firebird и InterBase и их клиентскими приложениями.

FBScanner Service работает как шлюз (прокси) на компьютере с Firebird/InterBase (только Windows) или может быть установлен на удаленном компьютере и работать с Firebird на всех поддерживаемых операционных системах (Windows, Linux, Mac OS X, HP-UX и т. д.).

FBScanner можно использовать для профилирования приложений баз данных, мониторинга активности пользователей, управления подключениями к базе данных (включая отключение клиентов как в архитектуре Classic, так и SuperServer). Он также идеально подходит для устранения ошибок INET (INET/inet_error: send errno = 10054), а также для аудита существующих приложений и настройки производительности.

FBScanner поддерживает Firebird (1.0, 2.0, 2.1, 2.5) и InterBase (4.0, 5.x, 6.x, 7.0, 7.1, 7.5, 2007, 2009, XE, XE3).

FBScanner прозрачен для приложения базы данных и не требует изменений в исходном коде, логике или конфигурации приложения или базы данных.

FBScanner V3.x работает только на Windows и требует установки .NET 2.0 (или выше) Framework.

Презентации о FBScanner

FBScanner: инструмент IBSurgeon для решения всех типов проблем с производительностью Firebird. Миграция Firebird: с Firebird 1.5 на Firebird 2.5
Смотрите больше презентаций от Nataly Polyanskaya

Как работает FBScanner

FBScanner Service

Важно! В этом разделе мы не описываем работу MON$Logger и TraceAPI Plugin, он посвящен только FBScanner Service, FBScanner Viewer и LogAnalyzer.

FBScanner Service обычно должен быть установлен на том же компьютере, где работает сервер Firebird или InterBase (как вариант, вы можете установить его на другом компьютере и затем перенаправить трафик на фактический сервер Firebird или InterBase). Во время установки утилита конфигурации FBScanner попросит вас выбрать: установить FBScanner на порт по умолчанию InterBase или Firebird (3050) и изменить конфигурацию службы Firebird на 3052 (это можно настроить), или установить FBScanner для прослушивания другого TCP-порта.

Важно! FBScanner Service работает только с TCP-подключениями, поэтому клиенты, использующие локальные (XNET) и NetBEUI (WNET) строки подключения, будут обходить FBScanner. Для мониторинга таких клиентских приложений следует использовать MON$Logger и TraceAPI Plugin.

Если вы выберете первый вариант установки, все запросы приложений будут проходить через FBScanner Service.

##### Установка на стороне сервера ##### Удаленная установка

Влияние на производительность

Обычный сценарий процесса оптимизации производительности включает установку FBScanner на 1-2 типичных рабочих станциях для перехвата типичного SQL-трафика. Нет причин перехватывать и регистрировать весь SQL-трафик со всех рабочих станций - слишком много информации для анализа и слишком много повторяющихся запросов.

Однако, если вы хотите установить FBScanner как прокси для всего сервера и регистрировать все операции там, убедитесь, что вы обеспечили ту же пропускную способность ввода-вывода и сопоставимые CPU и RAM, как на производственном сервере. Для баз данных с высокой нагрузкой журнал FBScanner может расти на несколько Гб в день. В таких случаях мы рекомендуем выделенную (удаленную) установку FBScanner.

FBScanner Service не изменяет ничего в передаваемом трафике и работает просто как прозрачный прокси, поэтому все приложения продолжат работать как обычно. FBScanner Service потребляет примерно 125-150 Мб памяти для мониторинга 50-70 активных клиентов, и это снизит производительность базы данных на 5-15% при использовании. Потребление памяти зависит от дизайна клиентского приложения. Требуемая пропускная способность ввода-вывода зависит от интенсивности SQL-трафика.

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

Сегментация трафика

Использование FBScanner на нестандартном порту позволяет сегментировать различный трафик от разных приложений. Например, есть приложения A и B. B - старое и стабильное приложение, которое не требует настройки или мониторинга, а A - новое приложение. Легко настроить строку подключения для нового приложения A на использование нестандартного порта (например, server/3070:Disk:\Path\database.gdb) и направить все запросы от приложения A через FBScanner для мониторинга SQL-запросов и поведения приложения.

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