Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5625
Двухзвенное приложение на ADO.Net, внутри которого работает распределнная транзакция между MSSQL и ораклом. Координатор транзакции - само приложение: что-то пишется в оракл, что-то в MSSQL, если всё в порядке, коммитится оракловая транзакция, и транзакция MSSQL. Обе транзакции относительно короткие, и много данных не затрагивают. Сегодня коммит транзакции MSSQL - именно коммит, а не сама команда - вылетел с ошибкой таймаута:

+
System.Data.SqlClient.SqlException: Timeout expired.  The timeout period elapsed prior to completion of the operation
or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request,
String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction,
TdsParserStateObject stateObj, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName,
IsolationLevel iso, SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso,
SqlInternalTransaction internalTransaction, Boolean isDelegateControlRequest)
at System.Data.SqlClient.SqlInternalTransaction.Commit()
at System.Data.SqlClient.SqlTransaction.Commit()

Порылся в гугле - впроде как за таймаут коммита/роллбака транзакции отвечает свойство SqlConnection.ConnectionTimeout, и подкрутить этот параметр не проблема, но интересно - что может быть причиной таймаута именно коммита, если сама команда выполнилась нормально? И как это можно смоделировать?
10 июл 17, 07:25    [20627820]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5625
P.S. Объекты и данные транзакции MSSQL во время работы приложения (оно работает как задание по расписаню) гарантированно не использует никакое другое приложение или сессия.
10 июл 17, 07:31    [20627821]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Mr. X
Guest
Сон Веры Павловны,
Увеличение файла бд по автоприращению (в %, файлик не маленький, УЗ sql не обладает нужными правами)?
10 июл 17, 09:07    [20627920]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Сон Веры Павловны,

если это распределенная транзакция, то она закрывается с двух сторон силами операционной системы.
10 июл 17, 10:59    [20628304]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5625
Владислав Колосов
Сон Веры Павловны,

если это распределенная транзакция, то она закрывается с двух сторон силами операционной системы.

Сон Веры Павловны
Координатор транзакции - само приложение
10 июл 17, 11:10    [20628359]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Сон Веры Павловны,

вообщем-то от dtс всегда можно отказать, он вам точно нужен?
10 июл 17, 11:14    [20628379]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Сон Веры Павловны,

автор
Координатор транзакции - само приложение


Если С#, то он, скорее всего, поднимает именно DTC.
10 июл 17, 11:28    [20628452]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5625
TaPaK
Сон Веры Павловны,

вообщем-то от dtс всегда можно отказать, он вам точно нужен?

Нет там никакого dtc, выше же написал - вся координация осуществляется в клиентском коде - примерно так:
using (var oraConnection = DbUtils.GetOraConnection())
using (var oraTran = oraConnection.BeginTransaction())
using (var mssqlConnection = DbUtils.GalMssqlConnection())
using (var mssqlTran = mssqlConnection.BeginTransaction())
try
{
  DoSomeInOra(oraConnection, oraTran);
  DoSomeInMssql(mssqlConnection, mssqlTran);
  oraTran.Commit();
  mssqlTran.Commit();
}
catch(Exception exception)
{
  oraTran.Rollback();
  mssqlTran.Rollback();
  Logger.Error(ex.Format(ErrorFormat.Verbose));
}

- только всё вроде как мало соотносится с тем, что коммит транзакции для MSSQL выбрасывает ошибку.
10 июл 17, 11:29    [20628456]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Владислав Колосов
Сон Веры Павловны,

автор
Координатор транзакции - само приложение


Если С#, то он, скорее всего, поднимает именно DTC.

решение принимает сервер, если логика запроса требует - будет распределённая, если нет - можно заставить или просто не будет
10 июл 17, 11:29    [20628463]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3145
Сон Веры Павловны,

Бэкап журнала не делался в этот момент?
10 июл 17, 11:38    [20628503]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Сон Веры Павловны,

Посмотрите что есть в еррорлоге на момент ошибки.
10 июл 17, 11:44    [20628543]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка таймаута коммита транзакции - в чем может быть причина?  [new]
aleks2
Guest
Сон Веры Павловны
TaPaK
Сон Веры Павловны,

вообщем-то от dtс всегда можно отказать, он вам точно нужен?

Нет там никакого dtc, выше же написал - вся координация осуществляется в клиентском коде - примерно так:
using (var oraConnection = DbUtils.GetOraConnection())
using (var oraTran = oraConnection.BeginTransaction())
using (var mssqlConnection = DbUtils.GalMssqlConnection())
using (var mssqlTran = mssqlConnection.BeginTransaction())
try
{
  DoSomeInOra(oraConnection, oraTran);
  DoSomeInMssql(mssqlConnection, mssqlTran);
  oraTran.Commit();
  mssqlTran.Commit();
}
catch(Exception exception)
{
  oraTran.Rollback();
  mssqlTran.Rollback();
  Logger.Error(ex.Format(ErrorFormat.Verbose));
}

- только всё вроде как мало соотносится с тем, что коммит транзакции для MSSQL выбрасывает ошибку.


Умеет же тредстартер приплести бузину в огороде к дядьке в кiеве.

Какая ж енто "распределенная транзакция"?
Особливо умиляет
 oraTran.Commit();
  mssqlTran.Commit();
}
catch(Exception exception)
{
  oraTran.Rollback();
  mssqlTran.Rollback();

Обычный говнокод.

ЗЫ. По теме: чо, религиозные убеждения не дозволяют профайлер?
10 июл 17, 12:49    [20628855]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить