Сбор и анализ счетчиков производительности через 1С по шагам 8.3

06.04.15

База данных - HighLoad оптимизация

Для поиска узких мест в производительности сервера можно включить и настроить счетчики этой самой производительности «Performance Monitor».
По умолчанию данные собираются и пишутся в файлы, но это не всегда удобно. Появилась задача, для которой более удобно собирать счетчики в базу данных MS SQL и позднее анализировать через 1С.
Далее о том, как это настроить, и какая обработка получилась у меня.

Скачать файлы

Наименование Файл Версия Размер
КонтрольСчетчиков_83.epf
.epf 15,74Kb
89
.epf v. 1 15,74Kb 89 Скачать

Этап I. Подготовка БД MS SQL и ODBC.

1. Создаем пустую БД, например «Test»

2. Настраиваем ODBC

Идём в контрольную панель и вызываем  «Administrative Tools» (Control Panel\All Control Panel Items\Administrative Tools)

Открываем (в зависимости от разрядности) «ODBC Data Sources» и добавляем новый провайдер на закладке «System DSN»

Выбираем источник, SQL Server

Заполняем реквизиты доступа к ранее созданной БД test:

Указываем учетную запись, под которой будет осуществляться подключение к БД (тут все зависит от ваших предпочтений, доменная или иcпользовать учетную запись MS SQL):

 Далее можно, ничего не меняя, нажимать "next". В конце будет итоговое окно:

Нажимаем «Test Data Source» и получаем заветное: "TESTS COMPLETED SUCCESSFULLY!". Как показала практика, наличие этой прекрасной надписи не означает отсутствия проблем в дальнейшем.

Проверяем, что новый источник появился:

 

 

Этап II. Настройка счетчиков производительности.

Создаем новый набор счетчиков.

Идём в контрольную панель и вызываем  «Administrative Tools» (Control Panel\All Control Panel Items\Administrative Tools)

Открываем «Performance Monitor» и в раздел «User Defined» добавляем новую коллекцию счетчиков:

 

 Выбираем «Create manually (Advanced)»:

Указываем, что мы хотим логировать именно счетчики производительности:

 На следующем экране представлены все возможные счетчики. Для примера возьмем один:

В разделе «Processor» есть счетчик «% Processor time». В нижнем списке уточняем, какое ядро хотим мониторить. Для примера выбираем «Total» и нажимаем «Add». Это позволит отслеживать в процентах общую нагрузку по всем ядрам.

Указываем интервал сбора данных. Выбираем, к примеру, 15 секунд.

 Далее без изменений, поэтому можно сразу жать "финиш". В итоге получаем набор счетчиков, но он пока не запущен, и запускать его пока что рано.

 

Перенастраиваем набор на БД MS SQL

Заходим в DataCollector01 и перевыбираем параметр Log format с Binary на SQL

 

Далее в параметре «Data source name» выбираем созданный в первом разделе провайдер

 И сохраняем.

 Идём в настройки New Data Collector Set. На закладке «Schedule» добавляем задание по старту счетчиков на ежедневной основе.

 

На закладке «Stop Condition» выставляем условия окончания сбора счетчиков. Я выбрал в качестве ограничения размер БД в 10 Гб.

Сохраняем и запускаем счетчики

Проверяем, что данные начали собираться в БД MS SQL:

 

Этап III. Получение данных и их обработка в 1С

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

Подключение к БД:

СоединениеADO = Новый COMОбъект("ADODB.Connection");
ConnectionString = "Provider=SQLOLEDB.1;Data Source='"+СокрЛП(Сервер)+"';Initial Catalog='"+СокрЛП(База)+"';uid="+СокрЛП(Пользователь)+"; pwd="+СокрЛП(Пароль)+";";
СоединениеADO.Open(ConnectionString); 

Получение данных из БД

НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");		
НаборЗаписей.ActiveConnection= СоединениеADO;			
НаборЗаписей.Open(ТекстЗапроса);

 В описываемом примере используется только 1 счетчик, но на самом деле их может быть много, поэтому сначала получим их список из таблицы [CounterDetails]:

ТекстЗапроса = "SELECT [CounterID]
 | ,[ObjectName]
 | ,[CounterName]
 | ,[InstanceName]
 | ,[CounterType]
 | ,[DefaultScale]
 | FROM [CounterDetails]
 | ORDER BY ObjectName, CounterName, instanceName";

 Результат разбиваем на 3 списка (можно одним, но не наглядно):

  1. Список объектов контроля (ОЗУ, процессор и т.д.) [ObjectName]
  2. Список счетчиков [CounterName]
  3. Список экземпляров (Например нагрузку на процессор можно отслеживать в общем, а можно по ядрам) [InstanceName]

 В итоге, выбрав нужное значение, в каждом из списков можно получить ID, по которому мы получим данные из таблицы [CounterData]. Помимо ID в условии указываем интервал времени, за который мы хотим получить информацию:

ТекстЗапросаСч = "SELECT 
 | [CounterDateTime]
 | ,[CounterValue]
 | FROM [CounterData]
 | WHERE CounterID = '" + IDСчетчика + "' AND ([CounterDateTime] >= '" + Формат(ДатаСарт, "ДФ='yyyy-MM-dd HH:mm:ss.000'") + "' AND [CounterDateTime] <= '" + Формат(ДатаФиниш , "ДФ='yyyy-MM-dd HH:mm:ss.999'")+ "')
 | ORDER BY CounterDateTime ASC";

Для построения графика достаточно выбрать CounterDateTime и CounterValue.

 

В итоге получилась обработка следующего вида.

 

 

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

Настройки подключения к БД видны на закладке «Настройки». В событии"ПриСозданииНаСервере" можно прописать их автозаполнение

 

Дополнительно:

При контроле сервера каждому требуется свой состав счетчиков. Каждый для себя определяет границы счетчиков, превышение которых не желательно (это могут быть рекомендованные показатели или выбранные для себя эмпирически). Чтобы всё это не держать в голове, было принято решение вести в обработке таблицу соответствия:

1. Имя счётчика (в нижнем регистре)

2. Значение которое будет отчерчено на графике зеленой линией

3. Описание счетчика.

Для примера, в обработке заполнил полностью для рассматриваемого счетчика. Результат видно на основном скрин-шоте:

Стр = ТаблицаЭталонов.Добавить();
Стр.Имя = "pages/sec";
Стр.Значение = 1000;
Стр.Описание = "Указывает скорость чтения и записи страниц на диск для разрешения серьезных сбоев страниц. Этот счетчик является основным указателем типов сбоев, которые приводят к задержкам во всей системе. Он показывает количество полученных страниц для компенсации сбоев страниц в кэше файловой системы. Эти страницы обычно требуются приложениями. Значение этого счетчика не должно превышать 1000 в любое время.";

 

 

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

Если где-то описал сумбурно и требуется больше пояснений или кода - готов откорректировать. 

Performance Monitor

См. также

Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ простого плана запроса. Оптимизация нагрузки на ЦП сервера СУБД используя типовые индексы.

13.03.2024    3013    spyke    27    

42

Быстродействие типовой 1С

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

Оказывается, в типовых конфигурациях 1С есть, что улучшить!

13.03.2024    5128    vasilev2015    19    

37

Анализируем SQL сервер глазами 1С-ника

HighLoad оптимизация Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка для простого и удобного анализа настроек, нагрузки и проблем с SQL сервером с упором на использование оного для 1С. Анализ текущих зааросов на sql, ожиданий, конвертация запроса в 1с и рекомендации где может тормозить

1 стартмани

15.02.2024    7667    159    ZAOSTG    68    

96

Удаление строк из таблицы значений различными способами с замером производительности

HighLoad оптимизация Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Встал вопрос: как быстро удалить строки из ТЗ? Рассмотрел пять вариантов реализации этой задачи. Сравнил их друг с другом на разных объёмах данных с разным процентом удаляемых строк. Также сравнил с выгрузкой с отбором по структуре.

09.01.2024    6006    doom2good    48    

63

Опыт оптимизации 1С на PostgreSQL

HighLoad оптимизация Бесплатно (free)

При переводе типовой конфигурации 1C ERP/УТ/КА на PostgreSQL придется вложить ресурсы в доработку и оптимизацию запросов. Расскажем, на что обратить внимание при потерях производительности и какие инструменты/подходы помогут расследовать проблемы после перехода.

20.11.2023    8894    ivanov660    6    

76

ТОП проблем/задач у владельцев КОРП лицензий 1С на основе опыта РКЛ

HighLoad оптимизация Бесплатно (free)

Казалось бы, КОРП-системы должны быть устойчивы, быстры и надёжны. Но, работая в рамках РКЛ, мы видим немного другую картину. Об основных болевых точках КОРП-систем и подходах к их решению пойдет речь в статье.

15.11.2023    5117    a.doroshkevich    20    

72

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16202    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Gilev.Vyacheslav 1910 06.04.15 23:41 Сейчас в теме
а чем штатный перфоманс монитор не устраивает? через него графики не комильфо смотреть?
vgerasimov; exciter; +2 Ответить
4. Franco 82 07.04.15 09:39 Сейчас в теме
(1) Gilev.Vyacheslav, самый главный ответ здесь - (2)
...мониторить сразу несколько серверов...
5. pumbaE 07.04.15 10:02 Сейчас в теме
(4) Самьій главньій тут вопрос - это смотреть данные в динамике.
Я еще собираю статистику по журналу регистрации, ну и счетчики, которые сервер 1с отдает с помощью утилиты rac/ras (отвязался от com, но привязался к 8.3), все это храниться в grpaphite + elasticsearch, ну и отображается с помощью graphana.
farukshin; i_lo; +2 Ответить
2. Silmariil 156 07.04.15 08:35 Сейчас в теме
График в обработке - только визуализация, сделана скорее для демонстрации.
Причина сбора данных в БД:
1. Объем хранимой информации. Например, данные за месяц, необходимых мне счетчиков, в файлах занимают 17 Гб, в БД 3 месяца занимают 6 Гб.
2. При сбоях сервера или при сильной нагрузке наблюдались "пробелы" в файле счетчика. При сборе в БД пока что такой проблемы не обнаружено
3. Использование T-SQL для поиска необходимых данных. Например, сколько раз счетчик превышал заданное значение в течение дня/недели/месяца и тому подобное. Т.е. более гибкий и удобный анализ собранных данных.
4. Можно собирать данные чаще, чем раз в 15 секунд и получить возможность автоматизации реакции на события на сервере.
5. Можно сделать “dashboard” из 10 графиков для мониторинга производительности сервера получая информацию об оперативной памяти, процессоре, латчах или блокировках, или мониторить сразу несколько серверов.
TuneSoft; Krio2; AlexO; +3 Ответить
8. Gilev.Vyacheslav 1910 08.04.15 00:04 Сейчас в теме
(2) http://www.gilev.ru/1c/cloud/HardwareClient82.cf лежит уже 4й год, там практически все указанное в статье есть, очередное изобретение велосипеда

особенно меня радуют статьи "в интернете не нашел, поэтому..." так и хочется спросить сколько секунд искал

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

как говориться без комментариев

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

при указании нескольких источников точно также можно посмотреть графики с разных серверов
10. Silmariil 156 08.04.15 08:42 Сейчас в теме
(8) Gilev.Vyacheslav, Суть стаьи не конкурировать с другими сервисами, а показать что и как можно сделать.

http://www.gilev.ru/1c/cloud/HardwareClient82.cf лежит уже 4й год, там практически все указанное в статье есть, очередное изобретение велосипеда


Меня не интересует отправка данных на сторонние ресурсы + черный ящик, который не ясно как работает (как минимум по соображениям инф. безопасности) . В нем есть описание счётчиков и обоснование граничных условий? Ссылки на MSDN? + стоимость 10 000 руб. для юр. лиц.

про сбои данных полная чушь, точно также данные и в базу могут не попасть
- на чем основано утверждение?
Nikola_N; Goxanov; TuneSoft; ivv1970; +4 Ответить
18. Gilev.Vyacheslav 1910 09.04.15 06:49 Сейчас в теме
(10) т.е. код так и не посмотрели, но решили порассуждать "не читал, но осуждаю"
похвальный подход, вопросов больше нет

(11) DenIv, именно потому что и наш код, и многие сторонние обработки уже много раз заново изобретались - данная статья нового контекста не несет на мой взгляд

"За пользование своим сервисом вы просите денег. " ну 100 рублей мы просим потому что когда 3 года сервис работал бесплатно, люди настраивали десятки гигабайт в месяц к нам заливать, а при этом не разу не пользовались, поэтому мы сделали скорее психологический барьер чтобы ненужную работу наши сервера не делали, если 100 рублей - это как цуп за 84 000 руб., то готовы взять 1 рубль или даже бесплатно, главное что вы обязуетесь выключить заливку, если не будете заглядывать больше месяца

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

как то так
9. h00k 50 08.04.15 04:23 Сейчас в теме
(2)
данные за месяц, необходимых мне счетчиков, в файлах занимают 17 Гб

Это какие такие счетчики занимают 17Гб за месяц?! Вы показания вообще всех счетчиков пишете или просто по большому количеству серверов?
Показания 25 основных счетчиков (Система, дисковая, MS SQL) одного сервера за полгода - меньше полутора гигабайта в общей папке скай-драйв - 6 файлов в сутки по 1,6 Мб...
В 08:00 автоматом стартуют, весь день пишутся, после 20:00 выключаются. В случае сбоя - оповещают.
Можно было и в СУБД писать, но скай-драйв по доступности универсальней, в любой момент с любого устройства можно открыть и изучить. А для продвинутого мониторинга есть ЦУП.
12. Silmariil 156 08.04.15 08:52 Сейчас в теме
(9) h00k,

Это какие такие счетчики занимают 17Гб за месяц?! Вы показания вообще всех счетчиков пишете или просто по большому количеству серверов?

PhysicalDisk(_Total)\% Disk Read Time
PhysicalDisk(_Total)\% Disk Write Time
PhysicalDisk(_Total)\Avg. Disk Bytes/Read
PhysicalDisk(_Total)\Avg. Disk Bytes/Write
PhysicalDisk(_Total)\Current Disk Queue Length
PhysicalDisk(_Total)\Disk Read Bytes/sec
PhysicalDisk(_Total)\Disk Write Bytes/sec
PhysicalDisk(ххх)\Avg. Disk sec/Read по 3-м дискам
PhysicalDisk(ххх)\Avg. Disk sec/Write по 3-м дискам
Processor(_Total)\% Processor Time
Processor(_Total)\DPCs Queued/sec

При наличии 11 дисков и 16 CPU занимает за сутки 390 МБ.

А для продвинутого мониторинга есть ЦУП.
Для продвинутого мониторинга есть много продвинутых систем, например SCOM.
А что ЦУП начали раздавать дешевле 100 000 рублей?
15. h00k 50 08.04.15 12:59 Сейчас в теме
(12)
При наличии 11 дисков и 16 CPU занимает за сутки 390 МБ.

Забавно, я привел статистику с большим числом счетчиков для сервера с 16 CPU (8 аппаратных), 2 массива (9 дисков из которых 6 SSD), счетчики пишутся в двоичный формат раз в 10 сек. Ну и как я уже писал пишутся не нон-стоп, а с 8:00 до 20:00.
Единственный, на мой взгляд, недостаток - пока файл сбора данных не закроется нельзя его открыть для анализа. В этом плане запись в СУБД дает преимущество, можно смотреть данные почти в реальном времени.
20. AlexO 135 04.06.15 17:16 Сейчас в теме
(9) h00k,
6 файлов в сутки по 1,6 Мб
У вас сколько транзакций? А операций ввода-вывода? Если 1 диск и 1 CPU - то 1 Мб за глаза.
11. DenIv 08.04.15 08:49 Сейчас в теме
(2) Gilev.Vyacheslav
Вячеслав, стесняюсь спросить: Ваш сервис, разве не по этому же принципу работает? Вы какими мотивами руководствовались когда изобретали свой велосипед?
К чему это негатив? Идея не нова, действительно, но в интернетах, кроме Ваших сервисов, которые собирают по тому же принципу показания, но только в Ваши БД, и ЦУПа, ничего вменяемого БЕСПЛАТНО действительно нет.
Ваш HardwareClient82 - это конфигурация собрал что-то отправил куда-то, получил ответ с истиной. Логика совершенно другая. За пользование своим сервисом вы просите денег.
Здесь все прозрачно, не кофа, а обработка, денег не стоит.
Процитирую. Вас же: - "как говориться без комментариев "
PS. Ваш авторитет в данной области ни у кого не вызывает сомнений, однако, именно поэтому Ваша позиция : все дерьмо я Д`артаньян смотрится как-то странно

(2) h00k ЦИБ - стоит нормальных денег, плюс без подготовки и обучения понять что-то в ЦУПе сложно (ИМХО).
platonov.e; Nikola_N; user792548; igor.ofitserov; ivv1970; shalimski; murat_; Vary; AlexO; Babuin; JohnyDeath; +11 Ответить
3. Franco 82 07.04.15 09:38 Сейчас в теме
Спасибкi. Однозначно плюс.
Можно просто пустую SQL-ую базу создать.
И вместо Com-соединенения использовать внешние источники данных. Единственная неприятность - в таблице CounterData у поля CounterDateTime тип char(24) - это по идее дата + время + миллисекунды замера - там только 23 символа. Приходится во внешнем источнике принудительно указывать 23 символа.
6. necropunk 9 07.04.15 23:02 Сейчас в теме
ЦКК вроде умеет это делать же? Счетчики я им точно собирал, с графиками, в разных режимах...
7. necropunk 9 07.04.15 23:05 Сейчас в теме
Так данные тоже пробовал данные собирать, самый прикол - забыл модель базы из фулл в симпл поставить - в считаные часы сожрало все логами...
13. lustin 08.04.15 09:51 Сейчас в теме
(0) без относительно к велосипеду, но не пойму почему НЕ внешние источники данные, а ADO.DB, судя по интерфейсу у вас уже есть объект внешний источник. И тогда настройка была бы штатной от 1С.
necropunk; berezdetsky; +2 Ответить
14. Silmariil 156 08.04.15 10:47 Сейчас в теме
(13) lustin, возможно я не правильно понял вопрос, но если речь про объект метаданных, то в таком случае придётся привязываться к определенной конфигурации 1С
ivv1970; Irwin; +2 Ответить
16. Serg O. 224 08.04.15 17:57 Сейчас в теме
научитесь лучше пользоваться SQL Server Profiler
там всё есть... с отборами

а еще лучше см. "Настольная книга 1С:Эксперта по технологическим вопросам"
(артикул: 4601546110060)
Подробнее о ней на сайте: http://v8.1c.ru/metod/books/book.jsp?id=452


17. Silmariil 156 08.04.15 18:30 Сейчас в теме
(16) Serg O.,не могли бы на простом примере рассказать как с помощью SQL Server Profiler получить информацию по IOPS или загруженности процессора за прошлый день, особенно если эта нагрузка не связана ms sql.
Nikola_N; ivv1970; h00k; +3 Ответить
19. AlexO 135 04.06.15 17:12 Сейчас в теме
(16) Serg O.,
а еще лучше см. "Настольная книга 1С:Эксперта по технологическим вопросам"
А вот интересно, 1С, когда делает платформу, хотя бы эту свою книгу читает? Притом, что там 9/10 - набор советов от интернет-сообщества.
21. NoRazum 29 01.10.15 13:44 Сейчас в теме
Отличная идея.
Однозначно ПЛЮС

Еще бы лучше в настройках и в запросах имя базы.
А то ругается ))
22. lazarenko 238 20.09.17 11:17 Сейчас в теме
Не запускается сбор, ошибка «Вызов SQLAllocConnect завершился в ошибкой %1»

Журнал показал
Источник PDH, Код события 3041, в описании ошибки вот это:
Вызов SQLAllocConnect завершился с ошибкой [Microsoft][ODBC SQL Server Driver][SQL Server]Ошибка входа пользователя ""…

БД и Сервер на котором запускается сбор, не объединены в домен. Сборщик стартует от имени локальной учетки, как быть?
23. GeterX 1306 04.07.18 15:45 Сейчас в теме
1. Не хватает возможности сохранить настройки подключения к sql серверу
2. И странная закономерность, то обработка формирует график, потом перестает и начинает показывать нового момента времени, и неважно какой период указан в обработке.
24. koshak84 9 12.11.18 21:11 Сейчас в теме
Добрый день! А кто нибудь может подсказать где можно почитать про анализ показаний счетчиков производительности? Интернет ресурс или книгу
25. Gilev.Vyacheslav 1910 15.11.18 17:47 Сейчас в теме
Оставьте свое сообщение