|
Описание по v1.1.2
|
CSMonitor функционально
разделен на две части: сервис (CSMonSVC.exe), и монитор (CSMonViewer.exe).
После установки запускаем CSMonViewer, подключаемся к серверу (порт
по умолчанию 30100), и видим примерно следующую картину:
|
|
В общем, Task
Manager, но показывает только нужные процессы, плюс еще несколько
полезных колонок, смысл которых пояснять буду по ходу описания.
Одна строка - одно подключение.
Это индикатор нагрузки
на процессор сервера (только для Classic). Колонка Client IP используется
еще и для этого. Вся колонка - 100% Processor Time, розовый сектор
- Kernel Time, зеленый сектор - User Time.
Колонки Start и Time - время подключения.
Колонки Last Activity
и Inactive Time - время последней активности в данном подключении.
Собрав статистику, какие машины в сети часто "пропадают",
можно посоветовать администратору проверить соответствующий сегмент
сети.
Кроме того, увидев явного "зомби" (бездействие
в течение суток например), можно совершенно спокойно сделать Disconnect
данному соединению. FireBird увидит закрытие сокета и закроет все
абсолютно корректно. Ранее приходилось убивать процесс классика
и поверять БД на целостность (про методы
борьбы с зомби классика я в курсе, но на 100% проблему снять
не удалось).
Из контекстного меню можно отключить данное подключение,
или изменить приоритет его процесса:
|
|
По умолчанию устанавливается режим отображения
"Администрирование". Режим отображения можно переключить
из контекстного меню:
|
|
|
|
Получаем более подробную картину... но работать в
таком режиме при большом количестве соединений весьма затруднительно:
экран переполнен информацией, ненужной при повседневной работе администратора.
Строки с "жирным" шрифтом - соединение.
Зеленые строки - открытые транзакции. Коричневые строки - стейтменты
(запросы).
Колонки Start/Time и LastActivity/Inactive Time справедливы
для каждой строки: третье соединение существует 29:28, транзакция
в нем - 29:20.
Один стейтмент
образованный IBExpert закрыт (c = closed) - состояние видно в первой
колонке. Два других в состоянии Execute и Prepared соответственно.
|
Как отключать клиентов. |
Есть два способа:
Kill Process процессу классика (из TaskManger тоже можно) или программное
закрытие сетевого соединения (Disconnect в контекстном меню). Рекомендую
пользоваться вторым, в 90% случаев вслед за этим закрывается и серверный
процесс, и за полтора года использования не было побочных эффектов
вроде orphan pages.
|
Это
индикатор сетевой активности. Левая часть загорается, когда клиент
передает данные, правая - когда получает.
Возможна следующая
ситуация: Вы делаете Disconnect соединению, после чего немедленно
пропадает индикатор сетевой активности (значит, socket закрыт).
Но процесс классика продолжает активно работать, изрядно нагружая
процессор. Такое возможно, например, если вы выполните запрос вида:
SELECT COUNT(*) FROM
MyBigProcedure
Где MyBigProcedure
- процедура, выполняющаяся достаточно долго. При подсчете COUNT(*)
сервер ничего не передает клиентской части приложения, и сервер
не знает, что соединение уже закрыто.
Что делать?
Дождаться окончания - тогда сервер попытается передать данные, увидит
закрытое соединение и закроет соответствующий процесс классика.
Понизьте приоритет, если уж сильно мешает.
Или сделать, как вы поступали раньше: Kill Process. Настоятельно
не рекомендую: чревато многими последствиями, самое безобидное -
orphan pages.
|
Монопольный доступ к
серверу. |
Классический
способ - перевести БД в shutdown, и работать SYSDBA. Но есть и другой
способ:
После выбора
"Deny new client connections" сервис монитора перестает принимать
новые подключения от клиентов. (Он закрывает listener на порту 3050).
Остается только отключить всех, кто Вам мешает. В верхнем и контекстном
меню есть "Disconnect some...":
|
OAT. |
Щелкните
по OAT в верхнем меню, и курсор перейдет на соответствующую Oldest
Active Transaction.
OC - аналогично
- Самое старое подключение.
|
Именованные подключения, транзакции,
запросы. |
В помощь при
отладке приложений появилась возможность подписать подключение,
транзакцию и запрос - в колонке Custom Name.
По умолчанию колонка скрыта, но автоматически появится после подписания
первого же объекта.
Для подписания
достаточно в любом месте запроса, отправленного из клиентской части
приложения на сервер, добавить комментарий:
SELECT 1 FROM RDB$DATABASE
/* CSMON$CON_NAME=My connect; CSMON$TR_NAME=My Transaction; CSMON$ST_NAME=My
Query; */
Интересен также вариант
с адаптированными компонентaми доступа:

Здесь видна работа
монитора с компонентами FIBPlus.
Используется адаптированная под CSMonitor версия
(по всем вопросам относительно этой версии пишите Плотникову Юре).
В качестве дополнительной информации
выводятся имена компонентов базы данных, транзакций, датасетов и
запросов. Также (опционально) выводится текстовое описание датасета.
Данная информация может быть полностью заменена своей, возможно
включение "мониторинга" отдельной базы, транзакции, датасета,
запроса.
CSMonitor поддерживается FIBPlus начиная с v6.8.
|
Именованные подсети. |
Идея Janex.
Одному IP адресу, диапазону адресов, или подсети можно задать свои
имена - в колонке Subnet Name:
Для этого
достаточно создать текстовый файл csmon.subnets в каталоге сервиса,
примено следующего содержания:
10.0.0.* laboratory1
10.0.1.* laboratory2
192.168.1.1-192.168.1.12 laboratory3
|
P.S.
Если Вы видите в программе больше возможностей, чем описано здесь
(особенно если накатываете последние сборки), а)
не пугайтесь :-)
б) я описываю новый функционал только когда сам удовлетворен его
работой, и считаю его законченным.
в) я немогу поддерживать две ветки проекта - одна для работы, вторая
для обкатки новых фич.
Поэтому - я не гарантирую, что эта обнаруженная фича будет работать
так, как вам нужно. И что она вообще будет хоть как-то работать.
Багрепорты принимаю только по описанному функционалу. А вот пожелания
- пишите, всегда интересно почитать новые идеи - некоторые из них
воплощаются (см. Changes.txt)
|
|
|