Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
Я с пол-года назад спрашивал тут об этом... Ситуация так и не изменилась - поиски бага ничего не дали. :(((
Есть приложение, которое общается с БД исключительно через хп (тоесть в приложении максимум, что есть - это command.execute). Асинхронных запросов нет.
Очень редко Иногда пару раз в день, иногда - раз в месяц), но случается такая картина: на мониторе сервера, счетчик транзакций непрерывно показывает одну транзакцию.
dbcc opentran честно позволяет установить чья это транзакция.
Самое интересное, что пользователь продолжает _нормально_ работать до разрыва коннекта - после разрыва естественно все откатывается.
Я сколько не пробовал, у меня не получается выйти из хп и оставить транзакцию открытой - если забыть commit или rollback, она всегда откатывается при выходе из батча.
Может кто хотябы подскажет в каких случаях она может все-таки оставаться открытой? А то хранимок уже перевалило за полторы тысячи, и анализировать все влоб - нереально :((
16 июл 03, 12:52    [263855]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
У тебя может аналогичная ситуация:

https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=39919
16 июл 03, 12:56    [263868]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
pkarklin,

ты так всё и не научился ссылки ставить по-человечьи...

Берешь ссылку и ставишь перед ней двойной слэшь //.

Примерно так

// https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=39919

Только я сознательно ввел пробел между // и http://www...

Вот как будет выглядеть без пробелов

https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=39919

И по ссылке можно нормально кликать, а не копировать её, запускать второй экземп браузера и вставлять Картинка с другого сайта.
16 июл 03, 13:27    [263954]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
2 tpg

Спасибо, а то как то стыдно было спрашивать. :-)
16 июл 03, 13:32    [263969]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Reuven
Member

Откуда: ISRAEL
Сообщений: 17
A procedura raznie vse vremya?
Interesno bilo bi vzglyanut na kod (samoi malenkoi)..
16 июл 03, 13:47    [264025]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Crimean
Member

Откуда:
Сообщений: 13148
2 pkarklin
Великий Шаман!
Огромный Спасыб за пример!
Пример дал ошибку, которая редко, но сильно достает в течении как минимум полугода - точно!
Интересно, она хотя бы в фикслисте есть? На СП4? Или начинать бомбить МС надо?
16 июл 03, 14:14    [264116]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
2pkarklin:
спасибо, очень похоже, что-то я пропустил тот топик - видно тема невыразительная...

что значит State: 0 в сообщении об ошибке?

Error: 208, Severity: 16, State: 0

у меня в профайлере такая ошибка появляется при любом использовании временных таблиц...
16 июл 03, 14:48    [264223]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
2Reuven:
дык зналбы в какой процедуре проблема - разобрался-бы :((
ту проблема в том, чтобы найти именно ее!
пользователей спрашивал (и не одного) что они делали перед тем как я их рубанул - рассказы каждый раз разные.... Причем после того как я их отрубил, они спокойно законектились и _все_ повторили, что откатилось - без всяких проблем!!!
16 июл 03, 14:51    [264238]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
2 Hibernate

А у меня в примере вот такая ошибка лезет.

Server: Msg 208, Level 16, State 1

2 Crimean

Интересно, она хотя бы в фикслисте есть? На СП4? Или начинать бомбить МС надо?

Не знаю, надо смотреть. Вот тока считать ли это ошибкой? Ведь написано, что Compile errors, such as syntax errors, are not affected by SET XACT_ABORT, а здесь налицо ошибка компиляции, относящаяся к позднему разрешению имен сиквелом, которая прерывает дальнейшее выполнение хп (бача), но транзакцию не откатывает.
16 июл 03, 15:06    [264271]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
Exec usp_TestProc
Выдает следующее:
(1 row(s) affected)

Server: Msg 208, Level 16, State 1, Procedure usp_TestProc, Line 6
Invalid object name 'Table'.
Server: Msg 266, Level 16, State 1, Procedure usp_TestProc, Line 8
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 3, current count = 4.


самое интересное, что dbcc opentran говорит, что
No active open transactions.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

счетчик активных транзакций тоже по нулям....
я совсем запутался... :(((
16 июл 03, 15:21    [264312]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 3, current count = 4.

Да у тебя до выполнения было @@trancount = 3, а после выполнения увеличился на 1. Так что транзакция должна висеть открытой.

у меня в профайлере такая ошибка появляется при любом использовании временных таблиц...

Наскока я понимаю, сиквел пытается статистику заюзать по полям временных таблиц, потомучто ошибка эта лезет примерно так:

-- usp_DepartmentNormsNew


UPDATE #tblDepartmentNorms2
SET colAmount2 = NULL
FROM #tblDepartmentNorms2 LEFT OUTER JOIN tblProdNomenclature ON
#tblDepartmentNorms2.colMaterialID = tblProdNomenclature.colProductID
WHERE tblProdNomenclature.colProductID IS NULL

SELECT statman([colMaterialID],@PSTATMAN)
FROM (SELECT TOP 100 PERCENT [colMaterialID] FROM [dbo].[#tblDepartmentNorms2________________________________________________________________________________________________000100000020] WITH(READUNCOMMITTED,SAMPLE 1.000000e+002 PERCENT) ORDER BY [colMaterialID]) AS _MS_UPDSTATS_TBL OPTION (BYPASS OPTIMIZER_QUEUE, MAXDOP 1)

Error: 208, Severity: 16, State: 0


Прошу прощения за слишком длинную строку.
16 июл 03, 15:41    [264366]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
стоит запустить хотя-бы один оператор на изменение (напр. update), счетчик активных транзакций сразу-же показывает, что открыта одна транзакция!

по сути что получается - транзакция может "зависнуть", а узнать об этом можно только тогда, когда будет запущен хотя-бы один стейтмент на изменение....
16 июл 03, 15:43    [264372]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
Да у тебя до выполнения было @@trancount = 3, а после выполнения увеличился на 1. Так что транзакция должна висеть открытой.

да я видел. и не сомневался в том, что транзхакция зависла. Просто dbcc opentran как-то странно себя ведет. см. пред. пост.
16 июл 03, 15:50    [264394]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Crimean
Member

Откуда:
Сообщений: 13148
2 pkarklin

Это ЖУТКАЯ бага. Даже хуже обрыва батча в инстедном триггере по любой ошибке. Так как сервер ТЕРЯЕТ контроль над транзакциями. В случае с 3 - звенкой предсказать последствия мне просто сложно. Да и с двух-звенкой не все так просто.
Более того, похоже, что это фиксили, но криво. Иначе я ничем не могу объяснить фактические запреты на смену схемы данных при обращении (любом, даже шаред!) к этим данным.
В 6.5 батч просто на начинался, если не было объекта, надо отдельно проверить, как себя вел батч при исчезновении объекта во время выполнения батча, хотя интерес скорее академический.
В любом случае если обрывается батч, то есть у сервера забирается контроль за транзакцией, то надо откатывать транзакцию или не обрывать батч и возвращать в @@error код ошибки на усмотрение разработчика!
Я с ужасом думаю, как себя поведет эта бага при работе с DTC...
16 июл 03, 15:53    [264405]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
2 Crieman

Согласен. Че делать то будем?
16 июл 03, 15:57    [264425]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Делать - орать разработчикам, ставить в фикс-лист...
У кого к PSS доступ есть?
16 июл 03, 16:03    [264452]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
У меня нет. :-(
16 июл 03, 16:11    [264472]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Ну, типа послал в кучу адресов, может хоть откуда-нить дойдет до фикслиста...
18 июл 03, 19:04    [267942]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
хм.. жаль у меня нет сейчас возможности проверить, но ведь ошибка такого плана действительно способна убить приложение...

кстати, а если ошибки возникают при Connection Timeout, может такая ситуация повториться?..
18 июл 03, 22:06    [268123]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Crimean
Member

Откуда:
Сообщений: 13148
http://support.microsoft.com/default.aspx?scid=KB;en-us;811034

У меня вроде получилось заявить это в PSS как критичную ошибку...
Посмотрим, что будет в следующем сервиспаке.

P.S.Кстати, AV от sp_executesql N'select * from syscursors' тоже заявлен.
30 июл 03, 16:37    [282039]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
Удалось таки выловить!
Есть две хп:
CREATE PROCEDURE Test_1

AS
BEGIN TRAN
SELECT * FROM tbl_Test
RETURN
GO

CREATE PROCEDURE Test_2

AS
UPDATE tbl_Test SET Quantity = Quantity + 1 WHERE ComplexQuantity = 1
GO


после этого в QA достаточно их запустить последовательно:
EXECUTE Test_1

EXECUTE Test_2

тоже самое и при запуске через ADO - если не обрубить конекшн, то транзакция так и зависнет!

мне все равно непонятно, почему при выходе из Test_1 не закрылась транзакция!!! Просветите, пож.
11 авг 03, 16:19    [296039]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
x x x
Guest
мне все равно непонятно, почему при выходе из Test_1 не закрылась транзакция!!! Просветите, пож

А почему она должна закрыться ? Где соммит или роллбэк ?
11 авг 03, 17:38    [296195]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
А почему она должна закрыться ? Где соммит или роллбэк ?
по идее, при выходе из батча все незакрытые транзакции должны откатываться.
12 авг 03, 10:52    [296826]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Glory
Member

Откуда:
Сообщений: 104760
по идее, при выходе из батча все незакрытые транзакции должны откатываться

По чьей идеи ??
12 авг 03, 10:53    [296829]     Ответить | Цитировать Сообщить модератору
 Re: Зависание транзакции....  [new]
Hibernate
Member

Откуда: Киев
Сообщений: 1670
к сож. по моей, но проблема все равно существует, дело ведь не в моей ошибке, а в ее диагностике!
Меняем слегка эти процедуры вот так:

CREATE PROCEDURE Test_1

AS
BEGIN TRAN
UPDATE tbl_Test SET Quantity = Quantity + 1 WHERE ComplexQuantity = 1
RETURN
GO

CREATE PROCEDURE Test_2

AS
SELECT * FROM tbl_Test
GO

EXECUTE Test_1

EXECUTE Test_2

почему в этом случае возникает ошибка, по которой можно легко найти проблему и исправить? А в предыдущем варианте - все проходит как по маслу, причем ошибка _одна_и_таже_ - незакрытая транзакция?
12 авг 03, 11:59    [296998]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить