powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна ли блокировка в следующем случае?
39 сообщений из 39, показаны все 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
Нужна ли блокировка в следующем случае?
    #32012025
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik
Ладно я умолкаю
что бы советовать дальше мне нужно намного больше вникнуть в Вашу задачу.
Просто у меня стойкое ощущение что что то у Вас недодумано, м.б. я ошибаюсь.
Успехов.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012027
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Глеб Уфимцев
Если не трудно и не жалко, киньте когда-нибудь пару примеров на тему Ваших расчетов остатков на мой e-mail: alexandr_k@baucraft.ru
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012030
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady
К сожалению, решение данной задачи начиналось не с меня и поэтому сделать структуру заново и как надо не могу. Я ограничен лишь движениями адаптации к существующей схеме. За пожелания и советы спасибо. Думаю, нам есть о чем еще поговорить за парой кружечек пива
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012031
2 AlexUnik

Примерчик постараяюсь состряпать. Если долго не будет, можно меня попинать gvu@newmail.ru
Память после 30 становиться просто дырявая
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012036
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Глеб Уфимцев
У меня память стала дырявой в 25 лет - с тех пор, как женился (что-то обязательно забываю из многочисленных поручений жены ) Но в данном случае я просто заинтересован не быть забывчивым.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012264
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik. Ты затронул весьма непростую и интересную тему. Безболезненно и идеально эта проблема не решается никак. Есть какие-то "консенсусы", которые могут устраивать в той или иной ситуации, но универсального решения просто не существует. Я приведу выдержку из своей статьи двухлетней давности, лежащей тут http://nsa.chat.ru/Raznoe_About.html:
....
Очевидно, что объем регистра может очень быстро расти. Типичная проблема - как достаточно быстро получить остатки по регистру на любую учетную дату, если отражается в нем только движение? Обычно регистр дробится на отрезки определенной протяженности, между которыми фиксируются промежуточные значения остатков. Фиксировать остатки после КАЖДОГО движения не рационально - слишком много в регистре будет информации, которую можно получить расчетным путем, и слишком велико потребление вычислительных ресурсов на пересчет всех остатков при проведении операций "задним числом". Однако, завязывать систему на операции "закрытия учетного периода" тоже некрасиво. В крупной системе пользователи должны иметь возможность вполне нормально работать в разных учетных периодах без каких-либо взаимных помех. Я предпочитаю, чтобы промежуточные остатки по регистру вообще не привязывались к учетному периоду. В своем проекте я привязываю их к критическому количеству прошедших по регистру движений. К примеру, промежуточные остатки могут подсчитываться после каждых 100 движений регистра с одинаковыми аналитическими признаками. В этом случае регистр сам сохранит несколько промежуточных значений остатков даже на протяжении одного дня, если по регистру "товары" за 1 день произошло около 300 движений одной номенклатуры на одном и том же складе. И в то же время по регистру "Ценные бумаги" может несколько кварталов учетного времени вообще не подсчитываться промежуточный остаток, если по этому регистру осуществляются единичные движения. Для получения остатков на запрошенную пользователем дату система извлекает из регистра ближайший к запрошенной дате промежуточный остаток (хранящийся в регистре), добавляет приход и вычитает расход за период до запрошенной даты и расчетным путем получает остаток на запрошенную дату. Технология расчета промежуточных остатков через 100 записей гарантирует, что при этом будет просмотрено не более 100 записей, и время ответа системы будет приемлемым.
....
К сказанному добавлю, что с момента написания статьи у меня взгляды на проблему несколько изменились. Расчет текущих остатков при плавающей границе веьма непрост и сам по себе требует существенных ресурсов. Я пришел к выводу, что наиболее оптимально иметь набор фиксированных интервалов и статистику. Например, остатки могут дробиться: по дням, по неделям, по месяцам, по кварталам, по годам. Конкретный интервал дробления выбирается по статистике оборотов с тем, чтобы между двумя соседними остатками оборотов было, скажем не больше 1000. Можно написать скрипты, которые по ночам или по выходным будут оптимизировать структуру хранения остатков.

2 Глеб. Это действительно очень сложная проблема. Если существует понятие "закрытие учетного периода", то это действительно решает проблемы бустродействия. НО! Это добавляет проблем, если нужно внести изменения в тот период, который закрыт. У нас, к примеру, закрывать вообще нельзя никакие периоды, такова специфика.
Получение остатков не сводится к простому суммированию приходов и вычетанию из них расходов. Представьте, что регистр учета товара ведется по множеству разрезов:
- По филиалам
- По складам
- По кладовщикам
- По номенклатуре
- По номеру приходной партии
... и т.д.
Остатки можно хранить с разблюдовкой по всем аналитикам, а на вопрос "сколько у нас такого-то товара на всех складах?" получать агрегированием остатков по всем остальным аналитикам. Но если аналитических разрезов много, и на каждом из них много значений аналитик, то ответ на поставленный вопрос может занять довольно много времени. Подобные проблемы решаются в системах аналитической обработки (OLAP). В кубах данных сохраняются все комбинации промежуточных остатков, включая самые свернутые и самые развернутые. При этом процесс расчета всех комбинаций промежуточных агрегатов - весьма долгая процедура. OLAP - это системы разлядывания мертвеца - они очень инертны. В данном случае речь идет об OLTP, но с одновременным решением задач, которыми обычно занимаются OLAP. В этом-то и проблема. Вариант с динамическим подрасчетом - весьма напоминиает схему работы с OLAP, и в нем действительно есть рациональные зерна. Конкретно же нужно субъективно (а как же еще ) нужно оценить объемы и скорость модификации, оценить вероятность и частоту залезания в прошлые периоды, выбрать оптимальные интервалы, схему обновления. Короче, вопрос этот требует медитации...
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012324
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Garya
Буду очень рад и далее узнавать о Ваших мыслях по этому поводу (мой e-mail Вы знаете). Да, это действительно очень сложный вопрос и на данный момент я принял решение о параллельной разработке нескольких механизмов расчета остатков для выявления наиболее оптимального из них.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012392
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сегодня реализовал следующий механизм расчета остатков:
1) Остатки формируются в разрезе номенклатурных позиций, складов и дат.
2) Добавление новой записи в таблицу остатков происходит при появлении нового документа движения. Например, 20.06.01 на складе было 100 тракторов, с тех пор движения не было. Актуальным остатком по тракторам считается остаток на 20.06.01. Вчера у нас купили 10 тракторов, в остатках появляется новая запись на 20.08.01 - 90 тракторов. Сегодня мы закупили 5 тракторов, соответственно, на 21.08.01 - 95 тракторов.
3) Параллельно с расчетом остатков считаются средневзвешенные учетные цены.
4) При появлении нового документа движения или аннулировании оного, если дата его совпадает с датой последнего расчета остатков, то запускается процедура расчета, в которой к последнему остатку по выбранным позициям товара добавляется (вычитается) количество оприходованного (отгруженного) товара в данном документе. Новая запись либо корректирует старую (если совпадает с ней по дате), либо добавляется в таблицу остатков.
5) При корректировке старого документа движения или добавлении нового документа задним числом, запускается процедура расчета остатков, в которой удаляются все остатки по выбранным позициям товара сверх той даты, на которую произошло корректирующее движение, после чего добавляются результаты нового расчета.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012407
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 AlexUnik

5-й пункт можно несколько соптимизировать.
Скорее всего будут изменения, которые могут не затрагивать остатки по счетам или затрагивать, но не за все даты(например документ меняет дату задним числом). Для ускорения можно ввести ввеменную таблицу, в которую записывались бы только изменения и с основной таблице менять только те записи, которые были действительно изменены. Например у несть есть количество некого товара по датам:
1 10
2 20
3 30
4 40
5 50
Но допустим изменение 2-го числа сделано неправильно, нам надо его сделать 3-м. Т.е. получить:
1 10
3 30
4 40
5 50
Вместо того чтобы как бы стирать документ и вводить его заново, мы сначала копим изменения во временной таблице
2 -10 как бы стирание
3 -10 как бы стирание
4 -10 как бы стирание
5 -10 как бы стирание
3 +10 как бы вставка
4 +10 как бы вставка
5 +10 как бы вставка
Если мы теперь это сгруппируем по дате, то получим:
2 -10
3 0
4 0
5 0
Отсюда видно что мы должны апдейтить не 7 записей(4 раза как бы удалить и 3 как бы вставить), а только одну.
На самом деле конечно всё получается сложнее, но принцип надеюсь понятен.

С приветом Сергей
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32012427
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 SergSuper
OK! Принцип понятен. Попробую реализовать. Моя беда в том, что все это время я пытался в пределах одной SP реализовать одновременно и расчет остатков и расчет учетных цен товара. Если использовать временную таблицу, все получится гораздо проще. Спасибо.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32013124
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>5) При корректировке старого документа движения или добавлении нового документа задним числом, запускается процедура расчета остатков, в которой удаляются все остатки по выбранным позициям товара сверх той даты, на которую произошло корректирующее движение, после чего добавляются результаты нового расчета.

А зачем удалять, запускать процедуру пересчета?
Допустим у Вас есть остатки (возьмем пример SergSuper):
1 10
2 20
3 30
4 40
5 50
И априори предположим что не бывает операций изменения документа товародвижения - только вставка и удаление (то есть проведение и откат - редактировать проведенный нельзя, редактировать непроведенный можно, но он не влияет на остатки)
Тогда откатываем документ (расход) от 2 го числа с количеством допустим 5 - тебе всеголишь необходимо увеличить на 5 все остатки начиная со второго числа и позже! UPDATE QNT SET QNT=QNT+5 FROM tblRemains WHERE [Date]>=2
Аналогичная схема с добавлением - допустим исправляешь в этом документе кол-во на 10 и проводишь его, надо выполнить операцию уменьшения остатков:
UPDATE QNT SET QNT=QNT-10 FROM tblRemains WHERE [Date]>=2
И всё... Кстати если нужен жесткий минус-контроль - он изумительно решается путем создания триггера на табл. остатков запрещяющего вставлять записи с QNT<0 !
В системе 2-х проц. Pent 900 с хорошим RAID массивом _дневное_ товародвижение в условиях онлайнового пересчета остатков (таблица остатков уже более 1 000 000 записей) пересчитывается за 30-60 секунд (это порядка 5000 товарных строк)! То есть один документ при повседневной работе проводится практически мгновенно (если проводить задним числом конечно время немного увеличивается, но такие документы редкость, да и не намного оно увеличивается )
И остатки на любую дату.
Другое дело, что если хранить запись в табл. остатков только на дату, в которой было товародвижение, то для того чтобы посмотреть остатки на произвольную дату надо найти сначала для каждого товара эту дату, а потом сделать выборку со связкой Товар, Дата. Запрос, который предлагает SergSuper (с коррелированным подзапросом) тормозит неимоверно!
Легче в таблице остатков хранить тогда и обороты и их суммировать - намного быстрее получается... Ну либо на каждую дату не зависимо от движения хранить остатки - тогда увеличивается кол-во записей в ней, усложняется логика пересчета...

Так что вот...
(а с учетными ценами это конечно отдельный разговор...)

С уважением, Андрей Митин
ICQ:38607432
http://am.rusimport.ru
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32013134
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 am (a_mitin)

Не потрудитесь объяснить, что такое "коррелированный подзапрос", который я якобы предлагаю и почему он будет тормозить?
А то мне сдуру всё время казалось, что чем меньшее количество записей апдейтиться, тем быстрее будет работать.
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32013137
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2SergSuper:
>Не потрудитесь объяснить, что такое "коррелированный подзапрос", который я якобы предлагаю и почему он будет тормозить?
Прошу прощения у глубокоуважаемого SergSuper за то что сразу не указал про какой запрос идет речь...
Цитирую:
'начало цитаты
--------------------------------------------------------------------------------
Replied Message:
--------------------------------------------------------------------------------
RE:T-SQL: Простой запрос подскажите pls.
Posted by SergSuper (sergsuper@mail.ru) on 02 Jul, 2001 17:09:07
а тут надо лапцами писать:
select Товар, Цена
from tbl t1 where НаДату=(select max(НаДату) from tbl t2 where t1.Товар=t2.Товар)
'конец цитаты...
А коррелированный - это тот подзапрос в котором есть ссылка на внешний запрос ( t1. Товар=t2.Товар)
> А то мне сдуру всё время казалось, что чем меньшее количество записей апдейтиться, тем быстрее будет работать.
Абсолютно согласен Речь шла о получении остатков на день из таблицы, где остатки храняться только на те дни, где были обороты... Т.е.
1 10
3 15
То остатки на 2-е число тоже 10...
...
Рейтинг: 0 / 0
Нужна ли блокировка в следующем случае?
    #32013209
AlexUnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 am (a_mitin)
>А зачем удалять, запускать процедуру пересчета?
К нам довольно часто приходят документы движения с удаленных складов, по которым, как я уже упоминал, также расчитываются остатки

Помимо всего прочего, в процедуре расчета остатков я предусмотрел обработку конфликтных ситуаций, типа расход>прихода на какую-то дату, нам совсем не нужны отрицательные остатки в отчетности
...
Рейтинг: 0 / 0
39 сообщений из 39, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна ли блокировка в следующем случае?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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