Очень долго удаляются/добовляются элементы в справочник

  • Автор темы Stim
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Stim

#1
написал обработку для удаления элементов справончика. использовал транзакцию. поначалу все работало быстро. 75000 позиций удалялись и добавлялись за минуты. Теперь только на удаление уходит 20 минут . Думал тормозит все касперский - отключил, никакого эффекта.
Сделал упаковку таблиц, размер базы 1С уменьшился на 80 мб. И чуть-чуть побыстрее работать стало.
Сейчас поставил сортировку по реквизиту и вот уже 20 минут жду. Размер папки с 1С занимает сейчас 120 мб. А в ней вбито то всего 3 справочника (1 -400 элементов, 2 -7000, 3 -75000). Может кто сталкивался с подобной проблемой?
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#2
Вместе с упаковкой неплохо было и реиндексацию сделать...
 
L
#4
Для: Stim

При работе с транзакцией лучше пользоваться следующим алгоритмом:

Код:
НачатьТранзакцию();
Счетчик = 0;
Цикл_по_выборке
...
Счетчик = Счетчик + 1;
Если Счетчик = 1000 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
Счетчик = 0;
КонецЕсли;

КонецЦикла_по_выборке;
ЗафиксироватьТранзакцию();
В разы быстрее работает, если в транзакции обрабатывается небольшой объем данных.
 
S

Stim

#5
да я сделал уже транзацию через каждые тысячу. все равно очень долго. мне кажется , что это как-то связано с большим размером cdx и dbf файлов
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#6
Для: LSH
Если количество элементов кратно 1000, получаем ошибку в коде.
А вообще, ускорение работы при заключении в транзакцию у 7.7 это, собственно, баг, переросший в фичу. Транзакцию нужно и должно использовать (если кто не знает, обработка проведения вся заключена в транзакцию) в том случае, когда требуется либо принятие либо не принятие всех изменений. Но вот, как оказалось, в 7.7 это еще и прирост скорости дает при определенных условиях.
 
L
#7
<!--QuoteBegin-vitfil+14:08:2007, 08:07 -->
<span class="vbquote">(vitfil @ 14:08:2007, 08:07 )</span><!--QuoteEBegin-->Если количество элементов кратно 1000, получаем ошибку в коде.
[snapback]75253" rel="nofollow" target="_blank[/snapback]​
[/quote]

С чего такое утверждение? Транзакций открывается и закрывается одинаковое количество не зависимо от порога счетчика. А при количестве элементов кратном 1000, последняя транзакция будет пустой но она сработает без ошибок. Только что протестировал.

<!--QuoteBegin-vitfil+14:08:2007, 08:07 -->
<span class="vbquote">(vitfil @ 14:08:2007, 08:07 )</span><!--QuoteEBegin-->Транзакцию нужно и должно использовать (если кто не знает, обработка проведения вся заключена в транзакцию) в том случае, когда требуется либо принятие либо не принятие всех изменений.
[snapback]75253" rel="nofollow" target="_blank[/snapback]​
[/quote]

Хм, наверное не столько для этого, сколько для обеспечения МОНОПОЛЬНОГО доступа к данным при разделенном режиме работы. Как вы и сказали она используется при проведении документа, но лишь для того, чтобы не дать в момент проведения другим пользователям исказить данные.
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#8
Для обеспечения монопольного доступа к данным используются блокировки. Суть транзакции несколько в ином.
 
L
#9
Для: vitfil

Да, но в 1С это по-моему одно и то же (в смысле транзакцию нельзя реализовать без блокировки).
 
S
#10
я тут кучу статей перечитал. неужели единственный выход это sql?
 
S
#11
может мне кто-нибудь объяснить, почему сначала все работало хорошо, а потом крякнулось? Вот сегодня взял чистую базу, объединил конфигурации (1ая -чистая, 2ая-со справочниками). Загрузил 65000 позиций ( грузилось медленей, чем самый первый раз),и теперь любое изменения св-в реквизита происходит очееень долго. Уже где-то час. а я всего-то сортировку по реквизиту добавил
 
L
#12
Для: Stim

Попробуй глянуть следующие вещи:

1. Раздел, на котором лежит база очень сильно фрагментирован, запустить дефрагментацию
2. Попробуй отключить Виндовскую индексацию папки с базой (свойства папки - Другие, снять галочку разрешить индексирование, применить для всех файлов и папок внутри).
3. Делать все операции монопольно (так получается процентов на 20 быстрее)
4. Грохни индексы в базе (все файлы *.cdx). Ибо стандартная реиндексация в большинстве случаев не помогает.
 
Статус
Закрыто для дальнейших ответов.