Простые регулярные выражения

Публикация № 825405

Администрирование - Производительность и оптимизация (HighLoad)

Bash регулярные выражения Виктор Богачев Эксперт подготовка экзамен технологический журнал grep egrep awk gawk cat sed print printf echo sort

Шпаргалка к экзамену "Эксперт по технологическим вопросам".

Существует несколько хороших статей про регулярные выражения.

https://its.1c.ru/db/metod8dev#content:5927:hdoc (Статья на ИТС недавно обновилась)

//infostart.ru/public/693103/

Постараюсь написать проще и подробнее - как для себя. Для начинающих, которые уже прочитали Джеффри Фридл "Регулярные выражения" или Бен Форта "Регулярные выражения 10 минут на урок" и установили Cygwin64 GitBash с ресурса https://git-scm.com/download/win.

Предупреждение 1. При копировании примеров из статьи в bash могут возникнуть проблемы. Из-за этого выходит сообщение «Binary file (standard input) matches». Поэтому текстовые файлы примеров команд и фрагмент журнала приложу в архиве. Кто захочет – скачает.

Предупреждение 2. Относитесь к шпаргалке критически, опирайтесь на свои собственные знания.

Скрипт обработки ТЖ сильно зависит от настроек. Универсальных скриптов не бывает. Поэтому пара слов про ТЖ.

 
 Будем использовать такие настройки.

Длительность более 10 миллисекунд позволяет отсечь служебные запросы. Пользовательские запросы дольше. Данные журнала накапливаются за од      ин час. Это лучшая настройка поскольку собирать журнал можно только на диске сервера (если использовать сетевой диск – возможны дикие тормоза), а место на диске сервера очень дорогое.  Чтобы собирать журнал с нескольких серверов на свой рабочий компьютер, ежечасно запускайте помощью Планировщик заданий Windows командный файл *.bat, пример содержимого:

xcopy \\SERVERName1\F\*.* D:\$log$\*.* /S /E /Y

xcopy \\SERVERName2\F\*.* D:\$log$\*.* /S /E /Y

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

 

Задача 1. Подсчитать количество дедлоков (управляемые блокировки) за ночь с 00 по 06 часов

Выбираем содержимое файлов из подкаталогов текущего каталога cat rphost*/ *0[0-6].log |

Символы

Значение

rphost

Используем, что дедлок содержится только в логах rphost. Выбрать все файлы проще: cat */*.log

*

любое количество символов в имени файла. Вообще, любое количество символов в регулярных выражениях означается «.*», но создателей команды cat это не смущает.

/

Спуск к подкаталогам. Я бы удивился, если бы увидел привычный «\».

0[0-6]

Числа 00, 01,02,03,04,05,06. На каждый час создается свой файл

.log

Точка здесь означает точку. Расширение файла – log.

|

Нам всем привычны временные таблицы. Чтобы поместить результат запроса в аналог временной таблицы, ставим знак «|» (pipe, труба). Следующая команда использует этот результат.

Почти каждый запрос начинается с команды cat.

Чтобы выбрать строки, содержащие дедлок, нужно составить шаблон. Смотрим строка 1 файла ТЖ, записываем ^[0-9][0-9]:.{10,20}DEADLOCK.

Символы

Значение

^

Начало строки

[0-9]

один цифровой символ

:

двоеточие

.

означает любой символ

{10,20}

от 15 до 20 повторений предыдущего символа

DEADLOCK

должно быть написано большими буквами. Если у вас не дедлоков – считайте другое слово, например SDBL

Профессионалы применяют более сложные шаблоны начала строки – выбирайте сами. На мой взгляд, в шаблоне должно быть начало строки и расстояние от начала строки до DEADLOCK было ограничено. Иначе объем чтения сильно возрастает.

Чтобы выбрать все строки, содержащие шаблон – используем команду egrep. Следующая команда выведет все строки, подобные шаблону, на экран

cat */rphost*0[0-6].log | egrep ‘^[0-9][0-9]:.{10,20}DEADLOCK’

команда выведет количество.

cat */rphost*0[0-6].log | egrep ‘^[0-9][0-9]:.{10,20}DEADLOCK’ -c

Символы

Значение

(обязательно прописная), показывает количество строк. Без этой опции результат выйдет на экран. Обычно дедлоков немного, строки можно подсчитать визуально.

> имяфайла

Перенаправить вывод в файл

- -help

(два тире help). получить подсказку

 

Иногда можно не использовать cat:

egrep ‘^[0-9][0-9]:.{15,20}DEADLOCK’ –d recurse

Символы

Значение

–d recurse

Рекурсивный обход поддиректорий. При этом в результат может добавляться имя файла, которое содержит час и дату. профессионалы используют –r.

Можно задавать имя файла.

–H

Добавляет имя файла в результат.

-h

Подавляет вывод имени файла в результат

- - color

(два тире color) выделяет цветом шаблон поиска

 

Задача 2. Подсчитать количество взаимоблокировок СУБД

Количество взаимоблокировок СУБД считается примерно также. Нужно учитывать, что в ТЖ это событие EXCP с пояснением «Конфликт блокировок при выполнении транзакции».  (К сожалению, в примерном ТЖ управляемые блокировки.) Для вывода на экран используйте скрипт

egrep ‘^[0-9][0-9]:.{10,20}EXCP.*блокировок при выполнении транзакции’ -d recurse

Символы

Значение

.*

Несколько (или нисколько) любых символов. Сравните .+ или .{1,2}

 

Задача 3. Найти TLOCK жертвы (виновника) взаимоблокировки.

egrep –A2 ‘^[0-9][0-9]:.{15,20}DEADLOCK’ –d recurse

Символы

Значение

-A2

Две строки после строки, подобной шаблону. Есть похожие опции –B2, -C2

Если журнал настроен только по событиям TLOCK, TTIMEOUT, TDEADLOCK, то TLOCK жертвы должен быть следующим после TDEADLOCK.

В случае, если первый способ не подойдет, можно решить в два приема:

1. Найти строки, содержащие TDEADLOCK, запомнить время, connectID жертвы, пространство блокировок (Regions), измерения пространства блокировок (Здесь я не отображаю измерения, но их нужно сравнивать. Они обычно начинаются Fld). Выполняем

cat */*.log | egrep '^[0-9][0-9].{10,25}TDEADLOCK’, получаем

29:46.696046-0,TDEADLOCK,5,process=rphost,p:processName= processName,t:clientID=5008,t:applicationName=BackgroundJob,t:computerName= computerName,t:connectID=6520,SessionID=52328,Usr=.Регламентные задания,DeadlockConnectionIntersections='6520 6171 AccumRg10307.DIMS Exclusive Fld10308=44:8cbcf07d2b194ea349f50188353e0a15 Fld10309=32:80bb000c293fb1b711e5cef51b92cf25 Context='

2. По запомненным параметрам с учетом времени искать TLOCK жертвы.

Выполняем

cat */*.log | egrep –A1 '^29.{10,25}TLOCK.*connectID=6520.*Regions= AccumRg10307.DIMS', получаем две строки

29:47.259006-187992,TLOCK,4,process=rphost,p:processName= processName,t:clientID=5008,t:applicationName=BackgroundJob,t:computerName= computerName,t:connectID=6520,SessionID=52328,Usr=.Регламентные задания,Regions=AccumRg10307.DIMS,Locks='AccumRg10307.DIMS Exclusive  ,Context='

              ОбщийМодуль.МодульРегламентныхЗаданий.Модуль : 1350 : РегистрыСведений. ДокументыДляПерепроведения.ПерепровестиДокументы();

TLOCK виновника нужно искать раньше TDEADLOCK, по запомненным параметрам с учетом времени. В нашем случае connectID=6171

Задача 4. Найти топ-5 запросов с максимальной длительностью.

Нужно учитывать, что длительность запроса хранится в событии SDBL или DBMSSQL, а контекст хранится в строках, следующих за следующей строкой.

Команда egrep ищет внутри одной строки. Поэтому строки нужно «склеить» (убрать переход строки), фильтровать нужный контекст, длительность переместить на первое место, сортировать по длительности, выбрать первые 5 по длительности.

Для «склеивания» строк применим скрипт

cat *.log |\

awk -vORS= '{

if ($0~"^[0-9][0-9].{8,30}SDBL|DBMSSQL") { print "\n"$0;} \

else if ($0~"^[0-9][0-9].{8,30}Context") { print $0; } \

else if ($0~"^[0-9][0-9]") { print "\n"; } \

else { print "-"$0; }

}' |\

Символы

Значение

\

Здесь означает, что команда продолжается на следующей строке. Используем для наглядности.

awk ‘{}’

Это сложная  и мощная команда, но здесь для каждой строки она просто выводит данные в зависимости от условий

-vORS=

Парамeтры команды awk. Убирает непечатаемые символы.

If(){}

Если истинно условие() выполнить программу {}

$0

Текст обрабатываемой строки, без конца строки

$0~”шаблон1”

Текст обрабатываемой строки, без конца строки подобен шаблон1

SDBL|DBMSSQL

Символ | означает ИЛИ. Этот шаблон равен SDBL или DBMSSQL. Для наглядности можно заключать в скобки ().

«\n»

Начало строки в кавычках. Символ конца строки \$

print "\n"$0

Вывести начало строки, текст обрабатываемой строки, без конца строки

else if ($0~"^[0-9][0-9].{8,30}Context") { print $0; }

Если не выполняется первое условие, но в строке есть слово Context, строка приклеивается к предыдущей.

else if ($0~"^[0-9][0-9]") { print "\n"; } \

 

Если не выполняются предыдущие условия, но строка начинается с цифр, то вывести перевод строки. Эта команда заменяет на перевод строки все события кроме Context, SDBL и DBMSSQL

else { print "-"$0; }\

Если не выполняются предыдущие условия, «приклеить» строку к предыдущей, но перед ней вставить тире. Эта команда обрабатывает контекст который начинается с пробелов.

}' |\

Закрываются командные скобки команды awk, данные передаются через pipe следующей команде, которая будет на следующей строке.

 

Фильтруем нужный контекст командой egrep ',(DBMSSQL|SDBL),.*,Context=' |\

 
 Выполним этот скрипт на примерном фрагменте ТЖ, посмотрим результат

Применим команду awk -F',(DBMSSQL|SDBL),.*?(,Context=)' '{print $1 "-" $2}' |\

Символы

Значение

awk –F’’ ‘{}’

Команда обрабатывает строки, используя разделитель заданный –F’’. Например, для файла csv удобно использовать разделитель «;». Но в данном случае разделителем объявлен огромный шаблон, это приводит к тому, что он исчезает из строки.

.*?

Ленивый квантор. Выбирает минимальное число символов, чтобы строка подходила под шаблон.

$1

Первая колонка с учетом разделителя.

NF

Количество колонок

$NF

Последняя колонка

NS

Количество обработанных строк

 

 
 Посмотрим результат.

Применим команду awk -F'-' '{print $2, $NF}' | sort –rnb | head 5

Символы

Значение

-F'-'

Используем разделитель “-”

{print $2, $NF}

Вывести вторую и последнюю колонку контекста

sort –rnb

Сортировать

head 5

Вывести первые пять записей. Последние пять записей tail 5

Посмотрим результат. Первая колонка – длительность.

186991          РегистрСведений.МойРегистр.МодульМенеджера : 285 : ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);'

15947           РегистрСведений. МойРегистр.МодульМенеджера : 285 : ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);'

14975           РегистрСведений. МойРегистр.МодульМенеджера : 285 : ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);'

 

Итоговый скрипт:

time cat *.log \
| awk -vORS= '{if ($0~"^[0-9][0-9].{8,30}SDBL|DBMSSQL") \
{ print "\n"$0;} \
else if ($0~"^[0-9][0-9].{8,30}Context") { print $0; } \
else if ($0~"^[0-9][0-9]") { print "\n"; } \
else { print "-"$0; } \
}' \
| egrep ',(DBMSSQL|SDBL),.*,Context=' \
| awk -F',(DBMSSQL|SDBL),.*?(,Context=)' '{print $1 "-" $2}' \
| awk -F'-' '{print $2, $NF}' \
| sort –rnb \
| head 5

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

time egrep '^[0-9][0-9].{8,30}(SDBL|DBMSSQL)' -d recurse \
| awk -F',' '{print $1}' \
| awk -F'-' '{print $2/1000000 " -длительность секунд. Имя файла:Минут:Секунд " $1}' \
| sort -rnb \
| head -n10

Вариант скрипта: ищем объектные чтения

time cat *.log \
|awk -vORS= '{ \
if ($0~"^[0-9][0-9].{8,30}(SDBL|DBMSSQL).{180,220}SELECT ID, Version, Marked, PredefinedID") \
{ print "\n"$0; } \
else if ($0~"^[0-9][0-9].{8,30}Context") { print $0; } \
else if ($0~"^[0-9][0-9]") { print "\n"; } \
else { print "-"$0; } \
}' \
| egrep '(SDBL|DBMSSQL).*?Context=' \
| awk -F'(SDBL|DBMSSQL).*?,Context=' '{print $1 "-" $2}' \
| awk -F'-' '{duration[$NF]+=$2; count[$NF]+=1;} \
END {for (i in count) {print "\n" duration[i] / 1000000 " секунд " count[i] " выполнений " duration[i] / (count[i]*1000000) " среднее время    " i}}' \
| sort -rnb \
| head -n20

Используем, что объектное чтение элемента справочника имеет вид: SELECT ID, Version, Marked, PredefinedID

Кстати, запросы получения данных в форме списка при включенном "Динамическом считывании" содержат "TOP 45". Чаще всего опцию "Динамическое считывание следует отключить.

Вариант скрипта: ищем наиболее частые ошибки

time cat *.log 
| awk -vORS= '{ \
if ($0~"^[0-9][0-9].{6,30},EXCP.*?Descr=") { print "\n"$0;} \
else if ($0~"^[0-9][0-9].{6,30},[A-D,F-Z]") { print "\n"; } \
else { print $0; } \
}' \
| egrep '^[0-9][0-9].{6,30}EXCP.*?Descr=' \
| awk -F'^.*Descr[^А-Я]*?' '{print $2;}' \
| awk -F'[A-Z]*?' '{count[$1]+=1;} \
END {for (i in count) {print "\n" count[i] " ошибок " i}}' \
| sort -rnb \
| head

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

 

Задача 5. Найти такие события, которые в сумме имеют максимальную длительность.

Например, система оповещения пользователей, подключается при старте программы командой «ПодключитьОбработчикОжидания(,60)» и потребляет серьезные ресурсы при большом количестве пользователей.

Мы видели, что в предыдущем варианте получился практически готовый ответ, только его нужно сгруппировать. Вместо последней команды выполним

awk -F'-' '{count[$NF]+=$2;} END {for (i in count) {print "\n" "длительность " count[i] " контекст вызова " i}}' | sort -rnb | head -n5

Символы

Значение

count[$NF] +=$2

Определяем структуру, ключ – содержимое последнего столбца, значение – содержимое второго столбца, если в структуре ничего не было. Если такой ключ в структуре уже существовал - то сумма существующего и нового значений.

END {}

После обработки всех строк выполнить

for (i in count) {print "\n" count[i] " контекст вызова " i}

Вывести каждое значение структуры и ключ структуры

 

 
 Посмотрим результат.

 

Итоговый скрипт

time cat *.log \
| awk -vORS= '{if ($0~"^[0-9][0-9].{8,30}SDBL|DBMSSQL") \
{ print "\n"$0;} \
else if ($0~"^[0-9][0-9].{8,30}Context") { print $0; } \
else if ($0~"^[0-9][0-9]") { print "\n"; } \
else { print "-"$0; } \
}' \
| egrep ',(DBMSSQL|SDBL),.*,Context=' \
| awk -F',(DBMSSQL|SDBL),.*?(,Context=)' '{print $1 "-" $2}' \
| awk -F'-' '{count[$NF]+=$2;} END {for (i in count) \
{print "\n" count[i]  "<--Длительность; Контекст-->" i}}' \
| sort -rnb \
| head -n20 \
| sed 's/[ \t]//g'

Задача 6. Найти TLOCK, которые ожидали

 

cat *.log | egrep 'TLOCK.*WaitConnections=[0-9]'

 

Задача 7. Найти все управляемые разделяемые блокировки

 

cat *.log | egrep 'TLOCK.*\bShared\b'

Символы

Значение

\b граница слова

 

Задача 8. Найти топ самых долгих транзакций

 

cat *.log | egrep 'SDBL.*Func=Commit' | gawk -F'-' '{print $2}' | sort -rnb | head

 

Задача 9. Посчитать количество событий в каждом файле

egrep '^[0-9][0-9].{8,30},' -H -d recurse |\

awk -F',' '{print $1 "log" $2}' |\

awk -F'log' '{ count[$1, $3]++ } END {for (i in count) {print count[i] "." i}}'

Символы

Значение

count[$1, $3]++

Добавляет счетчик в структуру вида 

Имя файла. Имя события

 

Результат работы - на экране в формате количество событий, имя файла, имя события. Пример:

2495.19032013.EXCP
2632.19031908.SDBL

Копируем в Excel (Calc), меню Данные - Текст по столбцам, сортируем, рисуем диаграмму )

Задача 10. Подсчитать определенный фрагмент по часам

cat *.* | egrep ',EXCP' -d recurse -c

 

Задача 11. Вывести в файл строки, которые не начинаются "(".

cat 19050709.log | egrep '^[^\(]' >> file1.log

Такое преобразование нужно, если в файл журнала попал текст Insert-запроса, который "раздувает" файл лога в разы.

Символы

Значение

'^[]' Начало строки ^ диапазон []
^\(

Не ^ знак скобки \(

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tormozit 5921 01.05.18 07:30 Сейчас в теме
Это точно для 1сников? =)
Уж очень сложно и неудобно.
2. vasilev2015 1848 01.05.18 09:12 Сейчас в теме
(1) Здравствуйте, Сергей ! Когда я смотрел другие статьи про регулярные выражения, где упор делается на использование perl, у меня возникал тот же вопрос. Постарался упростить ))).

Регулярные выражения примечательны тем, что позволяют парсить файлы технологического журнала общим объемом порядка 100 Гигабайт за время порядка 5 минут. Других таких инструментов нет. ЦУП медленнее на порядки.

P.S. Пользуюсь инструментами разработчика каждый день. Спасибо Вам.
3. tormozit 5921 01.05.18 13:14 Сейчас в теме
(2) Кажется обычно более разумно настроить фильтр записи журнала (logcfg.xml), чтобы он собирал то, что нужно. А не собирать в 10-100 раз больше логовов, чем нужно, неоправдано нагружая сервер и вынуждая себя пользоваться в разы менее удобными инструментами. В анализе техножурнала (ИР) непосредственно при чтении логов сейчас доступен только отбор по дате и он уже в большинстве случаев в разы ускоряет загрузку логов. Планирую туда же добавить фильтр по типу события (на этапе чтения). Он позволит еще ускорить логов в ряде случаев. Но конечно с выборкой описанной в статье анализ техножурнала (ИР) не сравнится по скорости.
starik-2005; ivanov660; Spartacus; +3 Ответить
4. vasilev2015 1848 01.05.18 13:26 Сейчас в теме
(3) Да, согласен. Поэтому позиционирую статью не как инструменты парсинга ТЖ, а как шпаргалку к экзамену. С нетерпением ждем улучшений ИР. :-))
5. palsergeich 01.05.18 20:37 Сейчас в теме
(3)
(2) Кажется обычно более разумно настроить фильтр записи журнала (logcfg.xml), чтобы он собирал то, что нужно. А не собирать в 10-100 раз больше логовов, чем нужно, неоправдано нагружая сервер и вынуждая себя пользоваться в разы менее удобными инструментами. В анализе техножурнала (ИР) непосредственно при чтении логов сейчас доступен только отбор по дате и он уже в большинстве случаев в разы ускоряет загрузку логов. Планирую туда же добавить фильтр по типу события (на этапе чтения). Он позволит еще ускорить логов в ряде случаев. Но конечно с выборкой описанной в статье анализ техножурнала (ИР) не сравнится по скорости.

Иногда, особенно когда не знаешь почему все работает медленно, надо собрать всё, убрать главные проблемы, и после этого уже работать с ограниченным ТЖ.
Ваш инструмент, я пользовался в том числе и им, в нем действительно удобно сводить данные, но для первичного анализа - regex, ибо в ИР к сожалению уже на 200+ тыс записях (точное число не скажу) вылетает, а клеить анализ за каждые 5 минут - не вариант.
Очень простой пример. На прошлой неделе разбирал один ТЖ, там, помимо тех проблем о которых я догадывался, за час из сервера приложений было больше полумиллиона вызовов НайтиПоКоду в цикле в регламентном задании. С фильтром на длительность эту проблему обнаружить не удастся. НайтиПоКоду вынесен за цикл, стало сразу лучше.
6. tormozit 5921 01.05.18 21:18 Сейчас в теме
(5) Частые и одновременно легкие запросы, создающие в сумме большую нагрузку, эффективнее всего ловить через новый инструмент "Статистика запросов MSSQL", который использует не требующую включения и не создающую нагрузки статистику по запросам из процедурного кэша MSSQL. После обнаружения такого запроса в статистике MSSQL человек уже настраивает фильтр в техножурнале по тексту оператора SQL (имеется соответствующая команда в окне "Конвертор текста СУБД") и далее анализирует собранный техножурнал для выявления отправляющих этот запрос контекстов встроенного языка. Сразу через техножурнал выявлять такие запросы в разы менее непродуктивно.
mvxyz; palsergeich; +2 Ответить
8. headMade 143 02.05.18 09:19 Сейчас в теме
(6) а что это за инструмент такой "Статистика запросов MSSQL". Где про него можно прочитать подробнее ?
9. tormozit 5921 02.05.18 13:07 Сейчас в теме
(8)
Статистика

Инструмент "Статистика по запросам MSSQL" появился в последней выпущенной версии и пока не имеет страницы с описанием. Она появится в ближайшее время. Как искать инструмент по названию, показано на картинке
Прикрепленные файлы:
Spartacus; CSiER; fancy; palsergeich; headMade; +5 Ответить
12. tormozit 5921 02.05.18 16:25 Сейчас в теме
(8) Добавил описание на основном сайте
26. Dach 296 04.05.18 10:17 Сейчас в теме
(12) Извините за оффтоп, но раз уж тут пошла речь...

Если в конфигурацию не встроена обработка ирАнализТехноЖурнала - отчет сбора статистики не запускается.

Имею ввиду из портативной версии ИР.

Пришлось найти все вхождения и закомментить:

ПриКомпоновкеРезультата(
......

АнализТехножурнала = Обработки.ирАнализТехножурнала.Создать();
29. tormozit 5921 04.05.18 20:10 Сейчас в теме
(26) Было бы классно увидеть багрепорт там, где все ожидают его увидеть и подробно оформленный. Проблему воспроизвел.
11. palsergeich 02.05.18 13:48 Сейчас в теме
7. tormozit 5921 01.05.18 21:27 Сейчас в теме
(5)
в ИР к сожалению уже на 200+ тыс записях (точное число не скажу) вылетает

1. Для предотвращения вылетов в 32-разрядном приложении можно использовать ограничитель по количеству загружаемых событий.
2. Можно использовать 64-разрядное клиентское приложение, где такой проблемы, полагаю, не должно быть (не проверял тщательно).
10. palsergeich 02.05.18 13:41 Сейчас в теме
(7)
в ИР к сожалению уже на 200+ тыс записях (точное число не скажу) вылетает

1. Для предотвращения вылетов в 32-разрядном приложении можно использовать ограничитель по количеству загружаемых событий.
2. Можно использовать 64-разрядное клиентское приложение, где такой проблемы, полагаю, не должно быть (не проверял тщательно).

1) Знаю, но даже 500 000 это мало. Пример совершенно реальной проблемы - я привел выше, можно бесконечно сидеть и делать оптимизацию в запросах дольше 0.1 секунды (чем ранее коллеги и занимались) пытаться оптимизировать, а толку будет мало.
2) Версию клиента посмотрю, может быть и правда проблема была в версии клиента у меня и x86 и x64 стоят, спасибо за наводку.
14. sanjakaiser 03.05.18 12:21 Сейчас в теме
Еще по этой теме есть вебинар на три часа от Виктора Богачева (экзаменатор, принимающий Эксперта). Гуглить например так: регулярные выражения Богачев
15. starik-2005 2180 03.05.18 12:32 Сейчас в теме
(0)
Вообще, любое количество символов в регулярных выражениях означается «.*», но создателей команды cat это не смущает.
Ну тут автор попутал маску файла и шаблон регулярного выражения. Автор, не нужно путать эти два в общем-то неодинаковых по синтаксису "языка".
[0-9][0-9]:.{15,20}
Ну как вариант, хотя, конечно, "\d{2}:.{,20}" на мой взгляд выглядит лаконичнее и нагляднее, да и вообще я сомневаюсь, что "{15,20}" даже в обрезанном варианте здесь нужно - достаточно использовать нежадный модификатор.

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

По-сути, регулярные выражения очень хорошо позволяют извлекать текст из текста и модифицировать текст, что зачастую даже важнее поиска (по поводу простого сравнения с шаблоном по регулярке, то в 1С есть механизм XDTO, который может с этим справиться на любой поддерживаемой ОС без внешних компонент). А вот менять он не умеет. При том простой кейс замены даты, выгруженной в обычном формате 1С (ДД-ММ-ГГГГ чч:мм) можно поменять на XML-формат (YYYY-MM-DD) с помощью групп вот таким образом:
Шаблон поиска:
>(\d\d).(\d\d).(\d{4})( \d\d:\d\d)<

Шаблон замены:
>\3-\2-\1<

Т.е. определяются группы (то. что в скобках). Дальше эти группы по номеру используются в шаблоне замены, в итоге сначала выводится 3-я группа с годом, потом вторая, потом первая. Таких шаблончиков разобрать штук десять - и все, регулярки освоены. Дальше можно делать с ними все на свете.
17. vasilev2015 1848 03.05.18 12:46 Сейчас в теме
(15) Про регулярные выражения лучше прочитать в книге Джеффри Фридла «Регулярные выражения». В статье - приложение на практике, приближенное к экзамену.
18. starik-2005 2180 03.05.18 12:52 Сейчас в теме
(17)
Про регулярные выражения лучше прочитать в книге
Вы читали в книге? Как оно там? Сколько страничек? Если читали, то зачем пишите "[0-9]" вместо "\d"?

На мой взгляд, сначала лучше в ВИКИ читнуть, поиграться с notepad++, потом с grep (кстати, никогда не юзал egrep - чем он отличается?), потом с sed. В итоге за пару дней освоится основной функционал, которого уже будет для большинства задач за глаза. А дальше, если хочется стать экспертом не только в 1С, а еще и в регулярных выражениях, можно перейти к книгам (но я бы, лично, из книг порекомендовал "Бытие и Время", а то все хотят стать экспертами, а зачем - не знают )))
19. vasilev2015 1848 03.05.18 12:59 Сейчас в теме
(18) да, читал. Использую [0-9] вместо "\d" поскольку [0-9] работает там, где иногда не работает "\d". Egrep равносилен grep с ключом -e. Экспертом хочу стать по-приколу: могу себе позволить.
20. starik-2005 2180 03.05.18 16:17 Сейчас в теме
(19) в вики написано, что это одно и то же, только синтаксис регулярок упрощен, а для полного нужно заэкранировать спецсимволы.

Интересно стало, где "[0-9]" работает, а "\d" - нет... Сходу не смог ничего такого придумать. Подскажете?
21. leemuar 03.05.18 18:17 Сейчас в теме
(20) Насколько я помню \d не является метасимволом в posix, только в pcre. Шанс нарваться сегодня на утилиту, не умеющую pcre довольно мал.

За написание [0-9] вместо \d есть большой аргумент: удобочитаемость. Регулярки очень сложно читать. Помнить и расшифровывать все метасимволы достаточно неудобно. Использование простого диапазона повышает "понимаемость" регулярки.

А так, конечно, разницы в получаемом результате нет
Darklight; +1 Ответить
16. kudlach 22 03.05.18 12:42 Сейчас в теме
Извиняюсь, но термин "регулярные выражения" - это немного не к журналу регистрации изначально. Это к стыку мат.анализа , теории множеств и азам программирования.
Отдельная тема к экзаменам второго курса ВУЗа.
Думается мне, более правильно тема звучала бы "Применение регулярных выражений в решении задач таких-то"
22. mvxyz 258 03.05.18 21:47 Сейчас в теме
(16) Нормальное название статьи. Тем кто готовится к экзамену на эксперта сразу понятно о чем речь. Автору спасибо.
23. starik-2005 2180 03.05.18 22:28 Сейчас в теме
(22)
За написание [0-9] вместо \d есть большой аргумент: удобочитаемость. Регулярки очень сложно читать. Помнить и расшифровывать все метасимволы достаточно неудобно. Использование простого диапазона повышает "понимаемость" регулярки.
А мне, лично, кажется, что короче - в данном конкретном случае лучше. Я тут видел в XBRL ЦБ таких регулярок в шаблоны наклал, что страшно становится. Например, они написали полное выражения для корректного диапазона дат (при том для текстового элемента открытой оси). И вот этот огород в двести символов (а может и больше) определенным образом напрягает. Они там все феврали вырисовали с учетом високосных лет, например. И все это мельтешит через "|" и цифры.
24. sanjakaiser 04.05.18 07:31 Сейчас в теме
К сожалению, отредактировать предыдущий мой пост уже нельзя, вот видео Богачева

https://www.youtube.com/watch?v=pV8wgI8haf4.

(Не реклама) Автор дает представление о том, что такое регулярки, почему их надо использовать при анализе ТЖ, ну и на практике показывает, куда это запрягать + Это тот человек, который принимает у вас экзамен 1С:Эксперт
Rustig; Grigoripal; +2 Ответить
25. vasilev2015 1848 04.05.18 08:56 Сейчас в теме
(24) спасибо, полезная информация.
27. Dach 296 04.05.18 10:22 Сейчас в теме
Пользуясь случаем (простите за оффтоп еще раз), раз в ветке отметились мастера разбора ТЖ, хочу посоветоваться...

Есть большая БД, РИБ. Я верно понимаю, что если настраивать ТЖ, то это придется делать во всех узлах и потом выполнять некий сводный анализ? Втом числе, наверное и с помощью регулярок.

И еще момент... Мы встроили в конфу БСП и подсистему "Оценка производительности". Планируем выявить самые "нехорошие места" сначала ей, а потом, как мне кажется - можно уже и ТЖ более детально настроить... Может кто-то пользовался подсистемой? Поделитесь впечатлениями, плз.
28. vasilev2015 1848 04.05.18 12:32 Сейчас в теме
(27) я не очень мастер, но поскольку ветка моя - постараюсь ответить. Если у вас есть планы парсить, проводить анализ и искать узкие места в дочерних базах, то настраивайте там ТЖ. Если нет планов - "впрок" не делайте. Обязательно следите за местом, которое потребляет ТЖ.

Оценка производительности незаменима для общения с заказчиком: у вас апдекс был 0,6 а теперь 0,85 - извольте заплатить. Для себя апдекс тоже интересен: смотреть, что операторы проводят заказы по 59 секунд и удивляться их терпению. Или постфактум обосновать полезность приобретения нового raid. Менеджеры привыкли верить цифрам и красивым графикам.
30. lustin 05.05.18 02:19 Сейчас в теме
я конечно понимаю что регулярные выражения это просто - но точно не для 1С-ников. А вот ниже регулярки уже для них.

#Использовать verbal-expressions

// Проверим корректность формирования URL. Допустимые схемы - http[s] и ftp

ЭкранироватьПереданноеЗначение = Ложь;

ВербальноеВыражение = Новый ВербальноеВыражение()
    .НачалоСтроки()
    .Затем(
        Новый ВербальноеВыражение()
            .Найти("http")
            .МожетБыть("s")
            .Либо("ftp")
            .ВСтроку(),
        ЭкранироватьПереданноеЗначение
    )
    .Затем("://")
    .ЧтоНибудьНоНе(" ")
    .КонецСтроки();
    
ТекстРегулярногоВыражения = ВербальноеВыражение.ВСтроку();
Сообщить(ТекстРегулярногоВыражения); 

Показать



P.S. а вы никогда не задумывались над тем почему вместо изучения регулярок и сдачи их на экзамене просто не поменять формат журнала технологического. Сюрррреализм.
Romazan; Yakud3a; Rustig; olegtymko; +4 Ответить
31. starik-2005 2180 06.05.18 13:57 Сейчас в теме
(30)
P.S. а вы никогда не задумывались над тем почему вместо изучения регулярок и сдачи их на экзамене просто не поменять формат журнала технологического. Сюрррреализм.
А какой формат ТЖ поможет сделать его анализ без поиска текста? Даже интересно стало...
32. Darklight 22 10.04.20 10:41 Сейчас в теме
(31)Возможно, в формате JSON или YAML (как это сейчас достаточно популярно в других системах, формирующих логи - в основном в WEB; да и готовых шин данных и парсеров логов в в таком формате уже создано полно) - когда за парсинг строки будет отвечать уже встроенная библиотека разбора данного формата. Хотя это не отменяет того, что уже в разобранных "сообщениях" не нужно делать поиск по регуляркам в их полях. Ну даже если не по регуляркам - то просто на поиск по ключу(ам) для наложения фильтров отбора и ветвления. Впрочем, такой поиск уже куда проще описать даже с регулярками, чем парсить исходные строки Т/Ж. Но, скорость, разбора тут конечно немного снизится (из за нескольких прогонов одного и того же текста; не знаю насколько существенно - если не рассматривать алгоритм разбора на 1С - на 1С то явно заметно просядет).

Хотя я, вот, не считаю такое проседание производительности существенным недостатком. Ибо - разово можно и подождать. А для регулярной массовой обработки - лучше перейти на применение "специализированных" инструментов обработки больших объёмов текстовых данных - от ElasticSearch до, скажем, Яндекс ClickHouse (да даже MS SQLServer или PostgreSQL тут подойдут - если объёмы исходных данных не измеряются терабайтами в месяц) - куда логи проще загнать целиком - и уже там запросами их анализировать - особенно учитывая что загонять можно в реальном времени или в условно нерабочее время - о того скорость их парсинга не будет существенной. А вот анализировать будет куда удобнее и быстрее запросами (в расширенных диалектах этих СУБД), чем регулярными выражениями

P.S.
Прошу прощения за то, что написал этот ответ спустя 2 года после сообщения - я просветился за это время ;-) Тем более никто так и не ответил ранее :-( а статью эту сейчас подняли из небытия и её снова читают
33. starik-2005 2180 10.04.20 11:45 Сейчас в теме
(32) я про JSON на прошлой неделе (если не на этой) писал, что было бы не плохо, ибо: Elastic, jsonb postgres, ...
С другой стороны, сейчас ТЖ - 'это CSV, а для него есть уже кем-то написанные утилиты, которые преобразуют CSV в JSON.
С третьей стороны, есть мнение, что ТЖ - информация эфемерная, которую не нужно хранить постоянно, ибо завтра код поменялся и производительность просела в другом месте. Хранить это нет никакого смысла после того, как произведен анализ, а уж после найденного решения и подавно. Поэтому нужен формат, который бы максимально просто подвергался исследованию, а тут CSV уже действительно без всех этих парсеров на awk со сложной для обычного админа структурой слабо подходит для исследования.
34. Darklight 22 10.04.20 12:11 Сейчас в теме
(33)Да - самописные инструменты парсинга и преобразования текущего формата Т/Ж есть - я не спорю, просто это всё лишнее время на конвертацию, посему и написал, что не вижу в этом проблем по производительности - на больших объёмах куда важнее наладить эффективный сбор и консолидацию логов (и их эффективное хранение) - чем чахнуть над повышением эффективности парсинга и сложных регулярках. Вот только на экзамене по эксперту пока ещё требуют чтобы испытуемые непременно умели чахнуть над регулярками. Впрочем, изучить их конечно надо. Как и некоторые юниксовые утилиты - перекачевавшие и в windows по разбору текстовых файлов. И это действительно может быть полезно при выездном анализе производительности такими специалистами. Но к реальной стационарной практике анализа Т/Ж это имеет мало общего. Тут применяются совсем иные инструменты. Куда лучше - запихнуть лог в СУБД разными готовыми утилитами (ну или анализировать его налету запросами а-ля SQL при помощи, так же, имеющихся самописных утилит), чем парсить его сложными регулярками (учитывая что формат лога Т/Ж к парсингу регулярками не особо благоволит).

Но всё же, мировая тенденция сейчас - это формирование логово в формате JSON (тенденция не значит правило), и хорошо было бы компании 1С всё-таки добавить поддержку этого формата тоже (пусть в cfg файле бы это настраивалось - CSV или JSON, JSONB, YAML), а если бы ещё можно было бы настроить сразу трансляцию в сервис (WEB, HTTP, в т.ч. c указанием формата преобразования исходного сообщения - ну это я про возможности FileBeat намекаю только со встроенной поддержкой в платформу) или в БД (по заданной настройке подключения и формату запроса на вставку) - то вообще было бы очень круто!
Ну и стыдно должно быть - когда в продукте до сих пор нет встроенного средства хотя бы примитивного разбора а и анализа логов Т/Ж - для как раз выездных случаев разбора специалистами - когда нет возможности поднять более мощную инфраструктуру по их разбору и анализу во внешних программах (в том числе, упомянутых мной выше).

А по поводу хранения - зачастую даже в изменчивой природе конфигураций и, как следствие, данных в логах, имеет смысл хранить логи некоторое время - чтобы иметь возможность делать кросс-анализ (как было и как стало). Да и в крупных компаниях даже за сутки объёмы логово могут быть достаточно велики - чтобы сразу направлять их в условно "колоночную" СУБД, чтобы сократить занимаемое ими место и повысить скорость анализа.
Ну и зачастую, лучше писать в логи информации побольше (подетальнее) - чтобы было что потом анализировать (пусть это и снижает производительность сервера 1С - SSD тут в помощь). Просто делать это можно лишь периодически, хотя можно и постоянно - это уже зависит от того, как грамотно этими логами смогут потом распорядиться специалисты
35. starik-2005 2180 10.04.20 13:57 Сейчас в теме
(34) Про JSON я тут как раз не спорю, а идея передавать это сразу чем-нибудь через HTTP - просто бомба, ибо сэкономила бы кучу времени и средств для доставки данных в целевую систему анализа.

С другой стороны, у 1С есть тот же APDEX, который бы уже давно нужно встроить в платформу, чтобы она сама эту информацию о времени записи документа, открытии формы, проведении и прочем - фактически выбранным событиям - записывала в идеале в очередь или куда там (с настраиваемым интерфейсом). Я даже на С/Питоне/Прочем когда разрабатываю приложения, то периодически озабочиваюсь регистрацией времени для тех или иных вызовов (хотя там, слава богу, с профилированием и утилитами для этого и так проблем нет).

И вот исходя из показателей APDEX следует в идеале запускать механизм мониторинга в автоматическом режиме, дальше уже собирается ТЖ для соответствующих объектов, по которым произошла просадка APDEX, и уже готовый отчет с первичным анализом должен прилететь на хелп-деск или куда там процесс маршрутизирован в организации. Ну и, вообще в идеале, к нему должны цепляться данные о графике регламентных работ, которые производятся в интервал просадки, если они есть. А чтобы были именно они, то все регламенты должны быть "бюрократически" согласованы и акцептованы у всех ключевых стейкхолдеров.
Darklight; +1 Ответить
36. Darklight 22 10.04.20 15:26 Сейчас в теме
(35)Полностью разделяю Ваши взгляды на эту тему
37. check2 125 11.04.20 20:41 Сейчас в теме
Регулярные выражение это отлично, но не в этом сложность ИМХО. Их достаточно легко освоить. Проблема в другом в "№;*;%:№;ом количестве параметров для команд perl, sed, grep, awk. Мало того, эти параметры различаются в bash Linux и MIGW64. Да и синтаксис grep не совсем соответствует спецификации регулярки в Википедии. Например у меня было не понимание - зачем соединять строки в одну чтобы искать то что нужно? Ведь есть модификатор (?s) Оказывается, ни в одном варианте grep или egrep этот модификатор не поддерживается. Ну и в чистом виде поиска и вытаскивания выражений в скобках (some expression) и подстановка их в другой шаблон как в notepad++ нет ни в одной из перечисленных команд выше. Авторы Морозов и другие зачем то предлагают заменять переносы строк через perl, хотя достаточно tr. А и ещё... \w+ для русских идентификаторов не работает. НИКОГДА. Только [А-Яа-я]{1,}. В общем даже зная регулярки по спецификации как в википедии (наиболее полно реализованы в notepad++ и, спасибо разработчикам Эклипса в EDT НО \w+ тоже не пашет в EDT).
И каждый раз набрав регулярное выражение вспоминаю стишок.
Стою на асфальте я в лыжи обутый
То ли лыжи не едут, то ли я ?*%;*№*тый

Есть и ещё один важный момент. Я начал плотно работать с регулярными выражениями не так давно - года 3-4 назад. Вот эти последовательности cat rphost*/*.log | perl -n -e 'if (/^\d\d:\d\d\.\d+/) {$event =~ s/.\n/<line>/g; print $event."\n"; $event = "";} $event .= $_; END{print $event};' | perl -pe 's/\xef\xbb\xbf//g' | grep -P "SDBL.*Func=(Commit|Rollback)Transaction.*Context" | perl -pe 's/^\d+:\d+.\d+-//g' | perl -pe 's/,SDBL,.*Context.*<line>[ \t]+/,Context=/g' | perl -pe 's/,SDBL,.*Context=/,Context=/g' | sed 's/<line>//g' | head - бесполезно заучивать если у вас нет записной книжки под рукой. Моск не дом советов. Мой не запоминает. Проще коран выучить не зная арабского.
Только понимание каждой из команд и ежедневное использование позволят "с лёгкостью" пропарсить ТЖ. Заметил - 3 дня не использовал и уже забыл опции для perl чтобы заменить шило на мыло, вот не помню чтоб поставить между perl и 's/мыло/шило/g'. И начинается: --help а дальше почти перебор. Потому что букв две: -pe.
38. vasilev2015 1848 11.04.20 23:07 Сейчас в теме
(37) Здравствуйте !

у меня в общем, такие же ощущения, поэтому я хочу создать библиотеку скриптов Bash для парсинга ТЖ. И закрыть этот вопрос. Посмотрите пожалуйста другие мои статьи, например https://infostart.ru/public/1217031/. Буду рад любой конструктивной критике.
39. check2 125 12.04.20 14:57 Сейчас в теме
(38) Николай, я не сколько не сомневаюсь что готовые фрагменты анализа ТЖ за$bash'енные в своё время и опубликованные здесь - реально круты :) Но, Саша (М) говорил так. Прихали на секретный завод. Интернета нет. Телефон отобрали на входе. Нет ничего, ТЖ, голые руки - и bash. Вот как хочешь - так и $bash :). Поэтому всё что выше было - это не критика, а лишь призыв к пониманию, что если не будет доступа к копипасту - выручат лишь глубокие знания и понимания команд bash. Статьи посмотрел, они будут полезны при самостоятельном разборе, чтобы в голове отложилось "что вот ещё так можно" но заучивать и копипастить их, увы, будет бесполезно (по крайней мере для меня). У меня был случай (года 2 назад), который описывал Александр М. У меня был телефон, и о чудо даже работал интернет на нём! Я раз 5 перебивал строчки с мобилы на клаве компа. И всё безнадёжно - не вероятно неудобно, я терял строку, ошибался. Только понимание, только хардкор.
Оставьте свое сообщение

См. также

Исследование технологического журнала 1С при помощи регулярных выражений в блокноте Промо

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Все из тех, кто пробовали сдать на сертификат "Эксперт по технологическим вопросам 1С", сталкивались с методикой ЦКТП - разбор файлов технологического журнала при помощи консоли bash. Я, в свою очередь,внёс изменения в данную методику. Мне хотелось достичь более понятного вида и сфокусироваться на Perl, в качестве предпочтительного средства обработки файлов ТЖ. Вот что из этого вышло:

30.10.2017    29243    MrWonder    42    

Нестандартные блокировки при работе с OLAP-нагрузкой

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Если выполнение отчета мешает работе других пользователей и провоцирует блокировки, даже с учетом «грязного чтения» – ситуация кажется парадоксальной. О том, как расследовать такие проблемы, на конференции Infostart Event 2019 Inception рассказали ведущий программист торгового дома «Петрович» Станислав Щербаков и специалист по производительности компании «СофтПоинт» Александр Денисов.

20.07.2020    1666    Филин    6    

Автоматическая классификация ошибок технологического журнала

Технологический журнал v8 1cv8.cf Бесплатно (free)

В статье обсудим пример практической настройки конфигурации «Мониторинг производительности» для автоматической классификации ошибок по группам/кластерам на данных текстов описания ошибок. Используем механизм векторной модели текстов и косинусное сходство между ними.

25.06.2020    2345    ivanov660    12    

Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия

Производительность и оптимизация (HighLoad) Администрирование СУБД Технологический журнал Структура метаданных v8::Запросы Бесплатно (free)

Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов. При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.

24.05.2020    6679    DataReducer    22    

Долго открывается конфигуратор Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

В ОС Windows Server 2012 бывает полезно выключать службу Dynamic Fair Share Scheduling (DFSS позволяет балансировать и распределять ресурсы между пользователями), чтобы повысить производительность 1С:Предприятие 8 в ряде случаев.

22.04.2015    40523    Gilev.Vyacheslav    1    

[SQL Server] Использование trace flag 9592 для сжатия траффика в кластере AlwaysOn

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

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

18.05.2020    1909    Aleksey.Bochkov    3    

Пример поиска ошибок в технологическом журнале

Технологический журнал Производительность и оптимизация (HighLoad) Бесплатно (free)

Примеры bash - скриптов для поиска ошибок в технологическом журнале.

23.04.2020    2648    vasilev2015    6    

Эти занимательные временные таблицы

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

Кое-что интересное о временных таблицах и работе платформы 1С с ними.

06.04.2020    10800    YPermitin    0    

Как можно "положить" SQL сервер с помощью обычной консоли запросов 1С Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Описано как из 1С, с помощью безобидной на первый взгляд обработки, можно сделать неработоспособным SQL сервер. Предложены меры, позволяющие избежать этого.

22.01.2014    66931    yuraos    112    

Оптимизация запросов 1С посредством индексации временных таблиц. Миф? Тестируем, смотрим, считаем

Производительность и оптимизация (HighLoad) Практика программирования v8 Бесплатно (free)

Появилось свободное время, решил проверить на работе индексацию таблиц. Решил поделиться с Вами результатами исследования. Давайте порассуждаем на эту тему? Часто ли вы пользуетесь индексацией в запросах? Платформа 8.3.16.1224

03.04.2020    3695    feva    14    

Как я собрал для себя высокопроизводительный и бесплатный облачный бекенд для 1С на PosgreSQL + PostgREST

Производительность и оптимизация (HighLoad) WEB Интеграция Мобильная разработка Администрирование веб-серверов v8 Бесплатно (free)

В этой статье я расскажу о проблемах бека для мобильных приложений или другого фронта, который требует производительности, быстрой реакции и отказоустойчивости, и как я решил это благодаря opensource проекту PostgREST и СУБД Postgre SQL 12. Проведу простой тест производительности для сравнения 1С с данным решением. Это может быть полезно всем, кто разрабатывает мобильные приложения либо фронтсайд-приложения для 1С на чем угодно - на мобильной платформе или на нативном языке или на Simple UI. И также обзор новых функций SimpleUI для связи с этим бекендом.

31.03.2020    11966    informa1555    28    

Многострочный контекст событий

Производительность и оптимизация (HighLoad) Технологический журнал v8 Бесплатно (free)

Разбор технологического журнала с группировкой событий по первой или последней строке многострочного контекста.

31.03.2020    3003    vasilev2015    9    

Ускоряем списание партий УПП 1.2 / 1.3 / УТ 10.3 Промо

Производительность и оптимизация (HighLoad) v8 УТ10 УПП1 Бесплатно (free)

Не секрет, что многие пользователи, использующие партионный учет (а таких очень много, даже среди огромных холдингов, несмотря на пропаганду РАУЗ) при больших нагрузках сталкиваются с резким замедлением списания партий.

21.06.2013    53904    Антон Ширяев    117    

Анализ взаимоблокировок

Производительность и оптимизация (HighLoad) Технологический журнал v8 Бесплатно (free)

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

20.03.2020    4437    vasilev2015    21    

Многопоточность

Практика программирования Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Увеличиваем скорость загрузки данных в 20 раз. Как следует использовать многопоточность и готовый модуль для внедрения.

18.03.2020    6609    kaliuzhnyi    43    

Сравнение скорости работы 1C+MSSQL и файлового варианта Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

На форумах постоянно задается один и тот же вопрос: почему 1C+MSSQL медленнее обрабатывает запросы чем файловая? Затем обычно идет «флуд» на несколько десятков страниц. Есть два популярных «течения» в таких форумах — одни говорят что для клиент-серверного варианта это нормально, файловый вариант всегда должен работать быстрее, другие говорят что 1С плохо работает с субд. В результате «баталий и выяснения отношений» на форумах люди расходятся при своих мнения.

19.02.2013    54461    Gilev.Vyacheslav    46    

Планы запросов - это просто! Разбор оптимизаций запросов PostgreSQL на живых примерах

Производительность и оптимизация (HighLoad) v8::Запросы Бесплатно (free)

Проблема быстродействия 1С напрямую зависит от производительности запросов. Но как понять механику работы СУБД с помощью плана запроса? Андрей Овсянкин и Никита Грызлов на конференции Infostart Event 2019 Inception подробно рассмотрели алгоритм работы с планом запроса СУБД PostgreSQL, полученным из технологического журнала, и рассказали, на что обратить внимание, чтобы оптимизировать работу системы.

17.02.2020    8763    Evil Beaver    13    

Оптимизатор запросов. Вторая часть

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

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

23.01.2020    6235    darkdan77    59    

Улучшаем производительность 1С. Рекомендации

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

Каждый уважаемый разработчик 1С сталкивался или столкнется с вопросом производительности высоконагруженных систем. В статье агрегирован основной набор рекомендаций, который позволит повысить производительность системы. Эти рекомендации должны быть просто must have по определению.

23.01.2020    7466    Kaval88    26    

Параллельные вычисления в 1С 8 Промо

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Решение позволяет ускорять выполнение запросов в 1С 8 в отчетах путем их параллельного выполнения в разных потоках.

11.02.2013    29890    gallam99    19    

Мониторим производительность с помощью 1С RAS

Инструментарий разработчика Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Подключаемся и анализируем данные через 1С RAS. Необходимо выполнить 5 пунктов и серьезный инструмент мониторинга будет у вас в руках.

19.12.2019    10674    ivanov660    16    

Весёлые картинки о работе Performance Monitor на Windows Server 2016 Std по мотивам расследования потери производительности на базе 1С

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Данная публикация посвящена одной особенности Performance Monitor на Windows Server 2016 Std. Как понимать графики Performance Monitor на Windows Server 2016 Std при расследовании проблем в работе 1С.

22.10.2019    7314    EugeneSemyonov    11    

Обслуживание баз данных. Не так просто, как кажется

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

Считаете, что обслуживание индексов и статистик дело простое? Что ж, это не всегда так.

14.10.2019    17117    YPermitin    28    

Ubuntu vs CentOS vs Win2k8 vs Debian: производительность PostgreSQL Промо

Статистика базы данных Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Хотя интернет уже переполнен статьями о "правильной" настройке связки PostgreSQL и 1C 8.2, для подводных камней всегда остается место. При сравнении производительности СУБД PostgreSQL на разных ОС, показатели различаются в разы. Самую большую обиду принесла любимая Ubuntu (человечность). После долгих дней и ночей проведенных за консолью этой ОС, она разочаровала окончательно. Тормоза PostgreSQL в Ubuntu Server. Что с ними делать? Сколько раз можно наступать на грабли?

03.11.2012    42089    madmpro    32    

Мониторинг высоконагруженной системы

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Высоконагруженной системе (более 8000 клиентских сессий) мониторинг необходим. Про опыт использования инструментов для мониторинга – самописной системы информирования, написанной на C#, и конфигурации «Центр контроля качества» в связке с системой отображения данных Grafana, на конференции Infostart Event 2018 Education рассказал Олег Репников.

13.09.2019    8784    Repich    5    

Использование Zabbix для сбора информации о серверных вызовах и управляемых блокировках с сервера 1С Предприятия, работающего на платформе GNU/Linux

Администрирование данных 1С Zabbix v8 Бесплатно (free)

Описанные в данном опусе механизмы ни в коей мере не противопоставляются тому, что реализует КИП от 1С или какие-либо другие инструменты (решения)! Это всего лишь еще один взгляд на "проблему", который может быть полезен в некоторых ситуациях.

10.09.2019    18102    Sloth    24    

Хранение файлов - как уменьшить размер базы данных

Чистка базы Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 Россия Бесплатно (free)

Хранение файлов в базе 1С можно оптимизировать для уменьшения размера хранимых данных.

09.09.2019    8316    2tvad    17    

Неочевидные проблемы производительности: важность системного подхода при анализе

Производительность и оптимизация (HighLoad) v8 Россия Бесплатно (free)

Часто программисты и 1С-ники сталкиваются с совершенно необъяснимыми на первый взгляд проблемами. Но это потому, что их внимание направлено только на один сегмент системы, а не на всю систему полностью. О том, почему нужно стараться смотреть на ситуацию комплексно, рассказал специалист по производительности компании SOFTPOINT Александр Денисов.

19.07.2019    8766    Филин    12    

Ловля блокировок на связке "Microsoft SQL server - 1С"

Производительность и оптимизация (HighLoad) v8 v8::blocking Бесплатно (free)

Материал относится к базам данных на связке «1С - MS SQL Server». Один из способов отлова блокировок в бд 1С . Переход к управляемым блокировкам через режим "Автоматический и управляемый".

16.07.2019    9587    fhqhelp    0    

Анти-оптимизация: как мы ускорили запрос в 4 раза, сделав его неоптимальным

Производительность и оптимизация (HighLoad) Практика программирования Решение задач на 1С:Специалист Разработка v8 Бесплатно (free)

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

02.07.2019    11070    igordynets    119    

Ускорение чтения правил обмена в УПП 1.3 в 20 раз!

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Способ оптимизации чтения правил обмена конвертации данных. Может понадобиться при большом размере правил и высокой периодичности обмена.

27.06.2019    9677    YPermitin    16    

Хотите снизить нагрузку на процессор сервера в 2 раза?

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

В статье рассмотрено влияние частого запуска регламентных заданий на процессор сервера 1С.

27.06.2019    9329    Дмитрий74Чел    6    

Непридуманные истории по оптимизации. История 1

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

Первая статья из планируемого цикла об оптимизации приложений на базе 1С. Без теории. Одна практика.

13.06.2019    12430    Repich    117    

Оптимизация: неэффективные запросы

Производительность и оптимизация (HighLoad) Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

В большинстве случаев основной причиной медленной работы системы при многопользовательском режиме работы является блокировка данных СУБД (говорим про клиент-серверную версию). Блокировка - это не есть хорошо или плохо, это жизненно необходимая вещь при построении прикладной логики работы системы. Но блокировки таблиц, записей могут быть как вполне законными, так и далеко не всегда оправданными в каждой конкретной ситуации. Одной из самых распространенных причин неоптимальной блокировки ресурсов является некорректное написание запросов.

13.06.2019    5783    slayer-ekb    10    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    23977    dmurk    144    

Совершенный коТ (Cat complete)

Практика программирования v8 1cv8.cf Бесплатно (free)

Стандарты программирования в картинках. Самоирония прилагается.

03.06.2019    8949    vasilev2015    149    

За 5 шагов добавляем мониторинг счетчиков производительности серверов MS SQL и 1С

Статистика базы данных Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Мы расскажем и покажем, как добавить данные счетчиков производительности серверов 1С и MS SQL в нашу базу мониторинга за 15 минут. Приведем список наиболее важных из них, опишем основные особенности.

28.05.2019    18401    ivanov660    9    

Не думать о секундах свысока...

Производительность и оптимизация (HighLoad) v8 1cv8.cf Бесплатно (free)

Несколько примеров оптимизации типовой конфигурации УТ11. Описанные приемы подходят для многих других конфигураций.

21.05.2019    7851    vasilev2015    21    

Альтернативная стратегия управления блокировками

Производительность и оптимизация (HighLoad) v8 v8::blocking 1cv8.cf Россия Бесплатно (free)

Данная публикация освещает одну из альтернативных стратегий блокирования данных на уровне MS SQL Server, которая недоступна средствами 1С, но может быть весьма полезной. Разбирается практический пример.

20.05.2019    7077    zhichkin    15    

Как работают управляемые блокировки

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

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

29.04.2019    22231    comol    198    

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

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Решение проблемы постоянного роста папки %AppData%/Local/Temp.

26.04.2019    14016    kuzyara    12    

Включение встроенного в платформу механизма "Копии базы данных" и использование "Дата Акселератора". Новый стандартный механизм использования баз OLAP в 1С

Производительность и оптимизация (HighLoad) v8 Россия Бесплатно (free)

С версии 1С 8.3.14 в платформе появился новый функционал «Копии базы данных». В данной публикации я хочу рассказать, как включить использование данного механизма в платформе 1с и как его использовать для получения отчетов с копии базы данных, которая может быть вынесена на внешний сервер относительно текущей базы данных, а также как использовать систему «Дата акселератор», в которой база данных целиком размещена в оперативной памяти рабочего сервера кластера серверов «1С:Предприятия».

25.04.2019    13672    Elf1k    27    

5 простых шагов и 15 минут на разворачивание инструмента мониторинга проблем производительности базы 1С

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

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

18.04.2019    28757    ivanov660    77    

Как разбить базу на файлы и не сойти с ума

Производительность и оптимизация (HighLoad) v8 Бесплатно (free)

Разбиение базы данных 1C на файлы и последующее сопровождение. Нюансы, грабли и прочее.

06.04.2019    15502    YPermitin    30    

Как одно изменение конфигурации PostgreSQL улучшило производительность медленных запросов в 50 раз

Производительность и оптимизация (HighLoad) v8 1cv8.cf Россия Бесплатно (free)

В связи с санкциями и другими событиями сейчас все более и более актуальна тема перевода ПО компаний на отечественное и свободное программное обеспечение. Одной из самых востребанных СУБД на рынке на данный момент является PostgreSQL - надежная, высокопроизводительная и хорошо масштабируемая СУБД, которая является прямым конкуретном таким крупным компаниям с их топовыми продуктами, как Oracle, IBM и Microsoft. Однако каждый, кто переходит на PostgreSQL, сталкивается с трудностями, прежде всего с настройкой и производительностью. Не обошли проблемы с производительностью "слоника" и меня. Предлагаю вашему вниманию перевод статьи "How a single PostgreSQL config change improved slow query performance by 50x" автора Pavan Patibandla, которая мне помогла улучшить производительность PostgreSQL.

18.03.2019    15479    w.r.    23