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

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

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

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

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

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

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


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

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

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

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


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