Базовые приемы работы с кластером 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]

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

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

См. также

INFOSTART TECH EVENT 2023, 11-13 октября, Санкт-Петербург

Инструментарий разработчика Мобильная разработка DevOps и автоматизация разработки Администрирование СУБД Мероприятия Россия Платные (руб)

XIII конференция по управлению и технологиям автоматизации учета на платформе 1С:Предприятие, которая пройдет в Санкт-Петербурге и соберет 1500 участников из разных регионов России и мира.

5100 руб.

09.12.2022    30068    5    0    

406

«Монитор» – простой анализ производительности

Администрирование СУБД Технологический журнал Бесплатно (free)

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

21.09.2023    1959    Andreynikus    12    

46

Управляем базами на SQL, не выходя из 1С

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

Статья о том, как организовать из 1С интерфейс для управления базой SQL – чтобы смотреть содержимое таблиц, добавлять и изменять в них данные, выполнять различные запросы. А также поделимся готовой 1С-подсистемой, где реализован пример такого управления.

31.08.2023    4295    Midzgun    11    

32

Как эффективно настроить autovacuum в Postgres для 1С

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

Кто не любит убирать мусор? Думаю, практически все, а вот в Postgres это обязательный ритуал для эффективной работы. Как эффективно настроить уборку за 1С в Postgres, можно прочитать в этой статье и еще раз задуматься о бесплатности Postgres.

05.08.2023    3406    1CUnlimited    4    

43

Тонкости эксплуатации PostgreSQL

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

Тема перехода с MS SQL на PostgreSQL становится все актуальнее. В докладе на конференции Infostart Event 2022 Saint Petersburg руководитель проектов Антон Дорошкевич рассказал, что ждёт после перехода, к чему нужно быть готовым, и какие варианты решения задач существуют на данный момент в мире PostgreSQL для его успешной эксплуатации.

19.06.2023    4258    a.doroshkevich    32    

52

Нестандартные приемы безопасной разработки и эксплуатации ПО на платформе 1С, категория "18+"

HighLoad оптимизация Рефакторинг и качество кода Администрирование СУБД Бесплатно (free)

Готовы погрузиться в недетское программирование и шКОДИТЬ по-взрослому? О том, как повысить безопасность разработки и эксплуатации ПО через изощренные способы подключения к платформе 1С, на конференции Infostart Event 2022 Saint Petersburg рассказал Юрий Лазаренко.

19.06.2023    1844    TitanLuchs    6    

20

tempdb, почему она всё время растет?

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

С проблемами распухания tempdb при работе с базой данных 1С регулярно сталкиваются и админы, и разработчики. О том, как мониторить, диагностировать и решать такие проблемы, на конференции Infostart Event 2021 Moscow Premiere рассказал Александр Криулин.

14.06.2023    7107    AlexKriulin    8    

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

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

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

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