FBScanner
FBScanner замінено на HQbird. Див. Моніторинг у HQbird.
FBScanner (Firebird Scanner) - це інструмент для вирішення всіх типів проблем із продуктивністю Firebird.
Документація FBScanner
Модулі FBScanner
FBScanner - один із найефективніших інструментів IBSurgeon: він відстежує SQL-трафік між сервером і клієнтами. Можливості FBScanner:
- LogAnalyzer - інструмент для детального аналізу SQL-запитів, планів, транзакцій і з’єднань, підтримує всі версії Firebird та InterBase.
- FBScanner Viewer - переглядач у реальному часі, показує з’єднання, запити та транзакції, які проходять через FBScanner Service, підтримує всі версії Firebird та InterBase.
- Підтримка всіх версій 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 та встановіть її. Запустіть «FBScanner Service Settings» із меню «Пуск», потім натисніть «Advanced options», вкладка «SQL Log».
Створіть базу даних журналу (вона має бути на іншому екземплярі Firebird на цьому чи іншому комп’ютері - зверніться до «Посібника користувача FBScanner», сторінки 14-16, для деталей). Після цього весь SQL-трафік, який проходить через FBScanner, зберігатиметься в базі даних журналу.
Запустіть «FBScanner Log Analyzer» і підключіться до бази даних журналу. На першій вкладці «Навантаження на сервер» ви можете побачити огляд SQL-з’єднань і запитів. Легко помітити піки навантаження та визначити моменти, коли продуктивність була поганою.
Ви можете масштабувати та прокручувати цей графік продуктивності, вмикати та вимикати параметри для відображення - щоб зафіксувати момент початку проблеми. Після цього клацніть правою кнопкою миші на точці, де потрібно перейти до деталей, і виберіть «Go to the SQL list on HH:mm».
КРОК 2: SQL-журнал у LogAnalyzer
Якщо ви вибрали вкладку «All Statements», буде показано наступний список усіх SQL-запитів. Зверніть увагу, що тут є SQL-запити з усіх з’єднань, які журналюються FBScanner (можна налаштувати FBScanner для моніторингу лише одного з’єднання або групи комп’ютерів, або лише вибраного застосунку - для цього достатньо використати відповідний рядок з’єднання та/або порти - про це читайте в «Посібнику користувача FBScanner»).
Ви можете звузити пошук - встановіть час початку та завершення, а потім фільтр за EXECUTION_TIME, щоб побачити найдовші запити.
Для кожного запиту ви можете побачити текст SQL-запиту, його параметри, час початку/завершення, кількість отриманих записів, а також дізнатися, хто і коли його виконав: IP-адресу, ім’я користувача тощо.
Ви також можете змусити FBScanner журналювати SQL-плани - для цього потрібно встановити відповідну позначку в «FBScanner Service Settings».
Коли ви визначили запит, який має проблеми, ви можете переглянути його з’єднання та транзакцію: для цього клацніть правою кнопкою миші та виберіть «View connection and transactions for statement ID=…». Це відкриє вкладку «All connections and Logs».
КРОК 3: З’єднання та транзакції
Вкладка «All connections and Logs» містить список усіх з’єднань і пов’язаних із ними транзакцій і запитів у форматі «майстер-деталі».
Коли ви клацаєте на SQL-запит у таблиці нижче, усі запити в межах тієї самої транзакції позначаються жирним шрифтом. Це дає вам розуміння реального потоку транзакцій. Також доступні параметри транзакції (порожні параметри транзакції означають, що ця транзакція має параметри за замовчуванням «wait, write, snapshot»).
Крім того, FBScanner LogAnalyzer дозволяє виконати вибраний запит проти іншої версії бази даних і порівняти його продуктивність. Він також може виконувати масове виконання SQL, що може бути корисним під час міграції між версіями Firebird.
Важливо! Демо-версія FBScanner зберігає тексти деяких запитів як «Demo» і працює лише 7 днів. Повна версія не має цих обмежень.
КРОК 4: FBScanner Viewer
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: зробіть кілька знімків бази даних під час періоду високого навантаження (коли користувачі відчувають найбільше уповільнення) і спробуйте з’ясувати, які бізнес-процеси споживають найбільше IO (зверніть увагу на запити з високими значеннями 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 як проксі для всього сервера та журналювати всі операції там, переконайтеся, що забезпечено таку ж пропускну здатність IO та порівнянні CPU і RAM, як на виробничому сервері. Для баз даних із високим навантаженням журнал FBScanner може зростати на кілька Гб на день. У таких випадках ми рекомендуємо виділене (віддалене серверне) встановлення FBScanner.
FBScanner Service не змінює нічого в переданому трафіку та працює просто як прозорий проксі, тому всі застосунки продовжуватимуть працювати як зазвичай. FBScanner Service споживає приблизно 125-150 Мб пам’яті для моніторингу 50-70 активних клієнтів, і це знизить продуктивність бази даних на 5-15% під час використання. Споживання пам’яті залежить від дизайну клієнтського застосунку. Необхідна пропускна здатність IO залежить від інтенсивності SQL-трафіку.
Під час тестування ми перевірили FBScanner у роботі в кількох реальних середовищах і застосунках, де база даних має 30-200 активних з’єднань, і помітили, що погіршення продуктивності було мінімальним. У багатьох випадках користувачі не могли визначити, що моніторинг активний.
Сегментація трафіку
Використання FBScanner на нестандартному порту дозволяє сегментувати різний трафік від різних застосунків. Наприклад, є застосунки A і B. B - це старий і стабільний застосунок, який не потребує налаштування чи моніторингу, а A - новий застосунок. Легко налаштувати рядок з’єднання для нового застосунку A на використання нестандартного порту (наприклад, server/3070:Disk:\Path\database.gdb) і маршрутизувати всі запити від застосунку A через FBScanner для моніторингу SQL-запитів і поведінки застосунку.

Використовуючи цей підхід, ви можете легко розпізнати та вирішити проблеми у виробничому середовищі, незалежно від того, чи проблема походить від нового застосунку, чи навіть від конкретного сегмента вашої локальної мережі.





