Добавлено: 21 Май 2004, 11:01
Hello, All!
Столкнулись со следующей проблемой.
Куча пользователей. Периодически запускается длительный расчет, который перелопачивает кучу записей (1600 карточек за 3 минуты - это что-то по зарплате, завтра Fant, наверное, уточнит). Для ускорения работы транзакция разбивается на несколько частей, между Commit и Logout программа делает небольшую паузу, чтобы кто-то еще смог вклиниться и что-то сделать.
Так получается, что этот долгий расчет может быть запущен сразу с нескольких станций. В результате все, кроме первого могут идти курить, т.к. не удается начать транзакцию. Похоже, что Logout пытается захватить базы через какие-то интервалы времени, как раз так, что паузы между Commit и Logout не помогают совсем, и приходится ждать окончания расчета первым клиентом.
Больше всего расстраивает то, что клиент пытается запустить расчет и после нескольких секунд ожидания получает сообщение, что программа не может получить доступ в файлам. Т.е. Logout(N, ...) не спасает даже, если время N больше, чем время обработки нескольких карточек, включенных в транзакционные скобки (чтоб-таки попасть на эту паузу между расчетами).
Попытка делать транзакцию лишь на расчет 1-й карточки дает тормоза при их большом количестве.
Вопрос, пожалуй к Олегу Руденко: не знаете ли вы, с какими интервалами драйвер пытается получить доступ к базам при начале транзакции?
Как еще можно остальным клиентам дать хоть какой-то шанс хоть что-то сделать, пускай даже за счет значительного замедления работы на каждом из клиентов?
Вариант с принудительной задержкой между расчетом каждой из карточек не слишком хочется применять, ибо это даст тормоза в случае единственного клиента.
На SQL пока не переходим по технически-идеологическим причинам
--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: (057) 2177977,759072(3!4)
WEB: http://enigmasoft.com.ua
e-mail: maxim@enigmasoft.com.ua
ICQ: 12253836
(Добавление)
Я чего-то не понял. Если это тот-же расчет, то зачем его запускать повторно?
Подождать и посмотреть готовый результат. Если это другой расчет (по другим карточкам), то надо отсосать нужный для расчета набор в локальный файл или очередь и считать по нему. И еще, а зачем транзакция? Запретить на время расчета операции которые могут менять исходные данные, и все. Т.е. открыть эти файлы ReadOnly+DenyWrite.
WBR, Nick Tsigouro Mailto:N.Tsigouro@mtu-net.ru
Повторю вопрос... Не знаете ли Вы, с какими интервалами драйвер пытается получить доступ к базам при начале транзакции? По специфике именно моей задачи пишу в ClaTalk.
Best regards, Fant. mailto: fant@enigmasoft.com.ua
------------------- ICQ: 262998995
(Добавление)
Не знаю, и знать не особенно желаю. Нельзя завязавать решение задачи на такие _недоступные_для_контроля_и_управления_ подробности реализации. Это в корне неправильно. ИМХО.
WBR, Nick Tsigouro
Написал: ClaList(2)
Столкнулись со следующей проблемой.
Куча пользователей. Периодически запускается длительный расчет, который перелопачивает кучу записей (1600 карточек за 3 минуты - это что-то по зарплате, завтра Fant, наверное, уточнит). Для ускорения работы транзакция разбивается на несколько частей, между Commit и Logout программа делает небольшую паузу, чтобы кто-то еще смог вклиниться и что-то сделать.
Так получается, что этот долгий расчет может быть запущен сразу с нескольких станций. В результате все, кроме первого могут идти курить, т.к. не удается начать транзакцию. Похоже, что Logout пытается захватить базы через какие-то интервалы времени, как раз так, что паузы между Commit и Logout не помогают совсем, и приходится ждать окончания расчета первым клиентом.
Больше всего расстраивает то, что клиент пытается запустить расчет и после нескольких секунд ожидания получает сообщение, что программа не может получить доступ в файлам. Т.е. Logout(N, ...) не спасает даже, если время N больше, чем время обработки нескольких карточек, включенных в транзакционные скобки (чтоб-таки попасть на эту паузу между расчетами).
Попытка делать транзакцию лишь на расчет 1-й карточки дает тормоза при их большом количестве.
Вопрос, пожалуй к Олегу Руденко: не знаете ли вы, с какими интервалами драйвер пытается получить доступ к базам при начале транзакции?
Как еще можно остальным клиентам дать хоть какой-то шанс хоть что-то сделать, пускай даже за счет значительного замедления работы на каждом из клиентов?
Вариант с принудительной задержкой между расчетом каждой из карточек не слишком хочется применять, ибо это даст тормоза в случае единственного клиента.
На SQL пока не переходим по технически-идеологическим причинам

--
Best regards,
Maxim Yemelyanov,
Enigma Soft Company
phone: (057) 2177977,759072(3!4)
WEB: http://enigmasoft.com.ua
e-mail: maxim@enigmasoft.com.ua
ICQ: 12253836
(Добавление)
Я чего-то не понял. Если это тот-же расчет, то зачем его запускать повторно?
Подождать и посмотреть готовый результат. Если это другой расчет (по другим карточкам), то надо отсосать нужный для расчета набор в локальный файл или очередь и считать по нему. И еще, а зачем транзакция? Запретить на время расчета операции которые могут менять исходные данные, и все. Т.е. открыть эти файлы ReadOnly+DenyWrite.
WBR, Nick Tsigouro Mailto:N.Tsigouro@mtu-net.ru
Повторю вопрос... Не знаете ли Вы, с какими интервалами драйвер пытается получить доступ к базам при начале транзакции? По специфике именно моей задачи пишу в ClaTalk.
Best regards, Fant. mailto: fant@enigmasoft.com.ua
------------------- ICQ: 262998995
(Добавление)
Не знаю, и знать не особенно желаю. Нельзя завязавать решение задачи на такие _недоступные_для_контроля_и_управления_ подробности реализации. Это в корне неправильно. ИМХО.
WBR, Nick Tsigouro
Написал: ClaList(2)