powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Транзакции в TADOCommand и mssql
17 сообщений из 17, страница 1 из 1
Транзакции в TADOCommand и mssql
    #39641289
СферическийКуб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотелось бы понять, как работают транзакции в TADOCommand.
В коде явного управления транзакциями у меня нет, только вызов исполнения ADOCommand.Execute;
В целом все работает. Проблемы начинаются, когда сервер mssql начинает работать нестабильно(подвисает на ровном месте).
При чтении записи вставленные через ADOCommand.Execute видны в других соединениях, в ADOConnection изоляция ilReadCommitted, т.е. грязного чтения быть не может и записи реально вставлены и вроде бы закоммичены.
После рестарта службы некоторые записи исчезают.
При шатдауне логично, что сервер откатывает незавершенные транзакции, но как выше видно они по всем признакам выглядят закоммичеными.
Или в TADOCommand транзакции какое-то особенные? В соединении IMPLICIT_TRANSACTIONS нигде не ставится.
Как сделать, чтобы данные не исчезали после рестарта сервера?
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641317
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

у тебя подвисшая транзакция.
Пока не произойдет явного разрыва ADOConnection: они будут висеть и творить чудеса...
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641332
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб...
Как сделать, чтобы данные не исчезали после рестарта сервера?
Без понятия, чего ты там творишь, посоветовать что-то не представляется возможным.
Ошибка кроется в СферическийКубПроблемы начинаются, когда сервер mssql начинает работать нестабильно(подвисает на ровном месте)
Ровное место, не такое ровное, как кажется...
P.s.
Проверь наличие тригеров на изменяемые таблицы. Иногда о них можно не подозревать...
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641361
СферическийКуб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenkoу тебя подвисшая транзакция.
А данном случае физически что это означает и как она получается?
У меня один экземпляр ADOCommand и на каждую запись в базу переиспользуется.

Проверь наличие тригеров на изменяемые таблицы. Иногда о них можно не подозревать...
Триггеры есть, но в них вроде ничего криминального нет.
В одном
Код: sql
1.
2.
3.
4.
5.
for update
.....
error:
	raiserror (@errno, 11, 1, @errmsg)
	rollback  transaction


Но это на обновление, и оно нормально отрабатывает.
Если при обновлении какие-то данные не соответствуют логике, то тогда они отбрасываются.
ADOCommand после Execute автоматически коммитит умолчательную транзакцию или этот процесс не всегда однозначен? По вышеописанным данным, все-таки складывается ощущение, что коммиты проходят нормально, раз их видно в других коннектах.



Ровное место, не такое ровное, как кажется...
Очевидно, да. Но с этим я и хочу разобраться.
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641414
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

авторА данном случае физически что это означает и как она получается?
У меня один экземпляр ADOCommand и на каждую запись в базу переиспользуется.
Ты хочешь сказать, что не используешь ADOConnection?

авторADOCommand после Execute автоматически коммитит умолчательную транзакцию или этот процесс не всегда однозначен?
Допустим, ты запускаешь ХП, у которой есть Begin Tran, но до Commit or RollBack по каким то причинам не доходит. Пока ты не закроешь ADOConnection: будет подвисшая транзакция.

авторТриггеры есть, но в них вроде ничего криминального нет.
В одном Вот эти конструкции вполне себе могут организовать подвисшую транзакцию. Проверь пошагово в MSSQL все возможные варианты.

Если у тебя ADOCommand всегда в виде одноДейственной конструкции, то проблема явно на сервере.
Если ты открываешь транзакцию на клиенте, то и завершить ее надо на клиенте.
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641417
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

Для начала можно посмотреть в SSMS в Activity Monitor параметр Open Trans у твоего коннекшена, динамику его изменения
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641464
СферическийКуб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerasimenkoТы хочешь сказать, что не используешь ADOConnection?
Использую. В смысле один и тот же экземпляр ADOCommand приклеенный к единственному ADOConnection переиспользуется.
Все действия через ХП производятся.

Пока ты не закроешь ADOConnection: будет подвисшая транзакция.
И все дальнейшие вызовы ADOCommand.Execute будут в этой незавершенной транзакции производиться?
Хотя опять же, у меня ilReadCommitted при котором незакоммиченных изменений не видно. А тут данные видны.
А эта повисшая транзакция как может влиять на закоммиченные транзакции? Не могут же они откатиться.



Zeliusпараметр Open Trans
У меня такого нет. Сервер и студия от него 2008R2.
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641476
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

авторИ все дальнейшие вызовы ADOCommand.Execute будут в этой незавершенной транзакции производиться?
Хотя опять же, у меня ilReadCommitted при котором незакоммиченных изменений не видно. А тут данные видны.
А эта повисшая транзакция как может влиять на закоммиченные транзакции? Не могут же они откатиться.
А кто тебе сказал, что после открытой и НЕзавершенной транзакции остальные получили Commit?
Допустим по таймауту вылет, или ХП просто не дошла до Commit/RollBack и завершила работу. Транзакция на сервере не закрыта. Ты запускаешь следующие конструкции. Что по твоему будет происходить. В том числе и у других пользователей.
При этом, когда ты закроешь ADOConnection, будет откат всех незавершенных транзакций.
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641477
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

в ХП возвращай результат. И все будет понятно.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
 rs_:_RecordSet;
...
begin
...

rs_:=ADOCommand.Execute;
if rs.Field['NameField'].Values = ...
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641481
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКубGerasimenkoТы хочешь сказать, что не используешь ADOConnection?
Использую. В смысле один и тот же экземпляр ADOCommand приклеенный к единственному ADOConnection переиспользуется.
Все действия через ХП производятся.

Пока ты не закроешь ADOConnection: будет подвисшая транзакция.
И все дальнейшие вызовы ADOCommand.Execute будут в этой незавершенной транзакции производиться?
Хотя опять же, у меня ilReadCommitted при котором незакоммиченных изменений не видно. А тут данные видны.
А эта повисшая транзакция как может влиять на закоммиченные транзакции? Не могут же они откатиться.



Zeliusпараметр Open Trans
У меня такого нет. Сервер и студия от него 2008R2.
Студия - SQL Server Management Studio? Тогда должно быть, правой кнопкой по серверу или где то в Management узле
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641497
СферическийКуб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gerasimenkoв ХП возвращай результат. И все будет понятно.
ХП какие есть.
Велосипед не мой, я только костыли подставляю.
Их тут несколько тысяч.

GerasimenkoА кто тебе сказал, что после открытой и НЕзавершенной транзакции остальные получили Commit?
А как иначе они видны в других коннектах? В уровне изоляции у меня нет грязного чтения.
ZeliusСтудия - SQL Server Management Studio?
Да, но там в мониторе нет количества транзакций.
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641558
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

а sys.sysprocesses доступен? там была open_tran колонка
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641567
СферическийКуб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius,
Да, доступно, там есть.
Там сейчас все по нулям.

А, кстати, модель восстановления базы вообще может влиять на странное поведение?
У меня сейчас SIMPLE.
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641568
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКубZelius,
Да, доступно, там есть.
Там сейчас все по нулям.

А, кстати, модель восстановления базы вообще может влиять на странное поведение?
У меня сейчас SIMPLE.
нет
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641571
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

могут влиять настройки соединения типа SET XACT_ABORT ON, SET NOCOUNT ON, либо глобально включить для всего сервера, либо в каждой процедуре писать первыми строками
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641584
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СферическийКуб,

Посмотри как можно определить, включены ли неявные транзакции на сервере
...
Рейтинг: 0 / 0
Транзакции в TADOCommand и mssql
    #39641765
СферическийКуб
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, включены
@@TRANCOUNT = 0 AND (@@OPTIONS & 2 = 0)

В общем, на сколько я понял, при следующем торможении надо мониторить sys.sysprocesses
на предмет транзакций.

Типы тормозов бывают разные. Чаще всего это из-за индексов, перестройка которых помогает.
И более редкий тип - просто тормоз без причины при обращении к некоторым данным, тут только рестарт сервера помогает .
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Транзакции в TADOCommand и mssql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]