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

Откуда:
Сообщений: 7
Например, клиент через выпадающий список запрашивает большой объём данных(примерно 3000 строк), получаем suspend в виде ASYNC NETWORK IO. Suspend пропадёт если прокрутить весь выпадающий список до конца и получить все данные. Также саспенда не будет вообще, если объём запрашиваемых данных например 2000 строк.

Что посоветуете, как исправлять?
6 ноя 17, 23:17    [20930982]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
ничего не делать.
вы еще откройте аксесс, запросите таблицу в млн строк,
а прокрутите всего пару страниц.
и будет ваша сессия висеть в suspended с ASYNC NETWORK IO угадайте сколько?
да хоть месяц, пока аксесс не закроют
6 ноя 17, 23:23    [20931008]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Closs
Member

Откуда:
Сообщений: 7
Yasha123, всё именно так, правда не миллион строк а 3т. Раньше было 2т строк и не было такой проблемы.
Разве нельзя как то оптимизировать?
6 ноя 17, 23:28    [20931015]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33262
Блог
Closs,

ASYNC NETWORK IO возникает, когда сеть тормозит, или клиент не может с достаточной скоростью обработать набор данных, в вашем случае, видимо, он и не обрабатывает их все, а только часть берет и ждет пользователя

то есть проблема в вашем клиенте, ковыряйте его
6 ноя 17, 23:36    [20931022]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Closs
Например, клиент через выпадающий список запрашивает большой объём данных(примерно 3000 строк), получаем suspend в виде ASYNC NETWORK IO. Suspend пропадёт если прокрутить весь выпадающий список до конца и получить все данные. Также саспенда не будет вообще, если объём запрашиваемых данных например 2000 строк.

Что посоветуете, как исправлять?

Наверное, клиент на C# плюс используется Entity Framework, а EF использует по дефолту "a loading strategy called Lazy Loading".
Отказаться от ToListAsync в пользу ToList, долго думать, что использовать в фильтрах. Наверное, функцию Take(numberOfrecords).
Серебряной пули нет.
6 ноя 17, 23:38    [20931025]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Closs
Member

Откуда:
Сообщений: 7
Критик, не-а, на сервере также.


Andy_OLAP, клиент у нас в виде access.
6 ноя 17, 23:43    [20931040]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Closs
Критик, не-а, на сервере также.


Andy_OLAP, клиент у нас в виде access.

А, ну это элементарно. Когда используете OpenRecordset - выбираете не дефолтный тип dbOpenDynaset (2), а dbOpenSnapshot (4).
6 ноя 17, 23:52    [20931048]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Closs,

сравнение 2 методов
статья про OpenRecordset
6 ноя 17, 23:54    [20931051]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Closs
Member

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

Так там вроде используется dbOpenSnapshot

+код
Private Function GetFilterRukovod(table As String, keyField As String, Caption As String) As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim ComboSource As String
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM " + table + " ORDER BY " + Caption, dbOpenSnapshot)
ComboSource = "*;Все;"
Do While Not rs.EOF
ComboSource = ComboSource + CStr(rs.Fields(keyField)) + ";" + rs.Fields(Caption) + ";"
rs.MoveNext
Loop
GetFilterRukovod = ComboSource
Set rs = Nothing
Set db = Nothing
End Function
7 ноя 17, 00:16    [20931080]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Closs,
А попробуйте так:
Используйте 2 Recordset, у того, что делает select * FROM " + table + " ORDER BY " + Caption, рекомендую поменять на select * from table, а далее сделать rs.Sort = Caption, затем перелить отсортированный rs в rs2, и из rs2 заполнить string.
7 ноя 17, 00:38    [20931099]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Closs,

И почему Dim rs As DAO.Recordset вместо Dim rs As ADO.Recordset?
7 ноя 17, 00:40    [20931104]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Closs,

И еще из хороших практик при работе с MS Access - используете ADO, который получает набор из вызова хранимой процедуры, получаете количество строк Count, прыгаете в конец вместо movenext и вычитываете в цикле в обратном направлении.
7 ноя 17, 00:47    [20931112]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Владислав Колосов
Member

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

на кой это нужно? Клиент сам решит - качать или нет. Оператор получает первые сто строк и больше ему не надо, он принял решение и закрыл форму, оставив миллион строк не востребованными. Не давайте советов по "улучшению", если не знаете - зачем автору нужно, тем более, называя это "хорошей практикой".
7 ноя 17, 11:00    [20931759]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7399
Closs,
автор
Что посоветуете, как исправлять?

ничего не надо исправлять в этом случае.
7 ноя 17, 11:07    [20931802]     Ответить | Цитировать Сообщить модератору
 Re: Запрос и ASYNC NETWORK IO  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Владислав Колосов
Оператор получает первые сто строк и больше ему не надо, он принял решение и закрыл форму, оставив миллион строк не востребованными

"получаем suspend в виде ASYNC NETWORK IO. Suspend пропадёт если прокрутить весь выпадающий список до конца и получить все данные" - не вижу здесь миллиона невостребованных строк. В выпадающий список через перебор циклом MoveNext идет ВСЕ из recordset. Для данной конкретной ситуации можно попробовать MoveLast и пробежаться по рекордсету в обратную сторону, разве нет?
7 ноя 17, 15:48    [20933195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить