www.infostart.ru/1c/articles/2027654/ - тут первая часть.
Рекомендации по решению практической части экзамена:
Вам дадут доступ к удаленному компьютеру, там, где установлена Linux Ubuntu c интерфейсом, подключились, на рабочем столе есть инструкция и некоторые инструменты для разработчика, не забудьте писать описания каждой вами решенной задачи. Без описания экзаменатор не примет ваше решение.
Заметки для сдающих:
1. На рабочем столе студента есть папка с названием "Решение". Экзаменаторы настойчиво требуют переименовать ее в ФамилияИО. Очный формат сдачи ничем не отличается от онлайн экзамена и решения может проверять еще один экзаменатор, который находится далеко от аудитории. Угадывать, кто сидит на этой машине - нет никакого желания.
2. Перед тем как приступать к решению, прочитайте задание до конца. В нем, часть предложений выделена красным цветом. Это ответы на самые часто встречающиеся вопросы.
3. Если в начале процедуры стоит комментарий "НЕ ИЗМЕНЯТЬ", то по условиям задачи ее нельзя менять или комментировать вызов данной процедуры. Совсем нельзя.
4. Стенд предоставляется в работоспособном состоянии. Если у студента не получается настроить ТЖ, запустить сервер 1С, обнаружена нехватка памяти для работы 1С - надо искать проблемы и решать их.
5. Воспринимайте экзамен как "Вы приехали к заказчику у которого что-то не работает". Заказчиком является экзаментор. Вопросы вида "Как мне запустить север 1С?" от будущего Эксперта - вызывают недоумение.
6. Не пытайтесь обмануть экзаменаторов. Они знают все проблемы и их решения наизусть. Способ "я сейчас весь код возьму в попытку и не будет ошибок" - не сработает. В реальной жизни так сделать точно не получится.
7. Складывайте всю информацию о решении в папку ФамилияИО. Идеальное решение без единого файла техжурнала - сразу вызывает массу вопросов.
Дальше приступим к решению:
Первом делом настроим отладку и включаем технологический журнал (дальше ТЖ).
Самый простой способ включить отладку это посмотреть статус сервиса (systemctl status srv1cv8) и копируем из строки loaded: /lib/systemd/system/srv1cv8.service, будем запускать nano или vim /lib/systemd/system/srv1cv8.service - открывается текстовый редактор, ищем Environment=SRV1CV8_DEBUG= и добавим туда -debug, записываем Ctrl+X, Y, дальше systemctl daemon-reload | systemctl restart srv1cv8 - дальше проверьте, отладка у вас должна работать.
Чтобы не терять много времени, включите полный технологический журнал, рекомендую разные варианты файла logcfg.xml заранее подготовить и сохранить в отдельную папку, например documents, чтобы быстро копировать командой:
cp /home/documents/logcfgfull.xml /opt/1cv8/conf/logcfg.xml
Путь к логам ТЖ лучше укажите в рабочую папку пользователя 1С /home/usr1cv8/logs, меньше проблем будет с правами доступа, конечно, решать вам, я не сильный линуксоид.
Редактировать/создать файл logcfg.xml сможете следующей командой:
nano /opt/1cv8/conf/logcfg.xml
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="/home/usr1cv8/logs" history="8">
<event>
<ne property="name" value=""/>
</event>
<property name="all"/>
</log>
</config>
С тегами plansql, scriptcircrefs, и т.д. очень осторожно, рекомендую читать ИТС, насколько они нагружает СУБД, диск и другие элементы сервера. Каждую итерацию теста сохранить в отдельную папку /home/usr1cv8/logs1, /home/usr1cv8/logs2 и т.д. Это удобно для разбора, не будут мешать старые логи, при разборе новой проблемы.
В этой статье хочу больше обратить ваше внимание на разбор технологического журнала, так как расследовать проблемы по ТЖ это самый лучший способ найти узкие места, конечно, это не единственный способ, к статье на экзамене вам доступен еще ЦУП.
Мне понравился разбор ТЖ с единой заменой на языке perl, хочу делиться именно данной методикой разбора ТЖ.
Давайте разберем клиент-серверные вызовы из ТЖ, ищем все CALL с контекстом:
cat rphost*/*.log |\
grep -iP ',CALL,.*Context=' |\
perl -pe 's/^\d\d:\d\d.\d+-(\d+),CALL,.*Context=(.*),Interface=.*Memory=(-?\d+),MemoryPeak=(-?\d+),InBytes=(\d+),OutBytes=(\d+),CpuTime=(\d+)/\1-\2/;' |\
awk -F'-' '{Duration[$2]+=$1; Count[$2]+=1; if (Max[$2]<$1); Max[$2]=$1;} END {for (i in Count) {printf "%d %d %d %d - %s\n",Duration[i],Duration[i]/Count[i],Count[i],Max[i],i}}' |\
sort -rnb |\
head -n 5
s/^\d\d:\d\d.\d+-(\d+),CALL,.*Context=(.*),Interface=.*Memory=(-?\d+).... - каждая скобка в замене командой "s" языка perl - это отдельная цифра или нам нужный контекст, который нужен для разбора:
\1 - длительность события в микросекундах,
\2 - Context (контекст серверного вызова),
\3 - Memory (занятой, но не освобожденной за время серверного вызова),
\4 - MemoryPeak (Пиковое значения объема памяти в байтах за время серверного вызова),
\5 - InBytes (Количество данных, прочитанных с диска за время вызова (в байтах)),
\6 - OutBytes (Количество данных, записанных на диск за время вызова (в байтах)),
\7 - CpuTime (Процессорное время, в микросекундах).
Данный скрипт сможете сохранить в текстовой файл в разных вариантах, чтобы получить нужную вам информацию по серверным вызовам. Например, ТОП вызовы по длительности, ТОП вызовы по памяти, ТОП вызовы по пиковой памяти, ТОП вызовы по записи на диск, ТОП вызовы по чтению с диска, и ТОП вызовы по процессорному времени, \2 - контекст обязательно укажите, и один любой другой параметр, \1 - длительность, в моем примере будем расследовать по длительности серверного вызова. Вам на экзамене стоит проверить другие значения тоже, так как может, еще проблемные коды дают нагрузку на память, или на диск.
Дальше уже с помощью языка awk получаете суммарное значение, среднее значение, максимум и т.д., сортируете в обратном порядке по общей сумме и выводите в результат только топ 5.
В результате выполнения скрипта получите следующее:
1157445010 115744501 10 96228001 - Форма.Вызов : Обработка.ОтчетПоДатеДокументаПокупки.Форма.Форма.Модуль.СформироватьНаСервере
729649043 16582932 44 10220001 - Форма.Записать : Документ.Продажа.Форма.ФормаДокумента
52775001 13193750 4 10602000 - Форма.Вызов : Обработка.МаксимальнаяЦенаИДокументЗаДень.Форма.Форма.Модуль.ВыгрузитьДанныеНаСервере
10121000 10121000 1 10121000 - Форма.Вызов : Обработка.ЭмуляцияРаботыПользователей.Форма.Форма.Модуль.ПолучитьНомерПродажиДляСторно
2267060 38424 59 39002 - Форма.Вызов : Обработка.ЭмуляцияРаботыПользователей.Форма.Форма.Модуль.ПолучитьНовыйДокумент
Еще будет не лишним посмотреть самые длительные запросы на СУБД (здесь я не стал объединять одинаковые запросы, вы сможете объединить либо по тексту запроса, либо по контексту, awk вам в помощь):
cat rphost*/*.log |\
perl -pe 's/\n/<&>/; s/(^\d\d\:\d\d.\d+-)/\n\1/;'|\
grep -iP ',DBPOSTGRS,' |\
perl -pe 's/^.{12}-//' |\
sort -rnb |\
head |\
perl -pe 's/<&>/\n/g'
Если вы нашли уже самый проблемный вызов и там длительный запрос, стоит перенастроить logcfg.xml и найти запрос СУБД с планом запроса, это можно сделать разными способами, 1) из лога Postgresql с помощью autoexplain (сначала нужна включить autoexplain), 2) с помощью psql и текста запроса, добавив explain analyze, 3) а я применил самый простой способ, получил из ТЖ, настроив logcfg.xml следующим образом, желательно укажите отдельную папку /home/usr1cv8/logsplansql:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="/home/usr1cv8/logsplansql" history="8">
<event>
<eq property="name" value="DBPOSTGRS"/>
<like property="Sql" value="%from inforg4589%"/>
<like property="Sql" value="%field89%"/>
</event>
<property name="all"/>
</log>
<plansql/>
</config>
После перенастройки ТЖ, вручную запускаем нам нужную команду из 1С, в результате в папке /home/usr1cv8/logsplansql записывается только нам нужный запрос с планом запроса.
Дальше уже пригодятся ваши навыки понять план запроса, найти, где именно идет неоптимальное чтение или запись, сканирование, поиск, из индекса или из таблицы. Разбираете и переписываете неоптимальный запрос, итерацию повторяете, пока не будет оптимален план запроса. Таким способом в десятки раз можно ускорять выполнение запроса на СУБД. Тут вы можете убедиться, любой наш "красивый" запрос может работать очень не оптимально в СУБД. Поделюсь ссылкой на статью там где очень подробно о план запросе: //infostart.ru/1c/articles/1883877/
Для следующей итерации теста, не забудьте logcfg.xml перенастроить полный ТЖ и в новую папку.
Мы с вами разбирали только серверные вызовы и запросы, нам обязательно стоит искать в ТЖ взаимоблокировки, таймауты, самые длинные транзакции и длительные ожидания ресурсов. Для этого расследуем следующие события: TDEADLOCK, TTIMEOUT, TLOCK, SDBL. Все перечисленные события, в отличие от CALL, состоят из нескольких строк, нам сначала необходимо в одну строку привести и потом искать нужное нам событие, иначе мы пропускаем много информации о событии.
cat rphost*/*.log |\
perl -pe 's/\n/<&>/; s/(^\d\d:\d\d.\d+-)/\n\1/;'|\
grep -iP ',TDEADLOCK,' |\
perl -pe 's/<&>/\n/g;'
Результат выглядит следующим образом:
47:19.109001-0,TDEADLOCK,5,process=rphost,p:processName=demokursy1c,OSThread=3256,t:clientID=23,t:applicationName=1CV8C,t:computerName=srv1c,t:connectID=276, SessionID=1,Usr=Администратор,AppID=1CV8C,DBMS=DBPOSTGRS,DataBase=srv1c\demokursy1c,DeadlockConnectionIntersections='276 279 InfoRg201.DIMS Exclusive Fld202=32:8da93024327b1d2511ea06ec60f5c1a0 Fld203=31:8daf3024327b1d2511ea0f899f7b26f2 Period=T"20191106093100",279 276 InfoRg201.DIMS Exclusive Fld202=32:8da93024327b1d2511ea06ec60f5c1a0 Fld203=31:8daf3024327b1d2511ea0f899f7b26f2 Period=T"20191106093100"',Context='Форма.Вызов : Обработка.ИсправлениеКотировок.Форма.Форма.Модуль.ИсправитьНаСервере
Обработка.ИсправлениеКотировок.Форма.Форма.Форма : 17 : Обработка.ИсправитьНаСервере(ДатаВремя1, ДатаВремя2, Биржа, ЦеннаяБумага);
Обработка.ИсправлениеКотировок.МодульОбъекта : 44 : Котировка.Записать();'
Давайте кратко опишем данный TDEADLOCK, тут 2 транзакции друг друга блокируют, номер соединений видим 276 и 279, при установки исключительной блокировки на ресурс InfoRg201.DIMS Exclusive произошла взаимоблокировка, будем искать 2 "виновника" и 2 "жертвы", определим, какой вид взаимоблокировки, нам известно 2 вида: 1) Повышение уровня блокировки, 2) Захват ресурсов в разном порядке, в случае первого вида будем устанавливать более высокий уровень блокировки сразу в начале, во втором виде будем блокировать ресурсы в правильном порядке. Таким образом решим проблему.
TTIMEOUT расследуем аналогично как TDEADLOCK, единственное отличие, тут будет всего один "виновник", и одна "жертва".
Для полного разбора TDEADLOCK, TTIMEOUT, эскалацию рекомендую посмотреть Вебинар от Елены Скворцовой совместно с УЦ №1.
Давайте найдем еще самые длинные транзакции:
cat rphost*/*.log |\
perl -pe 's/\n/<&>/; s/(^\d\d:\d\d.\d+-)/\n\1/;'|\
grep -iP ',SDBL,.*Func=(CommitTran|RollbackTran)' |\
perl -pe 's/^.{12}-//' |\
sort -rnb |\
head -n 5 |\
perl -pe 's/<&>/\n/g;'
Еще стоит расследовать самые длинные ожидания ресурсов в управляемой блокировке:
cat rphost*/*.log |\
perl -pe 's/\n/<&>/; s/(^\d\d:\d\d.\d+-)/\n\1/;'|\
grep -iP ',TLOCK,.*WaitConnections=\d+' |\
perl -pe 's/^.{12}-//' |\
sort -rnb |\
head -n 5 |\
perl -pe 's/<&>/\n/g;'
Это нам поможет найти, где неоптимально установлены управляемые блокировки. Нам всем известно, в транзакциях нужно наложить блокировку как можно ближе к концу, тогда происходит минимальное ожидание в ресурсах.
Научитесь писать скрипты вручную, ни разу не делайте копи паст, каждый раз вручную нужно набрать длинный скрипт, это вам поможет без ошибок писать скрипт, так как на экзамене не будет времени искать ошибки. Придется писать скрипт с первого раза.
По первому дню экзамена у меня все, настоятельно рекомендую составить индивидуальный план, хотя бы по-крупному, без плана вам не хватит 7 часов, учтите время на обед внутри этих 7 часов.
Рекомендации по теорической части экзамена:
Теоретическая часть экзамена проходит во второй день, будут участвовать только те, кто прошел в первый день практический экзамен. Экзаменатор назначит время, вы приходите в назначенное время, всем раздает листовки задач, там 20 вопросов для письменного ответа, еще 3 вопроса для устного ответа, всего 45 минут дает для подготовки ответов. Кто готов на ответ, сможет экзаменатора звать и сдать теорию.
Чтобы правильно ответить и пройти теоретическую часть экзамена, вам нужно знать глубоко все механизмы Кластера 1С, расследование проблем производительности, проблемы параллельности, APDEX, Delta APDEX, индексы, как работает оптимизатор плана запроса, как можно повлиять на оптимизатор, когда может быть некорректный план запроса, особенности СУБД, особенности операционной системы, технологию работы процессоров, ОЗУ, дисков и т.д.
Вопросы по теории будут вокруг следующих вопросов (список взят с официального сайта 1С):
1. В каких случаях рабочий процесс может быть завершен средствами кластера серверов 1С? Что при этом будет видно в технологическом журнале?
2. Что такое план запроса и зачем он нужен? Кто и когда формирует план запроса? Как можно повлиять на выбор плана запроса?
3. Назовите известные вам типичные ошибки в коде конфигурации и структуре метаданных, которые могут привести к неоптимальной работе запроса и дайте рекомендации по их устранению.
4. Что такое транзакция? Что такое блокировка данных? Как блокировка данных связана с транзакцией?
5. Что такое уровень изоляции транзакции? Какие уровни изоляции транзакции поддерживаются 1С:Предприятием 8? Чем они отличаются?
6. Назовите наиболее типичные причины возникновения взаимоблокировок (deadlock). Опишите схему возникновения взаимоблокировок для каждого случая. Каким образом избежать их возникновения?
7. Какие операции в плане запроса свидетельствуют о неоптимальной работе запроса на MS SQL Server?
8. Какие операции в плане запроса свидетельствуют о неоптимальной работе запроса на PostgreSQL?
9. Какую задачу решает менеджер транзакционных блокировок в 1С:Предприятии 8?
10. Каким образом работает механизм повторного использования возвращаемых значений? В каких случаях рекомендуется его применять?
11. Как достичь наилучшего результата при оптимизации производительности системы, используя возможности методики APDEX?
12. Как выяснить причины высокой нагрузки на процессоре на сервере 1С? Каковы типичные причины такого поведения на уровне встроенного языка?
13. Как выяснить причины большого потребления памяти процессами кластера? Каковы типичные причины такого поведения на уровне встроенного языка?
14. Как настроить отказоустойчивый кластер серверов 1С? На что влияет уровень отказоустойчивости?
15. Какие требования назначения функциональности могут потребовать дополнительной настройки при использовании кластера серверов 1С? Почему именно они?
16. Каким образом можно повлиять на план выполнения запроса?
17. Как определить место в конфигурации, откуда в данный момент выполняется запрос пользователем?
18. Как определить, выполнение каких именно запросов требует больше всего времени?
19. Как определить, при записи каких объектов метаданных происходят наибольшие ожидания на управляемых транзакционных блокировках?
20. Какие есть основные этапы запуска нагрузочного теста?
Каждый вопрос из списка стоит изучать в расширенном виде, по каждому из вопросов можно составить десятки дополнительных вопросов, я так понял, тут только тезисы вопросов, из чего отталкиваются при составлении экзаменационного билета. Выучить все события технологического журнала, и вникать по каждому. Выучить весь перечень сервисов кластера.
Давайте разберем на примере одного вопроса, допустим, № 14: Как настроить отказоустойчивый кластер серверов 1С? На что влияет уровень отказоустойчивости?
Тут можно составить следующие вопросы:
если уровень отказоустойчивости = Х,
а) Сколько центральных серверов (дальше ЦС) нужны?
б) Сколько комплектов лицензий нужно? Дублирование сеансов кушает ли лицензии? если программно? если аппаратно?
в) Какие сервисы реплицируется? Почему?
г) Установка галочки ЦС на что влияет?
Это еще не все, по каждому вопросу десятки новых вопросов можно составить, поэтому настоятельно рекомендую читать и вникать каждую строку в ИТС, а также по остальным вопросам изучать и вникать в смысл следующих источников:
Курсы:
Курс Андрея Бурмистрова Проф. Домашки делать все обязательно!
Курс Виктора Богачева. Основной. Домашки делать все обязательно!
Курс Применение методик от УЦ1. Антон Евтушенко (тут много теории)
Книги:
Настольная книга 1С:Эксперта по технологическим вопросам.
Методическое пособие по эксплуатации крупных информационных систем на платформе 1С Предприятие
Электронные источники:
Инфостарт - статьи по highload
ИТС: Руководство администратора - 1 и 10 глава зазубрить 100%,
Клиент-серверный вариант. Руководство администратора - зазубрить все 100%,
Руководство разработчика - 100%.
kb.1c.ru - все методики, а лучше весь ресурс от и до. И не просто прочитать, а вникнуть.
msdn, postgrespro раздел education.
На ютубе доклады от Елены Скворцовой, от Антона Дорошкевича, курсы от Константина Ефимова, от Рината Юмасултанова.
Доклады на конференциях Инфостарт, Единый семинар 1С.
ВСЕМ ЖЕЛАЮ УДАЧИ В СДАЧЕ ЭКЗАМЕНА!
www.infostart.ru/1c/articles/2027654/ - тут первая часть.