powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна ли блокировка в следующем случае?
25 сообщений из 39, страница 1 из 2
Нужна ли блокировка в следующем случае?
    #32011985
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует некая операция пересчета остатков (Sp на SQL Server7), которая действует по следующему алгоритму:
1) Удаляет все остатки за период пересчета.
2) Рассчитывает остатки заново.
Во время операции пересчета остатков кому-то из пользователей может прийти в голову их просмотреть или выписать документ, в котором используются данные по остаткам, или внести приход(расход и т.д.), также запускающий процедуру расчета остатка.
Посоветуйте, как развести данную ситуацию:
1) Блокировать таблицу остатков на время пересчета?
2) Переписать процедуру пересчета остатков на вариант без удаления остатков?
3) Еще что-то?
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011987
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А просто загнать это в единую транзакцию не устраивает ? После начала транзакции и внесения каких-либо изменений остальные будут ждать завершения своих запросов до завершения транзакции.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011991
Удобно сделать так:

1. Расчитываешь новые остатки во временную таблицу.
2. Открываешь транзакцию
3. Удаляешь старые остатки
4. Добавляешь новые из вр. таблицы.
5. Закрываешь транзакцию.

Таким образом, длительная операция (расчет остатков) не попадает в транзакцию обновления, и транзакция (и соотв. блокировка) получаются короткими. Все довольны.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011993
Есть еще один приём. Расчитываешь остатки в новую таблицу, а потом в одной транзакции дропаешь старую и переименовываешь новую в старую. Транзакция и блокировка получаются ну очень короткими.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011994
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При этом возникает следующий вопрос - пока длится действие "Расчитываешь новые остатки во временную таблицу", могут произойти изменения в данных, по которым считаешь. Что делать в этом случае ?
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011996
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 GreenSunrise
Неплохой вариант, но бывают случаи, когда пересчет занимает много времени. В процедуре пересчета остатков на самом деле считаются еще и учетные цены, т.е. корректируется таблица движения товара. Попробую использовать Ваш совет, думаю, что хуже от этого все равно не будет. Хотелось бы услышать, как кто реализовал расчет остатков товарной продукции в своих системах, как корректируются остатки в случае внесения изменений в документы движения, как добавляются остатки в случае появления нового движения. У меня реализован принцип появления новой записи в таблице остатка по дате возникновения нового движения. В другой системе записи остатков появляются на каждый день.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011997
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik

Как то не понял ситуацию, остатки что, расчитываются в определенные моменты времени по всем товарам?
Если я правильно предположил, то на мой взгляд у вас оишибка либо в схеме данных, либо довольно странны алгоритм пересчета. Насколько мне известно пересчет остатков дожен производится сразу после соотвествующией операции (например отпуск товара) и следовательно будет производится только над одной записью по данному товару.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011998
Если данные для расчета беруться один раз (одним запросом), то по барабану абсолютно, никакие изменения расчету не помешают. Если данные считываются несколько раз, то скинь их одноразовым чтением во временую табличку, а дальше колупай её сколько хочешь раз. Надо не бояться использовать временные таблички, ибо сервер их сам использует весьма интесивно. Естественно, если расчет могучий, то это скажется на работе пользователей тормозами. Но несколько замедлять работу пользователей при закрытии периода гораздо гуманнее, чем полностью блокировать им ввод данных и получение отчетов в течении существенного периода времени, что непременно произойдет, если залочить таблицы.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32011999
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> При этом возникает следующий вопрос - пока длится действие "Расчитываешь новые остатки во временную таблицу", могут произойти изменения в данных, по которым считаешь. Что делать в этом случае ?

Именно поэтому я не использую временную таблицу для расчета остатков. Число транзакций, касающихся девственности остатков в нашей фирме очень велико.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012000
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik
Запись добавляется?
А почему не обновляется? Или Вам надо знать остатки на какие то моменты времени?
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012001
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не лучше ли пересчитывать остатки сразу при занесении документа? В это время число изменений невелико и выполниться это должно очень быстро.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012002
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
Я уже упомянул, что таблица остатков (для удобства установки даты актуальности в отчете по остаткам т.д.) содержит записи остатков при каждом возникновении движения товара. Так что если кому вздумается подкорректировать или аннулировать движение товара (будьте уверены, вздумается), то все записи нужно пересчитывать.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012003
Перерасчитывать остатки при каждом телодвижении - порочный путь. Тормозами система будет отличаться. Все, что я говорил, касается случая, когда остатки перерасчитываются периодически (например, закрытие периода, дня, etc), а не при каждом вводе новых данных. Обычно делают так: берут остатки в расчитанной таблице остатков за закрытый период + расчитывают остатки на лету по операциям в открытом периоде. Так как в открытом периоде мало данных, то такой расчет происходит быстро.

Насчет вр. табличек: их прелесть как раз в том, что они позволяют избежать блокировок. Впрочем, я не настаиваю.
Каждому - свое.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012005
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
На самом деле, так все и делается. Но существует проблемная ситуация - документы движения у нас вносятся в разных местах и не только в Москве. Для расчета остатков в целом и необходима данная процедура - это легче, чем пытаться помирить несколько таблиц остаков
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012007
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Глеб Уфимцев
Я обеими руками за Ваше предложение. Так и проще и быстрее. Но некий организационный момент мешает его внедрить. Потом, представьте ситуацию - товар отгружен сегодня, в остатках это еще не проявилось и менеджер преспокойно выписывает счет на данный товар
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012008
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik
Ну не знаю не знаю, по складскому учету у меня не очень большой опыт, но этот небольшой опыт мне подсказывает, что незачем хранить таким образом остатки, достаточно правильно отражать текущее положение на складе, а анулирование движения по моему в основном касается документов, подтверждающих это движение, таким образом при анулировании какого то движения Вы просто корректируете текущее положение на складе, т.е. обновляется одна строка для одного товара.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012010
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Потом, представьте ситуацию - товар отгружен сегодня, в остатках это еще не проявилось и менеджер преспокойно выписывает счет на данный товар

Может в консерватории надо править?


Товар отгружен а база не знает это знаете ли как то не очень хорошо.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012014
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
А случай с несколькими базами в разных местах? А если Вашему начальству захочется посмотреть остатки неделей раньше по одному из складов? А формирование отчета по движению товара за определенный период?
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012015
> Потом, представьте ситуацию - товар отгружен сегодня, в остатках это еще не проявилось и менеджер преспокойно выписывает счет на данный товар

Так в этой ситуации как раз помогает то, что я писал "+ расчитывают остатки на лету по операциям в открытом периоде", что означает: менеджер при запуске отчета получит самый свежий и самый правильный остаток, так как сальдо по открытому периоду быстро посчитается и добавиться к расчитанным остаткам прямо в этой же процедуре отчета.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012016
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
Мое предпоследнее высказывание касалось Вашего предпоследнего. Одной строчкой в остатках не обойдешься. Последнее Ваше высказывание адресуйте Глебу.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012018
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Глеб Уфимцев
А если в течение дня несколько раз пришли таблицы с движением товара из Красноярска, Ярославля и т.д?
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012019
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А случай с несколькими базами в разных местах?
А в чем проблема?
>А если Вашему начальству захочется посмотреть остатки неделей раньше по одному из складов?
Ну хорошо, хорошо, храните остатки по периодам, но если нужно анулировать движение и поправить остаток неужели нельзя править запись с остатком, который был посчитан по этому движению? Хотя бы дату вы знаете?

>А формирование отчета по движению товара за определенный период?
Ну а причем здесь остатки? Документов по движениям нет что ли?
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012021
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
Существуют некие документы по движению товара на складе, например, за неделю: сальдо на начало недели-приход-расход-сальдо в конце недели.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012022
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
>А случай с несколькими базами в разных местах?

Как раз этот случай недавно обсуждался на данной конференции (типа как объединить таблицы с данными по остаткам с разных серверов)
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012024
Сложение расчитанных остатков в закрытом периоде и расчитываемых "на лету" остатков в открытом периоде можно упростить и упорядочить применение такого бутерброда, если все это завернуть в одну вьюху, и везде эту вьюху использовать. Работает достаточно производительно, уж поверьте.
Я так в одном проекте делал, может кому пригодится: процедура в фоновом режиме запускалась (раз в несколько минут шедулером) и дорасчитывала остатки по появившимся изменениям в товарно-денежных движениях, комплектуя таблицу остатков. Эта таблица входила во вьюху и туда же во вьюху входил расчет по нерасчитанным движениям. Все отчеты использовали только эту вьюху. Так как движений с нерасчитанными остатками было мало (всего за несколько минут всего несколько движений), то их расчет во вьюхе времени не занимал практически нисколько. Зато все имели корректные остатки на момент запуска отчета. Расчет остатков процедурой в фоновом режиме практически не тормозил никого, так как там применялись методы, о которых я уже писал (со вр. табличками). Кроме того, в этой процедуре дорасчитывались опять же только изменения с момента предыдущего запуска процедуры. Т.е. очень быстро.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна ли блокировка в следующем случае?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]