CSMonitor

 

 

Главная

 

 

Описание

 

 

Загрузить

 

Гостевая

 

Описание по 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)

 

 

 


(c) Матвеев Олег. 2006г.
Hosted by uCoz