|
|
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
Хотелось бы понять, как работают транзакции в TADOCommand. В коде явного управления транзакциями у меня нет, только вызов исполнения ADOCommand.Execute; В целом все работает. Проблемы начинаются, когда сервер mssql начинает работать нестабильно(подвисает на ровном месте). При чтении записи вставленные через ADOCommand.Execute видны в других соединениях, в ADOConnection изоляция ilReadCommitted, т.е. грязного чтения быть не может и записи реально вставлены и вроде бы закоммичены. После рестарта службы некоторые записи исчезают. При шатдауне логично, что сервер откатывает незавершенные транзакции, но как выше видно они по всем признакам выглядят закоммичеными. Или в TADOCommand транзакции какое-то особенные? В соединении IMPLICIT_TRANSACTIONS нигде не ставится. Как сделать, чтобы данные не исчезали после рестарта сервера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 11:32 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб, у тебя подвисшая транзакция. Пока не произойдет явного разрыва ADOConnection: они будут висеть и творить чудеса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 11:58 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб... Как сделать, чтобы данные не исчезали после рестарта сервера? Без понятия, чего ты там творишь, посоветовать что-то не представляется возможным. Ошибка кроется в СферическийКубПроблемы начинаются, когда сервер mssql начинает работать нестабильно(подвисает на ровном месте) Ровное место, не такое ровное, как кажется... P.s. Проверь наличие тригеров на изменяемые таблицы. Иногда о них можно не подозревать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 12:16 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
Gerasimenkoу тебя подвисшая транзакция. А данном случае физически что это означает и как она получается? У меня один экземпляр ADOCommand и на каждую запись в базу переиспользуется. Проверь наличие тригеров на изменяемые таблицы. Иногда о них можно не подозревать... Триггеры есть, но в них вроде ничего криминального нет. В одном Код: sql 1. 2. 3. 4. 5. Но это на обновление, и оно нормально отрабатывает. Если при обновлении какие-то данные не соответствуют логике, то тогда они отбрасываются. ADOCommand после Execute автоматически коммитит умолчательную транзакцию или этот процесс не всегда однозначен? По вышеописанным данным, все-таки складывается ощущение, что коммиты проходят нормально, раз их видно в других коннектах. Ровное место, не такое ровное, как кажется... Очевидно, да. Но с этим я и хочу разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 13:07 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб, авторА данном случае физически что это означает и как она получается? У меня один экземпляр ADOCommand и на каждую запись в базу переиспользуется. Ты хочешь сказать, что не используешь ADOConnection? авторADOCommand после Execute автоматически коммитит умолчательную транзакцию или этот процесс не всегда однозначен? Допустим, ты запускаешь ХП, у которой есть Begin Tran, но до Commit or RollBack по каким то причинам не доходит. Пока ты не закроешь ADOConnection: будет подвисшая транзакция. авторТриггеры есть, но в них вроде ничего криминального нет. В одном Вот эти конструкции вполне себе могут организовать подвисшую транзакцию. Проверь пошагово в MSSQL все возможные варианты. Если у тебя ADOCommand всегда в виде одноДейственной конструкции, то проблема явно на сервере. Если ты открываешь транзакцию на клиенте, то и завершить ее надо на клиенте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:11 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб, Для начала можно посмотреть в SSMS в Activity Monitor параметр Open Trans у твоего коннекшена, динамику его изменения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 14:23 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
GerasimenkoТы хочешь сказать, что не используешь ADOConnection? Использую. В смысле один и тот же экземпляр ADOCommand приклеенный к единственному ADOConnection переиспользуется. Все действия через ХП производятся. Пока ты не закроешь ADOConnection: будет подвисшая транзакция. И все дальнейшие вызовы ADOCommand.Execute будут в этой незавершенной транзакции производиться? Хотя опять же, у меня ilReadCommitted при котором незакоммиченных изменений не видно. А тут данные видны. А эта повисшая транзакция как может влиять на закоммиченные транзакции? Не могут же они откатиться. Zeliusпараметр Open Trans У меня такого нет. Сервер и студия от него 2008R2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:05 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб, авторИ все дальнейшие вызовы ADOCommand.Execute будут в этой незавершенной транзакции производиться? Хотя опять же, у меня ilReadCommitted при котором незакоммиченных изменений не видно. А тут данные видны. А эта повисшая транзакция как может влиять на закоммиченные транзакции? Не могут же они откатиться. А кто тебе сказал, что после открытой и НЕзавершенной транзакции остальные получили Commit? Допустим по таймауту вылет, или ХП просто не дошла до Commit/RollBack и завершила работу. Транзакция на сервере не закрыта. Ты запускаешь следующие конструкции. Что по твоему будет происходить. В том числе и у других пользователей. При этом, когда ты закроешь ADOConnection, будет откат всех незавершенных транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:13 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб, в ХП возвращай результат. И все будет понятно. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:17 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКубGerasimenkoТы хочешь сказать, что не используешь ADOConnection? Использую. В смысле один и тот же экземпляр ADOCommand приклеенный к единственному ADOConnection переиспользуется. Все действия через ХП производятся. Пока ты не закроешь ADOConnection: будет подвисшая транзакция. И все дальнейшие вызовы ADOCommand.Execute будут в этой незавершенной транзакции производиться? Хотя опять же, у меня ilReadCommitted при котором незакоммиченных изменений не видно. А тут данные видны. А эта повисшая транзакция как может влиять на закоммиченные транзакции? Не могут же они откатиться. Zeliusпараметр Open Trans У меня такого нет. Сервер и студия от него 2008R2. Студия - SQL Server Management Studio? Тогда должно быть, правой кнопкой по серверу или где то в Management узле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:20 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
Gerasimenkoв ХП возвращай результат. И все будет понятно. ХП какие есть. Велосипед не мой, я только костыли подставляю. Их тут несколько тысяч. GerasimenkoА кто тебе сказал, что после открытой и НЕзавершенной транзакции остальные получили Commit? А как иначе они видны в других коннектах? В уровне изоляции у меня нет грязного чтения. ZeliusСтудия - SQL Server Management Studio? Да, но там в мониторе нет количества транзакций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 15:34 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб, а sys.sysprocesses доступен? там была open_tran колонка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 16:35 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
Zelius, Да, доступно, там есть. Там сейчас все по нулям. А, кстати, модель восстановления базы вообще может влиять на странное поведение? У меня сейчас SIMPLE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 16:47 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКубZelius, Да, доступно, там есть. Там сейчас все по нулям. А, кстати, модель восстановления базы вообще может влиять на странное поведение? У меня сейчас SIMPLE. нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 16:47 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
СферическийКуб, могут влиять настройки соединения типа SET XACT_ABORT ON, SET NOCOUNT ON, либо глобально включить для всего сервера, либо в каждой процедуре писать первыми строками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2018, 16:49 |
|
||
|
Транзакции в TADOCommand и mssql
|
|||
|---|---|---|---|
|
#18+
Да, включены @@TRANCOUNT = 0 AND (@@OPTIONS & 2 = 0) В общем, на сколько я понял, при следующем торможении надо мониторить sys.sysprocesses на предмет транзакций. Типы тормозов бывают разные. Чаще всего это из-за индексов, перестройка которых помогает. И более редкий тип - просто тормоз без причины при обращении к некоторым данным, тут только рестарт сервера помогает . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2018, 07:49 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39641477&tid=2040917]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 443ms |

| 0 / 0 |
