Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Как обойти блокировку таблицы _1SBKTTLC? (число прочтений - 11681 )
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #15 - 23. Сентября 2009 :: 10:14
Печать  
Народ, а что это все даст? Это что оптимизация блокировок? Почему тогда _1sbkttl, _1sjourn все равно залочен на все время проведения документа.
Если оптимизация производительности, тоже сомнительно, вместо update - insert в другую таблицу и view, и че от этого будет быстрее?
может я туплю, конечно, но чет нихрена непонимаюУлыбка
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #16 - 23. Сентября 2009 :: 10:31
Печать  
alexdd писал(а) 23. Сентября 2009 :: 10:14:
Народ, а что это все даст? Это что оптимизация блокировок? Почему тогда _1sbkttl, _1sjourn все равно залочен на все время проведения документа.
Если оптимизация производительности, тоже сомнительно, вместо update - insert в другую таблицу и view, и че от этого будет быстрее?
может я туплю, конечно, но чет нихрена непонимаюУлыбка

Это все имеет смысл, если ты оключишь блокировки в базе.
Тогда если проводятся 2 разные документа - они не будут натыкаться на журнал документов. НО: велика вероятность того, что им обоим придется обновить одинаковые строки в таблицах kttl, kttlc.
Сейчас часто получается так, что эти строки обновляются неверно, одно из одновременных изменений теряется. 10 + 5 + 5 = 15.
В случае же инсертов (я надеюсь) - подобных потерь быть не должно.
По крайней мере - я это дело уже запустил на боевой базе, для проверки. 60000 строк в таблице движений. Полет нормальный, тормозов не замечено.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #17 - 23. Сентября 2009 :: 10:38
Печать  
classic писал(а) 23. Сентября 2009 :: 10:31:
alexdd писал(а) 23. Сентября 2009 :: 10:14:
Народ, а что это все даст? Это что оптимизация блокировок? Почему тогда _1sbkttl, _1sjourn все равно залочен на все время проведения документа.
Если оптимизация производительности, тоже сомнительно, вместо update - insert в другую таблицу и view, и че от этого будет быстрее?
может я туплю, конечно, но чет нихрена непонимаюУлыбка

Это все имеет смысл, если ты оключишь блокировки в базе.
Тогда если проводятся 2 разные документа - они не будут натыкаться на журнал документов. НО: велика вероятность того, что им обоим придется обновить одинаковые строки в таблицах kttl, kttlc.
Сейчас часто получается так, что эти строки обновляются неверно, одно из одновременных изменений теряется. 10 + 5 + 5 = 15.
В случае же инсертов (я надеюсь) - подобных потерь быть не должно.
По крайней мере - я это дело уже запустил на боевой базе, для проверки. 60000 строк в таблице движений. Полет нормальный, тормозов не замечено.

почему не будет помимо проведения разве нет отмены проведения или из-за какой нибудь галки Вам нужно удалить все проводки и создать принципиально другие.


alexdd прав видя часть логики трудно оперировать всем.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #18 - 23. Сентября 2009 :: 10:54
Печать  
То есть блокировка _1sjourn просто отключена? А как быть, например, в такой ситуации:
есть остаток 2 штуки товара. Пользователь 1 проводит документ, списывает 2 штуки. Движения, которые сделал документ пользователя 1 еще не закомичены. Пользователь 2 начинает проводить свой документ, списывает тоже 2 штуки.
"Закомиченные остатки" позволяют провести документы обоим пользователям, блокировки не возникнет. В результате спишется 4 штуки товара?
Стандартная блокировка 1С заблокирует _1sjourn и не даст Пользователю 2 провести свой документ, пока не закончится проведение для Пользователя 1.
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #19 - 23. Сентября 2009 :: 11:00
Печать  
alexdd

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

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #20 - 23. Сентября 2009 :: 11:13
Печать  
А никто не думал скажем для сокращения
времени проведения(что бух что торговля) подготавливать
все заранее в ТЗ  а в модуле проведения только проверять остатки
(если нужно ) и делать только движения из ТЗ.
Основная идея в модуле проведения операций меньше он быстрее выполняется и блокировка ( стандартная или своя )
накладывается на меньшее время.

Сложность возникает когда проводим документ из внешней обработке не своей. Либо разделять эти два случая в модуле проведения, либо менять обработку и в ней создавать ТЗ.
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #21 - 23. Сентября 2009 :: 11:16
Печать  
alexdd писал(а) 23. Сентября 2009 :: 10:54:
То есть блокировка _1sjourn просто отключена? А как быть, например, в такой ситуации:
есть остаток 2 штуки товара. Пользователь 1 проводит документ, списывает 2 штуки. Движения, которые сделал документ пользователя 1 еще не закомичены. Пользователь 2 начинает проводить свой документ, списывает тоже 2 штуки.
"Закомиченные остатки" позволяют провести документы обоим пользователям, блокировки не возникнет. В результате спишется 4 штуки товара?

В данном случае (особенности националь данного предприятия): вероятность такого очень мала + никаких проблем не будет. Ну спишется 4 штуки, ну и что. Главное, что бы на складе оказалось -2. А то без инсертов бывало, оказывалось 0.
Тоже не страшно, конечно, но, неприятно.
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #22 - 23. Сентября 2009 :: 11:18
Печать  
Понятно, просто показалось, что если возникают случаи, когда
Цитата:
Сейчас часто получается так, что эти строки обновляются неверно, одно из одновременных изменений теряется

то тут как раз и ошибка в логике блокировок, т.е. обновление происходит по одним и тем же измерением(субконто), тут нужно "подождать", а не инсертить в другую таблицу. Хотя, да, зависит, конечно, от бизнеслогики(может там только услуги, например, остатки не важны..хотя все-равно стремно, имхо). Если полет нормальный, то и ладноУлыбка
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #23 - 23. Сентября 2009 :: 11:20
Печать  
classic писал(а) 23. Сентября 2009 :: 11:16:
Главное, что бы на складе оказалось -2.

все, понял
  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #24 - 02. Октября 2009 :: 06:33
Печать  
Сегодня отключил доп таблицы. За несколько дней, пока эта система работала, пересчет итогов требовался постоянно, причем поймать, из-за чего расчитанные итоги расходились с проводками не удалось. Накладки в штатном режиме (когда просто блокировки отключены) возникали намного реже.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #25 - 02. Октября 2009 :: 07:10
Печать  
classic писал(а) 02. Октября 2009 :: 06:33:
Сегодня отключил доп таблицы. За несколько дней, пока эта система работала, пересчет итогов требовался постоянно, причем поймать, из-за чего расчитанные итоги расходились с проводками не удалось. Накладки в штатном режиме (когда просто блокировки отключены) возникали намного реже.

Если уже делать так то нужно в другие таблицы данные переносить.
Тогда в 1с  остатки и обороты будут на время последнего переноса из доп таблиц в родные таблицы.

А если хранить в одной таблице все "расплывается" и при большой нагрузке на базу не отследишь из-за чего.
а при малой нагрузке вообще не стоит этого делать.


  
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #26 - 02. Октября 2009 :: 16:40
Печать  
Нагрузка вроде не маленькая, в таблице движений kttl за день собирался почти миллион строк. Но к сожалению, времени доводить до ума проект нет, да и финансирования тоже. Дешевле просто вернуть все как былоУлыбка
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #27 - 07. Октября 2009 :: 12:25
Печать  
Я придумал еще один вариант  subj( самый быстрый )
данные то что Вы вносите insert в доп таблицы можно вообще
никуда не вносить.
Т.е. Бух остатки и обороты будут у Вас на какое-то время.
Все что делается после заносится только в проводки.
Также можно либо написать хран. процедуру
по пересчету бух итогов от самой ранней разрешенной даты
либо воспользоваться стандартной обработкой по пересчету бух итогов.
Естественно когда пересчитываем бух итоги нельзя ни проводить документы не отменять их.

Переключать режимы между таким "Супербыстрым" и "стандартным" можно
либо внеся спец. переменные в xp либо перегинирируя сами xp.

Не знаю насколько возможна работа бухгалтерии в таком режиме.

Когда то давно писал тест для регистров пересчет всех rg по ra.
пересчет за 6 лет занял 18 минут ( да и то я не стремился написать супероптимально)
а пересчет двух кварталов займет не больше 3 минут на хорошем сервере.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #28 - 07. Октября 2009 :: 13:57
Печать  
PS к 27 Плюс можно также сделать очередь
создаем доп таблицу

Код
Выбрать все
create table last_oper
(
id bigint  IDENTITY(1,1) ,
iddoc	char(9)     NOT NULL,
oper	 tinyint  NOT NULL default 1 , -- 1 проводим документ 0 отменяем проведение документа
data_dt	 datetime    NOT NULL default getdate(),
CONSTRAINT PK_last_oper PRIMARY KEY(id)
-- может быть имеет смысл добавить значение период проведения. НачМесяца(ДатаДок)
)
 



При новом проведении и при отмене документа из модуля проведения добавляем одну
запись в эту таблицу. Получаем очередь на проведение.

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

Все тоже самое можно сделать и для регистров.
Все это вполне реально сделать(сложность будет может быть только с УРБД ).
  
Наверх
 
IP записан
 
chicago
Senior Member
****
Отсутствует


1C++, I have nothing to
say more!

Сообщений: 316
Местоположение: Тернополь-Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Как обойти блокировку таблицы _1SBKTTLC?
Ответ #29 - 07. Октября 2009 :: 16:59
Печать  
Z1 писал(а) 07. Октября 2009 :: 13:57:
Все это вполне реально сделать(сложность будет может быть только с УРБД ).


Почему? О УРБД еще не думал.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать