Вниз
Скачать: CL | DM;

Что происходит с транзакцией запущенной на сервере если ADOComman   Найти похожие ветки 

 
jocko ©   (2004-01-17 13:01) [0]

Собственно хотелось бы знать сталкивался ли кто с такой проблемой.
В списке блокировок видим пользователей, у которых есть несколько незавершенных транзакций,на клиенте транзакции не открываются,
серверные процедуры уже перепроверены, источник не нашли, везде есть commit или rollback (кажется :( ),
из множества серверов проблемы только на одном, причем самом нагруженном и то видимо в часы максимальной
нагрузки. Единственная мысль изложена в subject.
Может у кого есть идеи...


 
jocko ©   (2004-01-17 13:40) [1]

Что происходит с транзакцией запущенной на сервере если ADOCommand "отвалился" по timeout?


 
KSergey ©   (2004-01-17 14:06) [2]

Смотря что происходит в программе при этом "отваливании".

Впрочем, не совсем понятно что значит "ADOCommand "отвалился" по timeout". Рвется соединение с сервером или команда просто выполняется больше таймаута?
А где транзакция-то открыта? В ХП или c клента?
1.Если с клиента.
Если рвется соединение с сервером - то транзакция собственно и останется висеть. И не снять ее часто, увы. Если просто выскакивает Exception про таймаут - то, видимо, просто обработать его и откатить транзакцию.
2.Если с сервера (в ХП или запросе)
Думаю, ХП или запрос таки будут дорабатывать до конца не смотря на то, что клиента это уже не интересует, хотя, сказать честно, в этом уже не уверен. Это я не четко знаю.

Вообще, хоть и возникает часто соблазн открывать транзакции с клиента делать этго не стоит никогда, т.к. всегда возможна ситуация подвиса клиента, а значит никакая обработки исключений не позволит транзакцию корректно закрыть (коммитом или откатом). Т.е. транзакции - только! на сервере, в рамках ХП, например.


 
jocko ©   (2004-01-17 14:21) [3]

команда выполняется дольше 30 сек
на клиенте транзакции не открываются


 
jocko ©   (2004-01-17 14:22) [4]

используются только ХП


 
KSergey ©   (2004-01-17 14:41) [5]

Ну в принципе, если более 30 сек считать нормальным для задачи - то может увеличить? Благо ADOCommands это позволяет.
А вообще действительно интересно: что делает сервер с запущенным SQL Batch, если пользователь отвалился? Может кто из монстров подскажет...
Если вы зададите этот вопрос а sql.ru, скажем, киньте сюда ссылку - инетесно что ответят.


 
Nikolay M. ©   (2004-01-19 10:15) [6]


> Что происходит с транзакцией запущенной на сервере если
> ADOCommand "отвалился" по timeout?

Может, я не совсем в сути дела, но у меня при вызове след. ХР вылета по таймауту (в ADOCommand & ADOConnection тайминги минимальны) не произошло, процедура работает около минуты.
Имхо, после запуска ХР на сервере (не)существование коннекта с клиентом на ее работу уже никакого влияния не имеет. Просто на клиенте посыпятся ошибки, а процесс, запущенный на сервере, отработает до конца. А закоммитится он или откатится - это уже зависит от логики ХР.

CREATE PROC pTest
AS

DELETE FROM tTest

BEGIN TRANSACTION

DECLARE
@i integer,
@j integer

SELECT @j = 0
WHILE (@j < 1000)
BEGIN
SELECT
@i = 0
WHILE (@i < 20000)
SELECT @i = @i + 1
SELECT @j = @j + 1
INSERT INTO tTest (f1) VALUES (@j)
END

COMMIT TRANSACTION



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.017 c
14-29591
Jew_lo
2004-01-19 16:30
2004.02.10
Вот так мамаша


14-29589
mixvictor
2004-01-18 22:29
2004.02.10
Нейронные сети


4-29675
Neznaika
2003-12-03 20:45
2004.02.10
Корзина


3-29203
den74
2004-01-19 21:51
2004.02.10
Index is out of date


14-29578
Soft
2004-01-20 02:51
2004.02.10
Мы работаем ДЛЯ ВАС!!!




   Наверх