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

Тема в разделе "1C и всё что с ней связано", создана пользователем Stim, 13 авг 2007.

Статус темы:
Закрыта.
  1. Stim

    Stim Гость

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Вместе с упаковкой неплохо было и реиндексацию сделать...
     
  3. Stim

    Stim Гость

    ок. щас как только отвиснет попробую..
     
  4. LSH

    LSH Гость

    Для: Stim

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

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

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

    Stim Гость

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для: LSH
    Если количество элементов кратно 1000, получаем ошибку в коде.
    А вообще, ускорение работы при заключении в транзакцию у 7.7 это, собственно, баг, переросший в фичу. Транзакцию нужно и должно использовать (если кто не знает, обработка проведения вся заключена в транзакцию) в том случае, когда требуется либо принятие либо не принятие всех изменений. Но вот, как оказалось, в 7.7 это еще и прирост скорости дает при определенных условиях.
     
  7. LSH

    LSH Гость

    <!--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]

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

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Для обеспечения монопольного доступа к данным используются блокировки. Суть транзакции несколько в ином.
     
  9. LSH

    LSH Гость

    Для: vitfil

    Да, но в 1С это по-моему одно и то же (в смысле транзакцию нельзя реализовать без блокировки).
     
  10. Stim

    Stim Гость

    я тут кучу статей перечитал. неужели единственный выход это sql?
     
  11. Stim

    Stim Гость

    может мне кто-нибудь объяснить, почему сначала все работало хорошо, а потом крякнулось? Вот сегодня взял чистую базу, объединил конфигурации (1ая -чистая, 2ая-со справочниками). Загрузил 65000 позиций ( грузилось медленей, чем самый первый раз),и теперь любое изменения св-в реквизита происходит очееень долго. Уже где-то час. а я всего-то сортировку по реквизиту добавил
     
  12. LSH

    LSH Гость

    Для: Stim

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

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

Поделиться этой страницей