SET TRANSACTION

VVD
Дата: 18.05.2011 13:12:14
Здравствуйте.

Давненько уже не пишу баз даних и, посему, далече отстал в этом вопросе. Но грехи давние изредка напоминают о себе. Отозвался клиент с моей старой складской прогой IB6+D6+MIDAS+DBExpress. Ни особых объемов данных, ни особой активности пользователей не предвиделось, посему - что оплата, что качество проги были соответствующими :). Но клиент за десяток лет не только не "умер", а неплохо поднялся в производстве продукции и прога стала нарастающим темпом барахлить. При одновременной работе нескольких пользователей время от времени умирает (виснет) сервер IB. Однозначно проблемы со взаимоблокировками вследствие общего увеличения среднего времени выполнения всех транзакций. Повспоминал-потыкал-нашел блудницу транзакцию с таблицей количества товара, которую пользователям нужно одновременно активно править и соответственно на ней все взаимоблокируется . В надежде на крови поменьше поменял IB на FB 2.0 - неа - халявы нет. Поднял изоляцию TSQLConnection этой транзакции до xilREPEATABLEREAD (полной сериализации в компоненте нет) - мало. Понял, что нужно резервировать одну из таблиц на запись. И вот здесь знания кончились. TSQLConnection.StartTransaction резервирования не предполагает. Надо давать прямую команду SET TRANSACTION ... RESERVING... в TSQLConnection.execute. Отсюда начиная вопросы:
1. TSQLConnection.execute('SET TRANSACTION... ' заменит штатный TSQLConnection.StartTransaction... ?
2. Тогда Commit тоже подавать через .execute('commit') или штатным TSQLConnection.commit?
3. Может это все как-то иначе (чтобы поменьше код ворошить) можно сделать?

P.S. В собственной отсталости уже осведомлен - посему прошу со мной как-то попроще и помягче :)
Anatoly Podgoretsky
Дата: 18.05.2011 13:25:29
Выкати клиенту ценник, как за написание новой программы, может отстанет.
RENaissance
Дата: 18.05.2011 13:35:44
В виду того, что "ничего не помню, ничего не знаю", надо нанимать программиста.
Ramin Hashimzade
Дата: 18.05.2011 13:37:01
Anatoly Podgoretsky
Выкати клиенту ценник, как за написание новой программы, может отстанет.

ДА ХОРОШОЕ РЕШЕНИЕ )
VVD
Дата: 18.05.2011 13:42:35
Anatoly Podgoretsky
Выкати клиенту ценник, как за написание новой программы, может отстанет.


Это я и сделал первым - еще до замены IB на FB :). Ну не то, чтоб как за новую, но выкатил нехило (с запасом) - помогло на месяц - теперь согласен. У них эта гнилая прога царь и бог - им деваться просто некуда. Ну и мне теперь тоже - совесть-то по-любому иметь надо.
Dimitry Sibiryakov
Дата: 18.05.2011 13:45:01

VVD
Повспоминал-потыкал-нашел блудницу транзакцию с таблицей количества товара, которую
пользователям нужно одновременно активно править и соответственно на ней все взаимоблокируется

И так будет с каждым, кто применяет хранимые агрегаты без мозга.

Posted via ActualForum NNTP Server 1.4

VVD
Дата: 18.05.2011 13:48:54
RENaissance
В виду того, что "ничего не помню, ничего не знаю", надо нанимать программиста.


Ну зачем аж так утрировать? Место узкое нашел. Вопросы задал конкретные. Прога гниловата, конечно, но далеко не тривиальная - другому программисту в саму задачу куда дольше вникать надо будет, нежели мне поднапрячься.
Johnmen
Дата: 18.05.2011 13:49:30
С учетом того, что IB/FB вовсе не блокировочник, таки нанять грамотного программиста...
VVD
Дата: 18.05.2011 13:50:56
Dimitry Sibiryakov
VVD
Повспоминал-потыкал-нашел блудницу транзакцию с таблицей количества товара, которую
пользователям нужно одновременно активно править и соответственно на ней все взаимоблокируется

И так будет с каждым, кто применяет хранимые агрегаты без мозга.


Боги должны не только наказывать людей, но и помогать им :).
VVD
Дата: 18.05.2011 13:57:45
Johnmen
С учетом того, что IB/FB вовсе не блокировочник, таки нанять грамотного программиста...


Я не то чтоб слишком сильно, но в душе надеюсь решить проблему за день-другой, а рассказывать все другому - месяц надо. Мне б на два первых вопроса...