Базовые приемы работы с кластером 1С при помощи БСП

26.10.21

База данных - Администрирование СУБД

В данной публикации я рассматриваю базовые приемы работы с кластером серверных баз 1С, используя типовые типовые возможности библиотеки стандартных подсистем (БСП).

Введение

Всем доброго времени суток!

В данной публикации я предлагаю рассмотреть базовые возможности актуальной библиотеки стандартных подсистем (БСП) в области функционала "Администрирование кластера". На момент написания статьи актуальная версия БСП - это БСП версии 3.1.5.208.

Данная публикация будет полезна прежде всего программистам-разработчикам, работающим с любыми современными типовыми конфигурациями в серверном режиме на Платформе 1С 8.3 и придерживающимся стандартов разработки. Методы, описываемые в статье, будут одинаково работать в любой современной типовой конфигурации с БСП.

Примеры данной статьи будут работать при условии, что у вас серверная база. Все примеры приведены для COM-соединения.

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

Данный материал я условно разделил на две части, в которых я привожу два полезных практических примера: часть 1 - это сеансы и их удаление по фильтру, а часть 2 - это установка блокировок сеансов и регламентных заданий:

 

Часть 1. Получение сеансов информационной базы данных и их удаление по заданному фильтру.

Для начала рассмотрим одну из основных функций 

СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено)

Данная функция возвращает структуру, содержащую сеансы подключения к информационной базе данных, например:

СеансыИнформационнойБазы

 

	
// конструктор соединения к кластеру
АдминКластера   = АдминистрированиеКластера.ПараметрыАдминистрированияКластера();
	
АдминКластера.АдресАгентаСервера = "localhost";
АдминКластера.ИмяАдминистратораКластера = "admin";
АдминКластера.ПарольАдминистратораКластера= "123456";
	
// конструктор соединения к базе данных
АдминИБ 		= АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера();
	
АдминИБ.ИмяВКластере = "ssl83test";
АдминИБ.ИмяАдминистратораИнформационнойБазы = "Администратор";
АдминИБ.ПарольАдминистратораИнформационнойБазы = "123456"; 
	
// получим сеансы соединения с ИБ
СеансыИБ 		= АдминистрированиеКластераCOM.СеансыИнформационнойБазы(АдминКластера, АдминИБ);

 

В результате выполнения данной функции я получу массив сеансов, которые подключены к выбранной базе данных. Выглядит это вот так:

Рис.1 Структура сеанса, полученная функцией БСП СеансыИнформационнойБазы().

 

Теперь попробуем удалить полученные сеансы с помощью процедуры

УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач Фильтр = Неопределено) Экспорт
    

фильтр сеанса я буду создавать структурой:

 
 Фильтр сеансов информационной базы данных

 

ФильтрУдаления = Новый Структура("ИдентификаторКлиентскогоПриложения");
ФильтрУдаления.ИдентификаторКлиентскогоПриложения = "Designer";

 

используем фильтр для удаления сеанса пользователя, который занял конфигуратор:

 
 Удаление сеанса "конфигуратора":
	АдминКластера   = АдминистрированиеКластера.ПараметрыАдминистрированияКластера();
	
	АдминКластера.АдресАгентаСервера = "localhost";
	АдминКластера.ИмяАдминистратораКластера = "admin";
	АдминКластера.ПарольАдминистратораКластера= "77777";
	
	АдминИБ 		= АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера();
	
	АдминИБ.ИмяВКластере = "ssl83test";
	АдминИБ.ИмяАдминистратораИнформационнойБазы = "Администратор";
	АдминИБ.ПарольАдминистратораИнформационнойБазы = "123456"; 
	
	// получим сеансы соединения с ИБ
	СеансыИБ 		= АдминистрированиеКластераCOM.СеансыИнформационнойБазы(АдминКластера, АдминИБ);
	
	
	ФильтрУдаления = Новый Структура("ИдентификаторКлиентскогоПриложения");
	ФильтрУдаления.ИдентификаторКлиентскогоПриложения = "Designer";
		
	//выкидываем занявшего конфигуратор
	АдминистрированиеКластераCOM.УдалитьСеансыИнформационнойБазы(АдминКластера, АдминИБ, ФильтрУдаления);

 

 

После применения данной процедуры у сотрудника, который занял конфигуратор и "ушел домой" выскочит вот такая известная надпись:

 

Рис.2.Выкидываем пользователя из конфигуратора.

 

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

Также возможна фильтрация и по другим параметрам. Вот некоторые из них:

 
 Словарь свойств сеансов

 

	Результат = АдминистрированиеКластера.СвойстваСеанса();
	
	Результат.Номер = "SessionID";
	Результат.ИмяПользователя = "UserName";
	Результат.ИмяКлиентскогоКомпьютера = "Host";
	Результат.ИдентификаторКлиентскогоПриложения = "AppID";
	Результат.ИдентификаторЯзыка = "Locale";
	Результат.МоментСозданияСеанса = "StartedAt";
	Результат.МоментПоследнейАктивностиСеанса = "LastActiveAt";
	Результат.БлокировкаСУБД = "blockedByDBMS";
	Результат.Блокировка = "blockedByLS";
	Результат.Передано = "bytesAll";
	Результат.ПереданоЗа5Минут = "bytesLast5Min";
	Результат.СерверныхВызовов = "callsAll";
	Результат.СерверныхВызововЗа5Минут = "callsLast5Min";
	Результат.ДлительностьСерверныхВызовов = "durationAll";
	Результат.ДлительностьТекущегоСерверногоВызова = "durationCurrent";
	Результат.ДлительностьСерверныхВызововЗа5Минут = "durationLast5Min";
	Результат.ПереданоСУБД = "dbmsBytesAll";
	Результат.ПереданоСУБДЗа5Минут = "dbmsBytesLast5Min";
	Результат.ДлительностьВызововСУБД = "durationAllDBMS";
	Результат.ДлительностьТекущегоВызоваСУБД = "durationCurrentDBMS";
	Результат.ДлительностьВызововСУБДЗа5Минут = "durationLast5MinDBMS";
	Результат.СоединениеСУБД = "dbProcInfo";
	Результат.ВремяСоединенияСУБД = "dbProcTook";
	Результат.МоментЗахватаСоединенияСУБД = "dbProcTookAt";
	Результат.Спящий = "Hibernate";
	Результат.ЗавершитьЧерез = "HibernateSessionTerminateTime";
	Результат.ЗаснутьЧерез = "PassiveSessionHibernateTime";
	Результат.ПрочитаноСДиска = "InBytesAll";
	Результат.ПрочитаноСДискаВТекущемВызове = "InBytesCurrent";
	Результат.ПрочитаноСДискаЗа5Минут = "InBytesLast5Min";
	Результат.ЗанятоПамяти = "MemoryAll";
	Результат.ЗанятоПамятиВТекущемВызове = "MemoryCurrent";
	Результат.ЗанятоПамятиЗа5Минут = "MemoryLast5Min";
	Результат.ЗаписаноНаДиск = "OutBytesAll";
	Результат.ЗаписаноНаДискВТекущемВызове = "OutBytesCurrent";
	Результат.ЗаписаноНаДискЗа5Минут = "OutBytesLast5Min";
	Результат.Лицензия = Новый ФиксированнаяСтруктура(Лицензия);
	Результат.ОписаниеСоединения = Новый ФиксированнаяСтруктура(ОписаниеСоединения);
	Результат.РабочийПроцесс = Новый ФиксированнаяСтруктура(РабочийПроцесс);

 

 

Данный метод вы можете применять на любой серверной базе, которая основана на библиотеке стандартных подсистем.

Теперь, переходим к части 2.

 

Часть 2. Установка блокировок соединений и регламентных заданий.

Теперь предлагаю рассмотреть еще одну полезную штуку - как установки блокировок соединений и регламентных заданий, так и регламентных заданий в частности.

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

БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт,

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

Код выглядит вот так:

 
 Выясняем установлена ли блокировка регламентных заданий

 

	АдминКластера   = АдминистрированиеКластера.ПараметрыАдминистрированияКластера();
	
	АдминКластера.АдресАгентаСервера = "localhost";
	АдминКластера.ИмяАдминистратораКластера = "admin";
	АдминКластера.ПарольАдминистратораКластера= "77777";
	
	АдминИБ 		= АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера();
	
	АдминИБ.ИмяВКластере = "ssl83test";
	АдминИБ.ИмяАдминистратораИнформационнойБазы = "Администратор";
	АдминИБ.ПарольАдминистратораИнформационнойБазы = "123456"; 
	
	// состояние блокировки - у меня возвращает Истина
	Блокировка 	= АдминистрированиеКластераCOM.БлокировкаРегламентныхЗаданийИнформационнойБазы(АдминКластера, АдминИБ);

 

 

Заходим в консоль и смотрим, действительно "Да".

 

Рис.3.Блокировка регламентных заданий включена.

 

Теперь программно включим блокировку регламентных заданий, код будет вот такой:

 
 Снятие блокировки регламентных заданий

 

	АдминКластера   = АдминистрированиеКластера.ПараметрыАдминистрированияКластера();
	
	АдминКластера.АдресАгентаСервера = "localhost";
	АдминКластера.ИмяАдминистратораКластера = "admin";
	АдминКластера.ПарольАдминистратораКластера= "77777";
	
	АдминИБ 		= АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера();
	
	АдминИБ.ИмяВКластере = "ssl83test";
	АдминИБ.ИмяАдминистратораИнформационнойБазы = "Администратор";
	АдминИБ.ПарольАдминистратораИнформационнойБазы = "123456"; 
	
	// состояние блокировки - у меня возвращает Истина
	Блокировка 	= АдминистрированиеКластераCOM.БлокировкаРегламентныхЗаданийИнформационнойБазы(АдминКластера, АдминИБ);
	Сообщить(Блокировка);	
	
	// снимаем блокировку регламентных заданий
	АдминистрированиеКластераCOM.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(АдминКластера, АдминИБ, Ложь);
	Блокировка 	= АдминистрированиеКластераCOM.БлокировкаРегламентныхЗаданийИнформационнойБазы(АдминКластера, АдминИБ);


	// теперь, возвращает Ложь	
	Сообщить(Блокировка);

 

 

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

БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ) Экспорт.

Пример использования данной функции:

 
 Состояние блокировки сеансов и заданий информационной базы (Ложь или Истина)

 

	АдминКластера   = АдминистрированиеКластера.ПараметрыАдминистрированияКластера();
	
	АдминКластера.АдресАгентаСервера = "localhost";
	АдминКластера.ИмяАдминистратораКластера = "quazare";
	АдминКластера.ПарольАдминистратораКластера= "77777";
	
	АдминИБ 		= АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера();
	
	АдминИБ.ИмяВКластере = "ssl83test";
	АдминИБ.ИмяАдминистратораИнформационнойБазы = "Администратор";
	АдминИБ.ПарольАдминистратораИнформационнойБазы = "123456"; 
	
//возвращает структуру по блокировкам
	БлокировкаСеансовЗаданийСостояние 	= АдминистрированиеКластераCOM.БлокировкаСеансовИЗаданийИнформационнойБазы(АдминКластера, АдминИБ);

 


Данный код вернет структуру по блокировкам такого вида: 

Рис.4.Возврат структуры по блокировкам базы данных.

 

Сейчас я "поиграюсь" с блокировками с помощью процедуры БСП

УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт.

 

Напишу код, где запрещу все сеансы на один день, но дам код разрешения. Код выглядит вот так:

 
 Запрет сеансов до определенной даты с кодом разрешения

 

	АдминКластера   = АдминистрированиеКластера.ПараметрыАдминистрированияКластера();
	
	АдминКластера.АдресАгентаСервера = "localhost";
	АдминКластера.ИмяАдминистратораКластера = "admin";
	АдминКластера.ПарольАдминистратораКластера= "77777";
	
	АдминИБ 		= АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера();
	
	АдминИБ.ИмяВКластере = "ssl83test";
	АдминИБ.ИмяАдминистратораИнформационнойБазы = "Администратор";
	АдминИБ.ПарольАдминистратораИнформационнойБазы = "123456"; 
	
	БлокировкаСеансовЗаданийСостояние 	= АдминистрированиеКластераCOM.БлокировкаСеансовИЗаданийИнформационнойБазы(АдминКластера, АдминИБ);
	
	
	// выношу конструктор структуру а код процедуры
    СтрБлок = Новый Структура("БлокировкаСеансов, ДатаС, ДатаПо, Сообщение, КодРазрешения,ПараметрБлокировки,БлокировкаРегламентныхЗаданий");
	
	СтрБлок.БлокировкаСеансов = истина;
	СтрБлок.ДатаС = СтроковыеФункцииКлиентСервер.СтрокаВДату("20.10.2021");
	СтрБлок.ДатаПо = СтроковыеФункцииКлиентСервер.СтрокаВДату("27.10.2021");
	СтрБлок.Сообщение="Соединения с ИБ заблокировал";
	СтрБлок.КодРазрешения="11";
	СтрБлок.ПараметрБлокировки="";	
	СтрБлок.БлокировкаРегламентныхЗаданий=истина;
	
	
	АдминистрированиеКластераCOM.УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(АдминКластера, АдминИБ, СтрБлок);
	

 

 

Заходим в консоль и видим, да - для этой базы все установлено (код писал 26.10.2021 - поэтому на один день).

 

Рис.5.Программно заблокировал базу для соединений и регламентных заданий с кодом разрешения.

 

Перейдем к заключению и выводам статьи.

 

Заключение и выводы

В данной статье мы рассмотрели базовые и, я бы отметил, очень полезные приемы работы с кластером сервера с помощью библиотеки стандартных подсистем версии 3.1.5.208. Примеры методов вы можете использовать в любой стандартной конфигурации 1С, основой которой является БСП.

Все эксперименты для написания этой статьи проводились на платформе 1С - 8.3.19.1264 и последней версии (на момент написания статьи) чистой конфигурации БСП 3.1.5.208. Использовалось СОМ-соединение.

Спасибо за прочтение данного материала. Если статья вам понравилась - прошу поддержать ее.

 

Другие мои материалы по подсистемам БСП

Также прошу ознакомиться с другими моими статьями по функционалу библиотеки стандартных подсистем и типовым конфигурациям:

Генерация штрихкодов с помощью БСП для программистов

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Печать макета MS Word в любом документе с помощью БСП

Работаем с контактной информацией в конфигурациях на БСП

Запуск почти любых процедур и функции конфигураций в асинхронном режиме - БСП - Длительные операции [Часть 2]

БСП - рабочие примеры асинхронного запуска функций и процедур

кластер администрирование бсп

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4544    dsdred    53    

72

Инструкция по установке Postgres для OLTP приложений и 1С. Часть 1. Базовая конфигурация

Администрирование СУБД Платформа 1С v8.3 Бесплатно (free)

В Postgres достаточно подробная документация, и, видимо, поэтому при инсталляции Postgres для 1С большинство параметров приходится выставлять самим. Параметров в Postgres много, а составить эффективную комбинацию не так просто. Все упрощается, если рассмотреть профиль нагрузки, например, 1С это прежде всего профиль OLTP нагрузки – так устроены его метаданные (объекты). Если сосредоточиться на оптимизации профиля OLTP, понимание Postgres сразу упростится.

15.02.2024    2332    1CUnlimited    14    

27

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2353    YA_418728146    11    

40

1С:БСП Дополнительные реквизиты и сведения

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Бесплатно (free)

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    5170    PROSTO-1C    5    

45

Обслуживание индексов MS SQL Server: как, когда и, главное, зачем?

Администрирование СУБД Бесплатно (free)

Казалось бы, базовое знание: «индексы надо обслуживать, чтобы запросы выполнялись быстро». Но обслуживание индексов выполняется долго и может мешать работе пользователей. Кроме того, в последнее время популярны разговоры о том, что индексы можно вообще не обслуживать – насколько это оправданно? Рассмотрим: на что влияет обслуживание индексов, когда надо и когда не надо его выполнять, и если надо – как это сделать так, чтобы никому не помешать?

16.01.2024    5816    Филин    13    

45

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

БСП (Библиотека стандартных подсистем) Мероприятия Бесплатно (free)

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    3799    0    Infostart    0    

20
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1292 26.10.21 12:34 Сейчас в теме
По коду жестко к COM завязано или есть возможность расширить под RAC/RAS?
3. etoropa 9 26.10.21 16:45 Сейчас в теме
(2) А что это за конструктор?

(1) В БСП также есть общий модуль АдминистрированиеКластераRAS - замените в коде на него.
2. quazare 3587 26.10.21 13:04 Сейчас в теме
(1) это все настраивается в конструкторе АдминистрированиеКластера
4. vld1973 85 26.10.21 17:06 Сейчас в теме
Спасибо интересно, положу на полочку, как будет подходящая задача использую.
5. user820492 26.10.21 17:34 Сейчас в теме
Спасибо! Полезная статья!
6. quazare 3587 26.10.21 17:41 Сейчас в теме
(3) имелись ввиду такие функции-конструкторы:

Функция ПараметрыАдминистрированияКластера() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("ТипПодключения", "COM"); // "COM" или "RAS"
	
	// Только для "COM"
	Результат.Вставить("АдресАгентаСервера", "");
	Результат.Вставить("ПортАгентаСервера", 1540);
	
	// Только для "RAS"
	Результат.Вставить("АдресСервераАдминистрирования", "");
	Результат.Вставить("ПортСервераАдминистрирования", 1545);
	
	Результат.Вставить("ПортКластера", 1541);
	Результат.Вставить("ИмяАдминистратораКластера", "");
	Результат.Вставить("ПарольАдминистратораКластера", "");
	
	Возврат Результат;
	
КонецФункции

Показать
7. teembox 08.09.22 11:07 Сейчас в теме
Полезный материал, спасибо
Оставьте свое сообщение