7.7 Механизм гибких блокировок

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Schtass, 25 июл 2008.

  1. TopicStarter Overlay
    Schtass
    Offline

    Schtass

    Регистрация:
    25 апр 2007
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    День добрый.

    Решил вкрутить в текущую конфу механизм «гибких» блокировок. Делаю все впервые, поэтому почитав «Методику реализации альтернативного механизма блокировок» от Шемякина Павла, убрал все блокировки с регистров, справочников, таблиц документов, _1SJOURN, _1SSYSTEM и _1SConst во всех процедура вида _1sp_XXX_TLock и _1sp_XXX_TLockX:

    alter procedure _1sp_XXX_TLock as return
    alter procedure _1sp_XXX_TLock as return

    Создал свои процедуры монопольной блокировки таблиц регистров.

    Переписал процедуру получения нового IDDOC (стырено из «методички»)

    alter procedure _1sp__1SUIDCTL_GetMaxID(@tid INTEGER, @id CHAR(9) OUTPUT) AS
    select @id=MAXID from _1SUIDCTL(UPDLOCK) where TYPEID=@tid
    if @id is null select @id=' '

    добавил триггер к таблице _1SSytsem (стырено из «методички»)

    CREATE TRIGGER [dbo].[GB_SetTA] ON [dbo].[_1SSYSTEM]
    WITH EXECUTE AS CALLER
    FOR UPDATE
    AS
    set nocount on
    if update(eventidta)
    begin
    declare @UserAccess as char(16)

    select @UserAccess =
    cast((SELECT DATABASEPROPERTYEX(db_name(), 'UserAccess')) as char(16))

    if (@UserAccess='MULTI_USER') Or @UserAccess='RESTRICTED_USER'
    begin
    IF EXISTS(select * from inserted i, deleted d where
    d.curdate > i.curdate
    or (d.curdate = i.curdate and d.curtime > i.curtime)
    or (d.curdate = i.curdate and d.curtime = i.curtime and d.eventidta > i.eventidta)
    )
    BEGIN
    update _1ssystem with (updlock)
    set curdate = d.curdate, curtime = d.curtime, eventidta = d.eventidta
    from deleted d
    END
    end
    end

    Подменил процедуры вида procedure _1sp_RG[XXXX]_Select()
    Create procedure _1sp_RG[XXXX]_Select() AS
    Select * from RG[XXXX] where (различные условия отбора)

    на

    Create procedure _1sp_RG[XXXX]_Select() AS
    Select * from RG[XXXX] (NOLOCK) where (различные условия отбора

    После этого убрал у всех документов автоматическое удаление движений и в модулях документах в процедуре ОбработкаПроведения() прописал процедуру ОчиститьДвижения(). Перед этой процедурой делаю монопольную блокировку таблицы регистра RAXXX, если идет списание по регистру, по которому важен остаток (н-р, регистр «Склад»). Если дата документа меньше начала текущего месяца, то в обязательном порядке блокируются таблицы регистра RAXXX и RGXXX.

    При отмене проведения документа блокируются RAXXX и RGXXX, если дата документа меньше начала текущего месяца. В том случае, если документ текущего месяца, блокировки на регистры не накладываются.

    Вроде все описал. Теперь хотелось бы выслушать мнение спецов в этой области. Все ли правильно? Или может к описанному можно что-нибудь добавить. Буду рад выслушать мнения.
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Могу сказать одно, к конфигурированию это никакого отношения не имеет ;)
  3. varadat
    Offline

    varadat

    Регистрация:
    25 апр 2007
    Сообщения:
    33
    Симпатии:
    0
    Баллы:
    1
  4. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Schtass, расскажи, так получилось чего или нет? Очень интересно, может действительно еще и в этой области можно покапаться. Откуда у тебя исходные данные?
  5. TopicStarter Overlay
    Schtass
    Offline

    Schtass

    Регистрация:
    25 апр 2007
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    1
    В принципе можно сказать, что получилось. По крайней мере промежутки между временем заведением документов сократилось, да и юзверя перестают жаловаться на тормоза, когда восстанавливается последовательность (правда, если она восстанавливается в текущем месяце). Пробывал перепроводить документы за текущий месяц по 4 документа с перерывом в 2 сек с 50 активно работающими пользователями - все пучком, пользователи даже не чухнули... :unsure:

    В будущем планирую (если будет возможным) настроить построчное блокирование регистров (сейчас, в опредленных случаях блокируется вся таблица регистров). Но пока не хватает знаний в этой области и в принципе то, что сделал, уже досточно для комфортной работы, поэтому данное нововедение откладывается на неопредленный срок.

    И еще. В теории должны были ускориться стандартные запросы 1С. Но не проверял, так как основная куча отчетов и обработок написаны с использованием запросов 1С++.
  6. zykov66
    Offline

    zykov66

    Регистрация:
    24 фев 2011
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Подскажите, где найти Методику Павла Шимякина

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