Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Timeout: level 300  [new]
Alexander Us
Member

Откуда:
Сообщений: 1093
Есть сложности с таймаутами из .NET приложения во время выполнения бэкапа.

Подробнее:
Раз в день .NET приложение копирует свежие данные данные в архивную базу, которая выросла уже до 4ТБ.
Архивная база лежит на относительно медленном диске (один физический диск).
Её бэкап (на медленный носитель) длится 24 часа.

Для копирования в архивную базу в приложении открывается SqlDataReader для источника, и передаётся в объект SqlBulkCopy для записи в целевую таблицу архива.

Для SqlBulkCopy предватительно настраиваются свойства NotifyAfter и BatchSize.
Опционально можно включать транзакцию для всех вставлямых в таблицу данных (т.е. на коннекшине).
Если она выключена, испозьзуется UseInternalTransaction = true на SqlBulkCopy.
Таймаут для SqlBulkCopy установлен в 0. Таймаут для источника установлен в 120 сек.

До сих пор всё было нормально.
С некоторого времени приложение начало вылетать по таймауту, если оно выполняется одновременно с бэкапом.

Причём очено странно:
Некоторые таблицы копируются баз проблем.

Для других - в основном с большим количеством BLOB данных копируется некоторое количестро строк, затем секунд через 20 после последней записи вылетает таймаут.

Методом тыка:
Включил асинхронное обновление статистики для целевой базы - не помогло.
Затем ещё уменьшил BatchSize - не помогло.
Затем ещё включил транзакцию - помогло.

Но остаётся совершенно непонятным причина таймаута.
Мож. кто сталкивался или имеет объяснение, буду признателен.


ЗЫ: пожалуйста, не предлагайте апгрейтить железо - мой вопрос о причинах.
11 июл 18, 11:01    [21561513]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Alexander Us
С некоторого времени приложение начало вылетать по таймауту, если оно выполняется одновременно с бэкапом.
В процессе бекапа минимально логируемые операции логируются полностью. Соответственно, увеличивается и время выполнения.
11 июл 18, 11:29    [21561614]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
aleks222
Member

Откуда:
Сообщений: 850
invm
Alexander Us
С некоторого времени приложение начало вылетать по таймауту, если оно выполняется одновременно с бэкапом.
В процессе бекапа минимально логируемые операции логируются полностью. Соответственно, увеличивается и время выполнения.

Ишо бы знать бякап какой базы исполняется...
11 июл 18, 11:50    [21561727]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
Alexander Us
Member

Откуда:
Сообщений: 1093
aleks222
Ишо бы знать бякап какой базы исполняется...

Выполняется полный бэкап целевой базы - базы архива.
11 июл 18, 11:59    [21561783]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
Alexander Us
Member

Откуда:
Сообщений: 1093
invm
В процессе бекапа минимально логируемые операции логируются полностью. Соответственно, увеличивается и время выполнения.


Спасибо за уточнение.
К сожалению оно не меняет картину - установка таймаута для источника 120с, для цели 0с,
Вначале пишет несколько блоков записей, потом вылетает примерно через 20 (это переменно) сек. после одного (случайного) их них.
А когда вкючил транзакцию на уровне записи в таблицу (дневной импорт) уже 2 раза как отработало без таймаута.
11 июл 18, 12:08    [21561840]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
aleks222
Member

Откуда:
Сообщений: 850
Alexander Us
aleks222
Ишо бы знать бякап какой базы исполняется...

Выполняется полный бэкап целевой базы - базы архива.

Ну дык, чередуйте бякап и чудесное приложение.
Сутки через сутки.
11 июл 18, 12:55    [21562036]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
Alexander Us
Member

Откуда:
Сообщений: 1093
aleks222
Ну дык, чередуйте бякап и чудесное приложение. Сутки через сутки.

Типа "кривые гвозди надо забивать кривыми молотками"?

Я же написал, хочу понять причину.
11 июл 18, 13:00    [21562052]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
aleks222
Member

Откуда:
Сообщений: 850
Alexander Us
aleks222
Ну дык, чередуйте бякап и чудесное приложение. Сутки через сутки.

Типа "кривые гвозди надо забивать кривыми молотками"?

Я же написал, хочу понять причину.


А что тут нипанятного?
Окромя "внешних таймаутов", есть "внутренние таймауты" самого сервера.
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-lock-timeout-transact-sql?view=sql-server-2017
Т.е. если что-то не может получить доступ к ресурсу за 20 сек - это убивается с ошибкой.
Если ты озаботишься выводом ошибки MS SQL в своем приложении - станет понятнее.
Ну, или профайлером лови.
11 июл 18, 13:55    [21562417]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
Alexander Us
Member

Откуда:
Сообщений: 1093
aleks222
Окромя "внешних таймаутов", есть "внутренние таймауты" самого сервера.
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-lock-timeout-transact-sql?view=sql-server-2017 ...

Залогил значение @@LOCK_TIMEOUT для коннекшина на целевую базу.
Выдаёт -1

Может есть ещё другие параметры для внутренних таймаутов?
11 июл 18, 14:45    [21562722]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
Alexander Us,

Ожидания сессии анализируйте - sys.dm_exec_session_wait_stats
Если версия не позволяет, то через extended events - https://blog.sqlauthority.com/2016/05/28/sql-server-finding-waits-session-extended-event-wait_info/
11 июл 18, 15:01    [21562807]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
Alexander Us
Member

Откуда:
Сообщений: 1093
invm,

Спасибо большое, буду копать.

Но может есть параметры, котрые влияют на время ожиданиий сессии?
Может их сразу можно подкрутить и посмотреть будет ли эффект?
11 июл 18, 15:15    [21562867]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Alexander Us,

Ставлю ежа, что sql здесь не при чём
11 июл 18, 15:18    [21562878]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
aleks222
Member

Откуда:
Сообщений: 850
Alexander Us
aleks222
Окромя "внешних таймаутов", есть "внутренние таймауты" самого сервера.
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-lock-timeout-transact-sql?view=sql-server-2017 ...

Залогил значение @@LOCK_TIMEOUT для коннекшина на целевую базу.
Выдаёт -1

Может есть ещё другие параметры для внутренних таймаутов?


Позор, Ватсон.
11 июл 18, 17:49    [21563612]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
aleks222
Member

Откуда:
Сообщений: 850
https://msdn.microsoft.com/ru-ru/library/system.data.sqlclient.sqlbulkcopy.bulkcopytimeout(v=vs.110).aspx
11 июл 18, 17:52    [21563622]     Ответить | Цитировать Сообщить модератору
 Re: Timeout: level 300  [new]
Alexander Us
Member

Откуда:
Сообщений: 1093
aleks222
Позор, Ватсон.

Холмс ну Вас с Вашими подколами, что Вы конкретно имеете ввиду?

А что касается SqlBulkCopy:

"Значение 0 означает отсутствие ограничений. Операция массового копирования будет находиться в состоянии ожидания бесконечно долго."
Это я знаю, так и установлено, я же написал.

Или я что то важное просмотрел?
11 июл 18, 18:31    [21563740]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить