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

Откуда:
Сообщений: 34
Добрый день!
При выполнении продолжительного запроса в MSMS к большой таблице select top 1000000 * from <таблица в 100 млн.записей> результат начинает выводится сразу, но в строке состояние отображается "Выполнение запроса..." и меняется на "Запрос успешно выполнен" через 10-20 секунд. Т.е. часть данных была передана и отображена раньше чем выполнился сам запрос.
С чем это связано? И как можно сделать, чтобы отображение (передача данных) началась только после выполнения запроса?
28 авг 18, 11:18    [21655860]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
SaorDual
чтобы отображение (передача данных) началась только после выполнения запроса?
На сервере слишком много свободных ресурсов и нужно их как-то задействовать?
28 авг 18, 11:27    [21655878]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
SaorDual
Member

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

Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*). Получается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется. Сам не понимаю как так происходит, но факт в этом
28 авг 18, 11:39    [21655903]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
SaorDual,

А что, удалять сразу нельзя? Надо обязательно построчно на клиенте?
28 авг 18, 11:47    [21655916]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
SaorDual
Member

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

нет нельзя. скажем так, у нас дайлер, т.е. 1 запись это звонок клиенту, надо посмотреть есть ли у нас свободные линии, произвести набор звонка на номер,и лишь после набора из колл-листа удалить данную запись
28 авг 18, 11:51    [21655931]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
SaorDual,

if object_id('tempdb..#t', 'U') is not null
 drop table #t;

select top (100000) * into #t from <таблица в 100 млн.записей>;
select * from #t;


ЗЫ: Ваш подход нежизнеспособен. Убедитесь в этом, как только возникнет потребность в нескольких обработчиках для "надо посмотреть есть ли у нас свободные линии, произвести набор звонка на номер,и лишь после набора из колл-листа удалить данную запись".
28 авг 18, 12:00    [21655944]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
SaorDual
Member

Откуда:
Сообщений: 34
А первоначальный вопрос, можно ли каким либо, например, SET ... указать, чтобы данные начали передаваться по завершению запроса?
28 авг 18, 12:10    [21655961]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
invm
Member

Откуда: Москва
Сообщений: 9344
SaorDual
можно ли каким либо, например, SET ... указать, чтобы данные начали передаваться по завершению запроса?
Нет.
28 авг 18, 12:12    [21655967]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
SaorDual
Member

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

Спасибо
28 авг 18, 12:23    [21655981]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
Сон Веры Павловны
Member

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

Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*).

На shell - на powershell? Как получаете данные? Классами ADO.Net? Если да - эти классы не умеют делать пейджинг, и отдавать данные порциями по мере поступления.
SaorDual
Получается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется.Сам не понимаю как так происходит, но факт в этом

Вообще в случаях дедлоков в первую очередь смотрят дедлок-графы. Без этого выстраивать свои собственные "получается" - это гадать на кофейной гуще.
28 авг 18, 12:30    [21655993]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
alexeyvg
Member

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

Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*). Получается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется. Сам не понимаю как так происходит, но факт в этом
Это сделано а) для повышения быстродействия б) для получения возможности получать большие рекордсеты.

Но МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок.
Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать.
Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его.
28 авг 18, 12:35    [21655999]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
SaorDual
Member

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

спасибо большое, дедлок-графы действительно помогли
28 авг 18, 15:08    [21656342]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
AndrF
Member

Откуда:
Сообщений: 2194
SaorDual
Добрый день!
С чем это связано? И как можно сделать, чтобы отображение (передача данных) началась только после выполнения запроса?


Вам же не нужно именно отображение. Вам нужно чтобы SELECT не блокировал таблицу при выполнении. Ну и скажите ему (NOLOCK)

SELECT * FROM Таблица (NOLOCK)
28 авг 18, 15:16    [21656367]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
alexeyvg
Но МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок.
Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать.
Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его.


ещё, как вариант, можно в запросе сортировку добавить не по индексу :)
28 авг 18, 18:31    [21656759]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
Shakill
alexeyvg
Но МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок.
Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать.
Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его.


ещё, как вариант, можно в запросе сортировку добавить не по индексу :)
Хм, но это же увеличит нагрузку на сервер.
А чтение в память не повышает нагрузку ни на сервер, ни на клиент.
28 авг 18, 21:38    [21656926]     Ответить | Цитировать Сообщить модератору
 Re: Отображение данных в Managment Studio  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
alexeyvg
Shakill
пропущено...
ещё, как вариант, можно в запросе сортировку добавить не по индексу :)
Хм, но это же увеличит нагрузку на сервер.
А чтение в память не повышает нагрузку ни на сервер, ни на клиент.

понимаю, это было скорее из области вредных советов ) хотя эффекта, требуемого автору, достичь можно
29 авг 18, 12:47    [21657490]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить