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

Откуда: Питер
Сообщений: 55
Всем привет.

Проблема такая. Есть приложение на C#, которое синхронизирует данные, объем может быть большой.
Выполняется такая строчка. (Пробовались и другие варианты)

SqlBulkCopy.WriteToServer(dataTable);

Если строчек в таблице 50, то работает нормально.
Если 100, то просто зависает в этой строчке.

При "других" вариантах (ExecuteNonQuery c SqlDbType.Structured) посмотрел команду в профайлере - ну один экрана текстового редактора для 50 строчек.

Таблица на сервере довольно простая, нет зависимостей, форейнкеев и т.д. Конкуренции на эту таблицу особых (или вообще) не должно быть - сервер тестовый. На других аналогичных таблицах тоже самое.

В чем может быть проблема? Куда смотреть, куда бежать? Что можно подкрутить? Я пока ума не приложу.

При выполнении следующей команды вижу:

SELECT wt.session_id, ot.task_state, wt.wait_type, wt.wait_duration_ms, wt.blocking_session_id, wt.resource_description, es.[host_name], es.[program_name]
FROM sys.dm_os_waiting_tasks wt INNER JOIN sys.dm_os_tasks ot ON ot.task_address = wt.waiting_task_address INNER JOIN sys.dm_exec_sessions es ON es.session_id = wt.session_id
WHERE es.is_user_process = 1

57 SUSPENDED ASYNC_NETWORK_IO 12572 NULL External ExternalResource=ASYNC_NETWORK_IO host_name .Net SqlClient Data Provider

В-общем, пока я в ступоре.
Заранее спасибо за предложения.
3 июн 15, 13:30    [17725085]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Glory
Member

Откуда:
Сообщений: 104760
ASYNC_NETWORK_IO - это сервер ждет, пока клиентское приложение удосужится забрать все запрошенные результаты
3 июн 15, 13:32    [17725098]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Glory,

Я проверю еще, но не пойму, почему это зависит от количества строк.
Приложению никакие результаты не нужны, ему только нужно "залить" данные на сервер.
3 июн 15, 13:53    [17725294]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shrek2
Я проверю еще, но не пойму, почему это зависит от количества строк.

Наверное потому, что количества строк зависит объем возвращаемых результатов ?
Буфер вывода у сервере не резиновый ведь

Shrek2
Приложению никакие результаты не нужны, ему только нужно "залить" данные на сервер.

"Не нужны" и "не возвращаются" - это разные вещи
3 июн 15, 13:55    [17725313]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Glory,

Странно все это.
SqlBulkCopy.WriteToServer или SqlCommand.ExecuteNonQuery - стандартные .NET классы и методы, предназначенные, чтобы ничего не возвращать.
Использую их всю свою сознательную жизнь - бывало и побольше данных, но с таким не сталкивался.
3 июн 15, 14:03    [17725381]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shrek2
SqlBulkCopy.WriteToServer или SqlCommand.ExecuteNonQuery - стандартные .NET классы и методы, предназначенные, чтобы ничего не возвращать.

Ага, ну совсем ничего
SqlCommand.ExecuteNonQuery
Executes a Transact-SQL statement against the connection and returns the number of rows affected.

Shrek2
Использую их всю свою сознательную жизнь - бывало и побольше данных, но с таким не сталкивался.

Вы хоть мониторили, какие команды поучает и выполняет сервер ?
3 июн 15, 18:50    [17727250]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Glory,

Профайлер не показывает запрос, когда он "виснет", но видно что Suspended.
Когда данных чуть меньше, запрос приходит такого вида:

declare @p3 someTableType
insert into @p3 values(
insert into @p3 values(
insert into @p3 values(
.... количество посылаемых строк
insert into @p3 values(

exec sp_executesql N'MERGE someTable as target USING @tableType AS source ON target.ID = source.ID
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT ...

До этого данный коннекшн выполнил (BatchCompleted) два запроса
Select Count и Select Max(...
Ничего подозрительного...

Уже много чего делал.
Использовал просто инсерты (не MERGE), BuklCopy и т.д.

Менял разные параметры, такой например

EXEC sp_configure 'max degree of parallelism', 1;
GO
RECONFIGURE WITH OVERRIDE;

На локальном сервере все работает - похоже на какие-то проблемы с конкретным сервером ((
4 июн 15, 18:51    [17732212]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shrek2
Профайлер не показывает запрос, когда он "виснет", но видно что Suspended.

А как можно показать событие окончание запроса, если он все еще выполняется ?

Shrek2
Когда данных чуть меньше, запрос приходит такого вида:

Приходит - это у вас что за событие ?

Shrek2
Использовал просто инсерты (не MERGE), BuklCopy и т.д.

И вы по прежнему уверяете, что куча insert, MERGE и прочих команд ничего не возвращает ?
4 июн 15, 19:15    [17732297]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Glory,

"Приходит" на сервер - это то, что я вижу в профайлере.

Я догадываюсь, что запросы возвращают - affected records и т.п. - для меня все это прозрачно, т.к. я использую .NET прослойку для доступа к данным. Там нет методов типа, "забери данные с сервера на клиент"

К сожалению, мне эти знание не помогает решить проблему. Подскажите на что обратить внимание, если знаете.
4 июн 15, 19:37    [17732397]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shrek2
"Приходит" на сервер - это то, что я вижу в профайлере.

Т.е. вы даже не знаете, какие события вы трассируете ?
Просто ткнули в какую то трассу ?
4 июн 15, 19:38    [17732403]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shrek2
Я догадываюсь, что запросы возвращают - affected records

Мда
4 июн 15, 19:39    [17732412]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Shrek2
Member

Откуда: Питер
Сообщений: 55
Glory,

Ну я не спец - просветите, что возвращает INSERT или MERGE?
4 июн 15, 20:12    [17732547]     Ответить | Цитировать Сообщить модератору
 Re: Проблема SUSPENDED task_state  [new]
Glory
Member

Откуда:
Сообщений: 104760
Shrek2
Glory,

Ну я не спец - просветите, что возвращает INSERT или MERGE?

например, все, что я напишу в триггере
4 июн 15, 20:13    [17732560]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить