Channel: Прусаков Никита про 1С
Выполняю практику по курсу подготовки к эксперту, суть задачи: прогнать тест, собрать ТЖ, написать скрипт, который покажет наиболее неоптимальные операции, и исправить их.
Попался один запрос, целиком выполняется долго, секунд 8, не дело конечно. Но суть не в том, что он выполняется медленно, а почему он выполняется медленно. Взглянув на текст запроса, видно, что есть соединение со срезом последних регистра сведений. Текст запроса не привожу, т.к он тут не особо важен. Потенциальное соединение с подзапросом, а в случае с postgres это ой как не хорошо. Ладно, берем и переписываем на программный срез, и тут я увидел то, что совсем не ожидал увидеть. Привожу кусок запроса (см. срин). Запрос примитивный, а вот план запроса нет.
Казалось бы, берем временную таблицу, соединяем ее с таблицей регистра, и ожидаем, что будет nested loops, где в качестве верхней таблицы будет временная таблица (в ней не много записей), а в качестве нижней - таблица регистра. У таблицы регистра есть подходящий индекс.
НО postgres упорно делает seq scan по всей таблице (где, к слову, 25 млн. записей), по условию периода, и потом hash join с временной таблицей.
Дай думаю прогоню тот же запрос, но уже на MS SQL. И ура, на MS я увидел тот план запроса, который ожидал увидеть на postgres. План запроса вполне уместный (скрин).
В итоге удалось заставить postgres выбрать нужный план, только соединив таблицу регистра напрямую с табличной частью документа. Тогда стал использоваться nested loops.
Вывод: угадать какой будет план запроса не так-то просто, поэтому единственный правильный вариант - посмотреть его актуальный план любым «удобным» способом.
Попался один запрос, целиком выполняется долго, секунд 8, не дело конечно. Но суть не в том, что он выполняется медленно, а почему он выполняется медленно. Взглянув на текст запроса, видно, что есть соединение со срезом последних регистра сведений. Текст запроса не привожу, т.к он тут не особо важен. Потенциальное соединение с подзапросом, а в случае с postgres это ой как не хорошо. Ладно, берем и переписываем на программный срез, и тут я увидел то, что совсем не ожидал увидеть. Привожу кусок запроса (см. срин). Запрос примитивный, а вот план запроса нет.
Казалось бы, берем временную таблицу, соединяем ее с таблицей регистра, и ожидаем, что будет nested loops, где в качестве верхней таблицы будет временная таблица (в ней не много записей), а в качестве нижней - таблица регистра. У таблицы регистра есть подходящий индекс.
НО postgres упорно делает seq scan по всей таблице (где, к слову, 25 млн. записей), по условию периода, и потом hash join с временной таблицей.
Дай думаю прогоню тот же запрос, но уже на MS SQL. И ура, на MS я увидел тот план запроса, который ожидал увидеть на postgres. План запроса вполне уместный (скрин).
В итоге удалось заставить postgres выбрать нужный план, только соединив таблицу регистра напрямую с табличной частью документа. Тогда стал использоваться nested loops.
Вывод: угадать какой будет план запроса не так-то просто, поэтому единственный правильный вариант - посмотреть его актуальный план любым «удобным» способом.
Конференция инфостарт в самом разгаре. Хотел поехать в этому году и посмотреть в живую, но спохватился за два месяца, а все билеты к этому моменту уже были раскуплены😭. Остается довольствоваться только записями онлайн.
Сегодня пришло известие, что место таки освободилось на экзамене. В четверг иду сдаваться. Теперь нужно успеть все за 2 дня.
Подготовка к сертификации заняла у меня примерно 10 месяцев. Готовиться я начал в январе 2024, но активная фаза подготовки стартовала в июне 2024, когда я полностью сфокусировался на задаче сдать этот экзамен. В августе 2024 я записался на сдачу экзамена на 24-25 октября 2024 в резерв, так как мест в основную группу уже не оставалось. Я уже отчаялся попасть на экзамен, но неожиданно за два дня раздается звонок, и мне сообщают что освободилось место в основную группу. Естественно, я сразу согласился.
Я старался уделять подготовке минимум 1 час в день, но без пропусков. Если получалось выделить больше времени, то выделял больше.
Плюс я прошел несколько курсов: основы ремесла 1С:Эксперта от Евгения Филиппова, основной курс подготовки от Виктора Богачева и курс применение методик от Евтушенко Антона и Федорова Юрия. Каждый курс я тщательно документировал, а также выполнял все домашние задания. Конспект мне потом очень помог в подготовке. В процессе конспектирования, я поднял тестовый стенд из двух серверов на linux, один БД другой сервис приложений. На них я выполнял домашние задания. Также я поднял сервер на windows, т.к в курсах были задания которые необходимо выполнять на этом стеке.
И вот настал день Х. В первый день сдают практику. На решение экзаменационных задач отводится временный интервал с 10:00 до 17:00 с условным обедом (спойлер, на него можно не ходить). После 17:00 работы уже начинают проверять, и кто не успел, тот не успел.
Во второй день сдают теорию. Теория состоит из 3-х основных вопросов и 20-ти дополнительных. На все вопросы нужно отвечать письменно, а потом начинается собеседование с экзаменатором.
В следующем посте расскажу, без каких знаний у вас не получиться сдать экзамен.
Я старался уделять подготовке минимум 1 час в день, но без пропусков. Если получалось выделить больше времени, то выделял больше.
Плюс я прошел несколько курсов: основы ремесла 1С:Эксперта от Евгения Филиппова, основной курс подготовки от Виктора Богачева и курс применение методик от Евтушенко Антона и Федорова Юрия. Каждый курс я тщательно документировал, а также выполнял все домашние задания. Конспект мне потом очень помог в подготовке. В процессе конспектирования, я поднял тестовый стенд из двух серверов на linux, один БД другой сервис приложений. На них я выполнял домашние задания. Также я поднял сервер на windows, т.к в курсах были задания которые необходимо выполнять на этом стеке.
И вот настал день Х. В первый день сдают практику. На решение экзаменационных задач отводится временный интервал с 10:00 до 17:00 с условным обедом (спойлер, на него можно не ходить). После 17:00 работы уже начинают проверять, и кто не успел, тот не успел.
Во второй день сдают теорию. Теория состоит из 3-х основных вопросов и 20-ти дополнительных. На все вопросы нужно отвечать письменно, а потом начинается собеседование с экзаменатором.
В следующем посте расскажу, без каких знаний у вас не получиться сдать экзамен.
Общий перечень требований к экзамену, есть в описании экзамена на сайте: https://uc1.1c.ru/ekzameny-1s/expert/#zagolovok1
На что же больше всего нужно обращать внимание? Расскажу по пунктам.
1️⃣ Распространенное заблуждение, что раз экзамен принимается на linux + postgres, то знать win + mssql не нужно. Это не так, вопросы есть как по связке linux + postgres, так и по win + mssql. Причем по MSSQL вопросов даже больше. Поэтому нужно знать все. Ребята, которые сдавали в 2016, этих проблем не знали.
2️⃣ В первый день на практике очень внимательно нужно слушать, что говорит экзаменатор перед экзаменом. Например, если есть проблема с ресурсами, обязательно нужно приложить скрины этих счетчиков при описании решения. Без этого задание не засчитают. Просто найти проблему по ТЖ или ЦУП недостаточно.
3️⃣ Кроме того, мало найти проблему, ее нужно еще правильно решить, а это бывает не так-то просто.
Теперь по блокам:
👉🏻 Управляемые блокировки. Нужно знать про них все. Когда нужно ставить/ не ставить. Когда платформа их ставит автоматически. Для чего собственно их придумали. Уметь применять методику расследования ожиданий и взаимоблокировках через технологический журнал и ЦУП.
Думаете, автоматический режим блокировок уже умер? А вот и нет, его как ни странно тоже спрашивают на экзамене.
👉🏻 Блокировки СУБД (MSSQL). Нужно знать, когда могут возникать и как расследовать.
👉🏻 Кластер серверов 1С. Тут нужно знать все как Отче наш. Спросить могут буквально про любую галочку или настройку в кластере. Требования назначения функциональности (ТНФ) тоже нужно знать в обязательном порядке.
👉🏻 Весь раздел руководство администратора нужно детально изучить.
👉🏻 Все методики их технологических вопросов крупных внедрений нужно прочитать хотя бы раз.
👉🏻 Опыт использования тест-центра тоже важен. Если вы в первый раз его увидите на экзамене, велик шанс, что экзамен вы не сдадите.
👉🏻 Linux. Тут такая же история, как и с тест-центром. Если вы до экзамена ни разу не видели linux, то ответ вы уже знаете.
На сколько хорошо нужно ориентироваться в linux? Ответ такой: базовые команды нужно знать: как перейти в папку, как рестартануть службу, как включить отладку на сервере и т. д. Если при подготовке вы самостоятельно развернете тестовый стенд, все это изучите походу этого процесса.
Дайджест полезных ресурсов при подготовке:
💡 «ИТС наше все». Некоторые думают, что в фирме 1С есть какая-то скрытая техническая документация, которой пользуются сами разработчики типовых решений. На самом деле ничего такого нет, все пользуются ИТС: https://its.1c.ru/db/v838doc#browse:13:-1:1
💡 Технологические вопросы крупных внедрений: https://kb.1c.ru
💡Рарус раз в год проводит конференцию 1C-RarusTechDay (можно найти на ютубе). У ребят очень много докладов по производительности от действующих экспертов и не только. Также у них есть технический блог, в нем много полезных статей: https://rarus.ru/publications/rubrics/ot-ekspertov-1c-rarus/?PAGEN_1=6
💡Статьи на инфостарте в разделе highload
💡Видео на ютубе от Дорошевича Антона
💡Настольная книга 1С:Эксперта
💡 Книга «Методическое пособие по эксплуатации крупных информационных систем, издание 2»
💡Интервью Евтушенко Антона (он сейчас принимает один из принимающих практику и основой экзаменатор, который принимает теорию)
Это был финальный пост про сертификацию. Буду рад вашим вопросам и комментариям под этим постом;)
На что же больше всего нужно обращать внимание? Расскажу по пунктам.
1️⃣ Распространенное заблуждение, что раз экзамен принимается на linux + postgres, то знать win + mssql не нужно. Это не так, вопросы есть как по связке linux + postgres, так и по win + mssql. Причем по MSSQL вопросов даже больше. Поэтому нужно знать все. Ребята, которые сдавали в 2016, этих проблем не знали.
2️⃣ В первый день на практике очень внимательно нужно слушать, что говорит экзаменатор перед экзаменом. Например, если есть проблема с ресурсами, обязательно нужно приложить скрины этих счетчиков при описании решения. Без этого задание не засчитают. Просто найти проблему по ТЖ или ЦУП недостаточно.
3️⃣ Кроме того, мало найти проблему, ее нужно еще правильно решить, а это бывает не так-то просто.
Теперь по блокам:
👉🏻 Управляемые блокировки. Нужно знать про них все. Когда нужно ставить/ не ставить. Когда платформа их ставит автоматически. Для чего собственно их придумали. Уметь применять методику расследования ожиданий и взаимоблокировках через технологический журнал и ЦУП.
Думаете, автоматический режим блокировок уже умер? А вот и нет, его как ни странно тоже спрашивают на экзамене.
👉🏻 Блокировки СУБД (MSSQL). Нужно знать, когда могут возникать и как расследовать.
👉🏻 Кластер серверов 1С. Тут нужно знать все как Отче наш. Спросить могут буквально про любую галочку или настройку в кластере. Требования назначения функциональности (ТНФ) тоже нужно знать в обязательном порядке.
👉🏻 Весь раздел руководство администратора нужно детально изучить.
👉🏻 Все методики их технологических вопросов крупных внедрений нужно прочитать хотя бы раз.
👉🏻 Опыт использования тест-центра тоже важен. Если вы в первый раз его увидите на экзамене, велик шанс, что экзамен вы не сдадите.
👉🏻 Linux. Тут такая же история, как и с тест-центром. Если вы до экзамена ни разу не видели linux, то ответ вы уже знаете.
На сколько хорошо нужно ориентироваться в linux? Ответ такой: базовые команды нужно знать: как перейти в папку, как рестартануть службу, как включить отладку на сервере и т. д. Если при подготовке вы самостоятельно развернете тестовый стенд, все это изучите походу этого процесса.
Дайджест полезных ресурсов при подготовке:
💡 «ИТС наше все». Некоторые думают, что в фирме 1С есть какая-то скрытая техническая документация, которой пользуются сами разработчики типовых решений. На самом деле ничего такого нет, все пользуются ИТС: https://its.1c.ru/db/v838doc#browse:13:-1:1
💡 Технологические вопросы крупных внедрений: https://kb.1c.ru
💡Рарус раз в год проводит конференцию 1C-RarusTechDay (можно найти на ютубе). У ребят очень много докладов по производительности от действующих экспертов и не только. Также у них есть технический блог, в нем много полезных статей: https://rarus.ru/publications/rubrics/ot-ekspertov-1c-rarus/?PAGEN_1=6
💡Статьи на инфостарте в разделе highload
💡Видео на ютубе от Дорошевича Антона
💡Настольная книга 1С:Эксперта
💡 Книга «Методическое пособие по эксплуатации крупных информационных систем, издание 2»
💡Интервью Евтушенко Антона (он сейчас принимает один из принимающих практику и основой экзаменатор, который принимает теорию)
Это был финальный пост про сертификацию. Буду рад вашим вопросам и комментариям под этим постом;)
Онлайн и видео курсы 1С обучение от лучших специалистов фирмы 1С
Экзамен 1С:Эксперт по технологическим вопросам
Рассказываем о том, что такое экзамен 1С:Эксперт по технологическим вопросам, как к нему готовиться, где сдавать. Примеры билетов.
Все, кто хотя бы раз сталкивался с ИТ, наверно слышали, что существует некая система от фирмы Microsoft под названием Active Directory. Это система позволяет централизовано хранить пользователей и осуществлять настройку прав доступа и пр.
Никита, о чем ты, спросите вы. При чем тут Active Directory и 1С. Я поясню. Представьте, у вас есть система, где учитывается зарплата, например 1С:ЗУП, и есть необходимость загружать в эту систему информацию из Active Directory (к примеру почту или рабочий телефон сотрудника). Все работает без проблем, если ваш сервер 1С под управлением windows. В этом случае вам доступны com-объекты (а это чистейше воды разработка Microsoft), через которые можно спокойно подключиться и выгрузить нужные данные. Но что, если ваш сервер работает на Linux? В Linux, как известно, нет никаких com-объектов. В новой статье я рассмотрел способ, каким образом можно загружать данные из Active Directory в Linux.
Никита, о чем ты, спросите вы. При чем тут Active Directory и 1С. Я поясню. Представьте, у вас есть система, где учитывается зарплата, например 1С:ЗУП, и есть необходимость загружать в эту систему информацию из Active Directory (к примеру почту или рабочий телефон сотрудника). Все работает без проблем, если ваш сервер 1С под управлением windows. В этом случае вам доступны com-объекты (а это чистейше воды разработка Microsoft), через которые можно спокойно подключиться и выгрузить нужные данные. Но что, если ваш сервер работает на Linux? В Linux, как известно, нет никаких com-объектов. В новой статье я рассмотрел способ, каким образом можно загружать данные из Active Directory в Linux.
infostart.ru
Интеграция 1С с Active Directory на LINUX через ldapsearch
Интеграция с Active Directory на Windows не вызывает особых вопросов, по этому вопросу есть множество ресурсов. А что делать, если нужно выгружать информацию в базу, которая работает на сервере приложений под управлением linux? Тут уже не так много информации…
По образованию я инженер-металлург. Закончил Московский институт стали и сплавов. Учась в институте, я не особо задумывался над тем, что же собственно делать после его окончания. Рядом с Москвой не так много металлургических заводов, поэтому варианта работать строго по специальности не было.
Несмотря на специализацию, связанную с автоматизацией, никаких языков программирования кроме бейскика (и то на первом курсе) нам не преподавали. Окончательное осознание того, что работать в этой отрасли я не хочу, пришло после практики на металлургическом заводе в Нижнем Тагиле на третьем курсе. К тому моменту один из моих одногруппников уже год как трудился в сфере 1С, при этом он успевал и работать, и учиться.
Пораспрашивав его о специфике профессии и узнав больше про 1С, я купил книгу Радченко, и стал готовиться к сертификации профессионала по платформе. Это обычный тест, с вариантами ответов по платформе. Вопросов там около 900. Было это дело летом после четвертого курса.
Успешно сдав на сертификат, я быстренько состряпал резюме, где главным козырем был этот сертификат.
Буквально через пару дней я сидел в офисе крупного интегратора. Взяли меня на работу без проблем и сразу отправили на месячное обучение за счет компании. На учении было много прикладной информации типа бухгалтерии, зарплаты и управленческого учета. После прохождения обучения я вышел на полный рабочий день в офис и стал работать внедренцем.
Занимался я в основном развозом дисков ИТС и обновлением типовых бухгалтерий.
В сентябре 2012 начался пятый курс в университете, и я каким-то образом смог договориться, что буду работать два раза в неделю, а остальное время буду учиться в институте. Мне даже сохранили полноценную зарплату (сейчас помню 20 т.р gross).
Так прошел учебный год, мне понемногу стали давать простенькие и не горящие задачи на разработку, которые можно сделать за 1/2 дня.
После окончания института и зашиты диплома я вышел к этому работодателю на полный рабочий день: попал в команду, которая занималась внедрением 1С в медицинские учреждения. Меня отправили сидеть на сопровождении у клиента в государственную больницу ГКБ 31. Пару месяцев я делал простенькие задачи и консультировал пользователей. Вскоре подвернулся новый проект внедрения складской системы 1С:Аптека в детскую поликлинике МЕДСИ. Это было мое первое боевое крещение, где я внедрял эту систему в одиночку.
То были адовые два месяца, за которые я испытал столько стресса, сколько не испытывал даже на защите диплома. Впервые столкнулся с реализацией обменов (нужно было из складской системы выгружать перемещения в бухгалтерию). Приходилось общаться и обучать всех от младшего мед персонала до главного врача. В общем я знатно задолбался, но проект закрыл успешно + даже получил премию.
Продолжение следует…
#Воспоминания1Сника
Несмотря на специализацию, связанную с автоматизацией, никаких языков программирования кроме бейскика (и то на первом курсе) нам не преподавали. Окончательное осознание того, что работать в этой отрасли я не хочу, пришло после практики на металлургическом заводе в Нижнем Тагиле на третьем курсе. К тому моменту один из моих одногруппников уже год как трудился в сфере 1С, при этом он успевал и работать, и учиться.
Пораспрашивав его о специфике профессии и узнав больше про 1С, я купил книгу Радченко, и стал готовиться к сертификации профессионала по платформе. Это обычный тест, с вариантами ответов по платформе. Вопросов там около 900. Было это дело летом после четвертого курса.
Успешно сдав на сертификат, я быстренько состряпал резюме, где главным козырем был этот сертификат.
Буквально через пару дней я сидел в офисе крупного интегратора. Взяли меня на работу без проблем и сразу отправили на месячное обучение за счет компании. На учении было много прикладной информации типа бухгалтерии, зарплаты и управленческого учета. После прохождения обучения я вышел на полный рабочий день в офис и стал работать внедренцем.
Занимался я в основном развозом дисков ИТС и обновлением типовых бухгалтерий.
В сентябре 2012 начался пятый курс в университете, и я каким-то образом смог договориться, что буду работать два раза в неделю, а остальное время буду учиться в институте. Мне даже сохранили полноценную зарплату (сейчас помню 20 т.р gross).
Так прошел учебный год, мне понемногу стали давать простенькие и не горящие задачи на разработку, которые можно сделать за 1/2 дня.
После окончания института и зашиты диплома я вышел к этому работодателю на полный рабочий день: попал в команду, которая занималась внедрением 1С в медицинские учреждения. Меня отправили сидеть на сопровождении у клиента в государственную больницу ГКБ 31. Пару месяцев я делал простенькие задачи и консультировал пользователей. Вскоре подвернулся новый проект внедрения складской системы 1С:Аптека в детскую поликлинике МЕДСИ. Это было мое первое боевое крещение, где я внедрял эту систему в одиночку.
То были адовые два месяца, за которые я испытал столько стресса, сколько не испытывал даже на защите диплома. Впервые столкнулся с реализацией обменов (нужно было из складской системы выгружать перемещения в бухгалтерию). Приходилось общаться и обучать всех от младшего мед персонала до главного врача. В общем я знатно задолбался, но проект закрыл успешно + даже получил премию.
Продолжение следует…
#Воспоминания1Сника
Иногда в процессе разработки сталкиваешься с задачей удаления строк из таблицы значений по некоторому условию.
Стало интересно, а какие вообще способы есть, и как они ведут себя с точки зрения оптимизации.
Хотел провести свое минирасследование, а оказывается doom2good на инфостарте уже такое провел. Как говориться, доверяй, но проверяй. Поэтому я провел аналогичные тесты и получил результаты близкие к тем, которые приведены в статье.
✅ Удаление строк через запрос.
Помещаем таблицу значений во временную таблицу в запросе, далее выполняем запрос и выгружаем результат в новую таблицу значений.
✅ Удаление строк по условию
Обходим нашу таблицу и по условию удаляем строки. Реализация может быть и другого вида, сначала обходим таблицу, складываем удаляемые строки в массив, потом обходим этот массив и удаляем строки.
✅ Копирование таблицы
Создаем массив, обходим таблицу значений, по некоторому положительному условию добавляем строки в наш массив и далее вызываем метод таблицы значений «Скопировать», куда передаем массив с нужными строками.
✅ Копирование строк
Создаем новую пустую таблицу значений с аналогичным составом колонок. Далее обходим исходную таблицу и по некоторому положительному условию добавляем строки в новую пустую таблицу методом.
✅ Предобработка и выгрузка с отбором
В исходную таблицу добавляем колонку «ОставлятьСтроку», с типом булево. Обходим таблицу значений, проверяем условие, и если строку нам нужно оставить, устанавливаем признак «Истина». Далее вызываем метод «Скопировать» у таблицы значений с отбором «ОставлятьСтроку» = Истина. Далее удаляем добавленную колонку.
✅ Выгрузка с отбором
Если в исходной таблице значений уже есть колонка, по которой однозначно можно сделать отбор, вызываем метод «Скопировать» у таблицы значений с этим отбором.
Итак, результаты расположил в порядке убывания от самого быстрого к самому медленному.
1️⃣ Выгрузка с отбором. Самый быстрый способ. Работает быстро, когда нужно удалить как малое количество строк, так и большое количество строк.К сожалению, не всегда получиться его применить.
2️⃣ Предобработка и выгрузка с отбором. Если нужно удалить большое количество строк, то этот способ на втором месте. А вот если нужно удалить малое количество строк, например <2%, то способ «Удаление строк по условию» будет немного быстрее, но разница менее 10% в выигрыше времени.
3️⃣Копирование таблицы. Этот способ немного уступает «Предобработка и выгрузка с отбором» по времени, но разница не более 10%.
4️⃣ Копирование строк. Этот способ на больших объемах немного уступает копированию таблицы.
5️⃣ Удаление строк по условию. Еще раз повторюсь, этот способ хорош, когда удаляемых строк мало, но если их много, то данный способ может отрабатывать даже дольше, чем удаление строк через запрос.
6️⃣ Удаление строк через запрос. Способ хорош, когда необходимо удалить строки с некоторым сложным условием, например, если в условии отбора участвуют данные из других таблиц и нужно выполнить соединение с этими таблицами. При этом самый медленный.
На моем оборудовании не получилось прогнать тест с количеством записей ~ 1.000.000 записей в таблице значений. Основным узким местом стал именно процессор, хотя изначально я предполагал, что это будет оперативная память. Один сеанс и один rphost, который загрузил бедное ядро на 💯%, при том что другие ядрышки простаивают...
Окончания теста с 1.000.000 записями я так и не дождался, ограничился результатами максимум на 100.000.
Также я провел замеры на 10.000 записей по использованию памяти (MemoryPeak) и процессорного времени (CpuTime), и получилось следующее:
👉🏻 Удаление строк по условию: кушает меньше всего памяти за серверный вызов, а также минимально использование процессорного времени, но разница со вторым местом в пределах 10%.
👉🏻 Удаление строк через запрос: кушает больше всех памяти, примерно в 2 раза по MemoryPeak. Процессор при этом как в других способах. Тут мы также нагружаем сервер СУБД своей временной таблицей.
Остальные способы +/- одинаково используют память и процессорное время.
Стало интересно, а какие вообще способы есть, и как они ведут себя с точки зрения оптимизации.
Хотел провести свое минирасследование, а оказывается doom2good на инфостарте уже такое провел. Как говориться, доверяй, но проверяй. Поэтому я провел аналогичные тесты и получил результаты близкие к тем, которые приведены в статье.
Помещаем таблицу значений во временную таблицу в запросе, далее выполняем запрос и выгружаем результат в новую таблицу значений.
Обходим нашу таблицу и по условию удаляем строки. Реализация может быть и другого вида, сначала обходим таблицу, складываем удаляемые строки в массив, потом обходим этот массив и удаляем строки.
Создаем массив, обходим таблицу значений, по некоторому положительному условию добавляем строки в наш массив и далее вызываем метод таблицы значений «Скопировать», куда передаем массив с нужными строками.
Создаем новую пустую таблицу значений с аналогичным составом колонок. Далее обходим исходную таблицу и по некоторому положительному условию добавляем строки в новую пустую таблицу методом.
В исходную таблицу добавляем колонку «ОставлятьСтроку», с типом булево. Обходим таблицу значений, проверяем условие, и если строку нам нужно оставить, устанавливаем признак «Истина». Далее вызываем метод «Скопировать» у таблицы значений с отбором «ОставлятьСтроку» = Истина. Далее удаляем добавленную колонку.
Если в исходной таблице значений уже есть колонка, по которой однозначно можно сделать отбор, вызываем метод «Скопировать» у таблицы значений с этим отбором.
Итак, результаты расположил в порядке убывания от самого быстрого к самому медленному.
1️⃣ Выгрузка с отбором. Самый быстрый способ. Работает быстро, когда нужно удалить как малое количество строк, так и большое количество строк.
2️⃣ Предобработка и выгрузка с отбором. Если нужно удалить большое количество строк, то этот способ на втором месте. А вот если нужно удалить малое количество строк, например <2%, то способ «Удаление строк по условию» будет немного быстрее, но разница менее 10% в выигрыше времени.
3️⃣Копирование таблицы. Этот способ немного уступает «Предобработка и выгрузка с отбором» по времени, но разница не более 10%.
4️⃣ Копирование строк. Этот способ на больших объемах немного уступает копированию таблицы.
5️⃣ Удаление строк по условию. Еще раз повторюсь, этот способ хорош, когда удаляемых строк мало, но если их много, то данный способ может отрабатывать даже дольше, чем удаление строк через запрос.
6️⃣ Удаление строк через запрос. Способ хорош, когда необходимо удалить строки с некоторым сложным условием, например, если в условии отбора участвуют данные из других таблиц и нужно выполнить соединение с этими таблицами. При этом самый медленный.
На моем оборудовании не получилось прогнать тест с количеством записей ~ 1.000.000 записей в таблице значений. Основным узким местом стал именно процессор, хотя изначально я предполагал, что это будет оперативная память. Один сеанс и один rphost, который загрузил бедное ядро на 💯%, при том что другие ядрышки простаивают...
Окончания теста с 1.000.000 записями я так и не дождался, ограничился результатами максимум на 100.000.
Также я провел замеры на 10.000 записей по использованию памяти (MemoryPeak) и процессорного времени (CpuTime), и получилось следующее:
👉🏻 Удаление строк по условию: кушает меньше всего памяти за серверный вызов, а также минимально использование процессорного времени, но разница со вторым местом в пределах 10%.
👉🏻 Удаление строк через запрос: кушает больше всех памяти, примерно в 2 раза по MemoryPeak. Процессор при этом как в других способах. Тут мы также нагружаем сервер СУБД своей временной таблицей.
Остальные способы +/- одинаково используют память и процессорное время.
Please open Telegram to view this post
VIEW IN TELEGRAM
Обо мне. Часть 2.
Дальше были небольшие аналогичные задачи также в медицинском секторе, но в нашем офисе эта ниша так и не стала популярной, и в итоге меня перевели в другое подразделение.
Новое подразделение занималось внедрением бухгалтерских систем. Аккурат в это время подвернулся новый проект по внедрению в одной крупной региональной девелоперской компании. Ребята строили ЖК в разных городах, и в каждом филиале бухгалтерский учет велся обособленно. Идея внедрения заключалась в консолидации учета в единой бухгалтерской базе. Для этого была выбрана система БИТ.Строительство на базе типовой бухгалтерии 2.0. Да, да застал я еще разработку на обычных формах.
Меня отправили в подчинение руководителя проектов, и мы вдвоем отправились внедрять эту систему, сначала к аудиторам, которые разрабатывали методологию, а затем и к конечному заказчику. Формат разработки был не стандартный.
К слову, мы успешно закрыли этот проект, и следующим этапом была автоматизация управленческого учета и бюджетирования на базе более расширенной системы БИТ.Строительство + БИТ.Финанс.
Тут конечно тоже не обошлось без сложностей, но проект мы закрыли, этот кейс даже есть на сайте.
После проекта мой руководитель ушел инхаус в другую организацию, и через пару месяцев я к нему присоединился. Так началось мое знакомство с ее величеством конфигурацией 1С:Зарплата и управление персоналом. Возглавил отдел по сопровождению бухгалтерских и зарплатных систем и очень плотно погрузился в изучение зарплатного учета.
Так пролетело пять лет, пока компания не лишилась всех своих активов, не обанкротилась, и пришлось искать другую работу. Так судьба занесла меня туда, где я сейчас.
Каждое место работы приносило новые знания. Не было такого, что я перешел с одного места на другое и занимался теми же самими задачами, с теми же конфигурациями.
Конечно из всех мест, где я работал, наиболее насыщенным и многогранным оказался опыт работы в фирме франчайзи. Возможно это связано с тем, что начинал свой путь я именно там, но так или иначе буст по набору опыта оказался максимальным.
Дальше были небольшие аналогичные задачи также в медицинском секторе, но в нашем офисе эта ниша так и не стала популярной, и в итоге меня перевели в другое подразделение.
Новое подразделение занималось внедрением бухгалтерских систем. Аккурат в это время подвернулся новый проект по внедрению в одной крупной региональной девелоперской компании. Ребята строили ЖК в разных городах, и в каждом филиале бухгалтерский учет велся обособленно. Идея внедрения заключалась в консолидации учета в единой бухгалтерской базе. Для этого была выбрана система БИТ.Строительство на базе типовой бухгалтерии 2.0. Да, да застал я еще разработку на обычных формах.
Меня отправили в подчинение руководителя проектов, и мы вдвоем отправились внедрять эту систему, сначала к аудиторам, которые разрабатывали методологию, а затем и к конечному заказчику. Формат разработки был не стандартный.
К слову, мы успешно закрыли этот проект, и следующим этапом была автоматизация управленческого учета и бюджетирования на базе более расширенной системы БИТ.Строительство + БИТ.Финанс.
Тут конечно тоже не обошлось без сложностей, но проект мы закрыли, этот кейс даже есть на сайте.
После проекта мой руководитель ушел инхаус в другую организацию, и через пару месяцев я к нему присоединился. Так началось мое знакомство с ее величеством конфигурацией 1С:Зарплата и управление персоналом. Возглавил отдел по сопровождению бухгалтерских и зарплатных систем и очень плотно погрузился в изучение зарплатного учета.
Так пролетело пять лет, пока компания не лишилась всех своих активов, не обанкротилась, и пришлось искать другую работу. Так судьба занесла меня туда, где я сейчас.
Каждое место работы приносило новые знания. Не было такого, что я перешел с одного места на другое и занимался теми же самими задачами, с теми же конфигурациями.
Конечно из всех мест, где я работал, наиболее насыщенным и многогранным оказался опыт работы в фирме франчайзи. Возможно это связано с тем, что начинал свой путь я именно там, но так или иначе буст по набору опыта оказался максимальным.
HTML Embed Code: