Медленно работает 1С? Проблема замедления массового проведения документов в 1С MSSQL |
Периодически в форумах и в обращениях ИТ специалистов звучат высказывания, что при длительной работе в одной сессии 1С v7.7 происходит общее замедление производительности, т.е. начинают медленно проводиться документы в 1С 7.7. Попытаемся описать эту проблему подробней. Эта проблема актуальна:
Каков источник этой проблемы медленного проведения в 1С 7.7 и для кого она особенно актуальна? Краткая концепцию этой ошибки: Для того, что бы в этом убедиться, необходимо вставить следующий скрипт в QA и запустить его на исполнение: use pubs
Разберем этот скрипт подробнее:
Запустив этот скрипт, мы увидим, что время на выполнение одинаковых операций по мере исполнения увеличивается: 4013 Например, в этом результате исполнения данного скрипта мы видим, что если на первом шаге время выполнения было 4 секунды, то на 10-м 67 сек. Но в данном случае производится операция insert в sp_executesql. А их в модулях 1С не так уж и много относительно количества общих операций. Заменим в скрипте Запустив его опять на исполнение мы увидим, что тенденция соблюдается: 673
Это дает нам основание утверждать, что выполнение всех операций sp_executesql будет значительно замедляться по мере создания временных таблиц. Этих операций в 1С очень много. В этом можно легко убедится, просмотрев трэйс 1С в профайлере. Кроме того, операция drop не срабатывает также для временных таблиц, как и для обычных. Я пришел к такому выводу исходя из того что, создав большое количество временных таблиц (без их последующего удаления) получил такие же результаты экспериментов. Видимо при использовании drop для временных таблиц происходит очистка записей в таблице sysobjects в базе tempdb без очистки буфера. Косвенно это подтверждает тем, что при закрытии сессии, чем больше временных таблиц было создано, тем больше время обработки закрытия. Решение этой проблемы описано в статье по вышеуказанной ссылке. Все они сводятся к рекомендациям не использовать подобные конструкции или чаще делать reconnect. Рассмотрим теперь, где в 1С используются подобные конструкции: ТЗИт=СоздатьОбъект("ТаблицаЗначений");Это пример кода из модуля проведения документов в 1С. В данном случае рассчитываются остатки по товарным позициям документа в модуле проведения. В профайлере установка фильтра по списку значения будет выглядеть следующим образом: if exists (select * from TEMPDB..SYSOBJECTS where ID = OBJECT_ID('TEMPDB..#TMP0PROC') and SYSSTAT & 0xf = 4 )Во временной таблице TMP0 содержатся значения списка товара. Процедура sp_executesql используется в большинстве вызовов 1С. Вот пример из трэйса по исполнению того же модуля: exec sp_executesql N'Select * from DH475(NOLOCK) where IDDOC=@P1', N'@P1 varchar(9)', ' 2 '
Кроме УстановитьЗначениеФильтра временные таблицы используются, например, в получении иерархической структуры справочников. А в целом данные конструкции используются везде, где необходим фильтр по списку значений. Как правило, конструкция УстановитьЗначениеФильтра используется один раз в модуле и поэтому данная проблема особо актуальна в информационных базах с большим количеством документов. Как решить эту проблему? Тем не менее, решение есть. Для этого достаточно самому из 1С периодически очищать буфер сессии. Процедура ОбработкаПроведения()
В данном примере он будет вызываться из модуля проведения через каждые 100 проведенных документов. Проведенные тесты и эксплуатация программного комплекса показали, что использование данной методики полностью снимает вышеописанную проблему медленного проведения в 1С 7.7 и позволяет использовать связку 1С-MSSQL более эффективно.
Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").
|
Статья: Медленно работает 1С? Проблема замедления массового проведения документов в 1С MSSQL |
Перейти на главную страницу компании "Софтпоинт" |