powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отображение данных в Managment Studio
16 сообщений из 16, страница 1 из 1
Отображение данных в Managment Studio
    #39694163
SaorDual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
При выполнении продолжительного запроса в MSMS к большой таблице select top 1000000 * from <таблица в 100 млн.записей> результат начинает выводится сразу, но в строке состояние отображается "Выполнение запроса..." и меняется на "Запрос успешно выполнен" через 10-20 секунд. Т.е. часть данных была передана и отображена раньше чем выполнился сам запрос.
С чем это связано? И как можно сделать, чтобы отображение (передача данных) началась только после выполнения запроса?
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694174
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaorDualчтобы отображение (передача данных) началась только после выполнения запроса?На сервере слишком много свободных ресурсов и нужно их как-то задействовать?
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694186
SaorDual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*). Получается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется. Сам не понимаю как так происходит, но факт в этом
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694196
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaorDual,

А что, удалять сразу нельзя? Надо обязательно построчно на клиенте?
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694206
SaorDual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

нет нельзя. скажем так, у нас дайлер, т.е. 1 запись это звонок клиенту, надо посмотреть есть ли у нас свободные линии, произвести набор звонка на номер,и лишь после набора из колл-листа удалить данную запись
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694213
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaorDual,

Код: sql
1.
2.
3.
4.
5.
if object_id('tempdb..#t', 'U') is not null
 drop table #t;

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



ЗЫ: Ваш подход нежизнеспособен. Убедитесь в этом, как только возникнет потребность в нескольких обработчиках для "надо посмотреть есть ли у нас свободные линии, произвести набор звонка на номер,и лишь после набора из колл-листа удалить данную запись".
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694221
SaorDual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А первоначальный вопрос, можно ли каким либо, например, SET ... указать, чтобы данные начали передаваться по завершению запроса?
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694224
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaorDualможно ли каким либо, например, SET ... указать, чтобы данные начали передаваться по завершению запроса?Нет.
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694231
SaorDual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,

Спасибо
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694239
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaorDualinvm,

Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*).
На shell - на powershell? Как получаете данные? Классами ADO.Net? Если да - эти классы не умеют делать пейджинг, и отдавать данные порциями по мере поступления.
SaorDualПолучается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется.Сам не понимаю как так происходит, но факт в этом
Вообще в случаях дедлоков в первую очередь смотрят дедлок-графы. Без этого выстраивать свои собственные "получается" - это гадать на кофейной гуще.
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694241
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaorDualinvm,

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

Но МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок.
Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать.
Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его.
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694371
SaorDual
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сон Веры Павловны,

спасибо большое, дедлок-графы действительно помогли
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694386
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaorDualДобрый день!
С чем это связано? И как можно сделать, чтобы отображение (передача данных) началась только после выполнения запроса?

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

SELECT * FROM Таблица (NOLOCK)
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694546
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgНо МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок.
Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать.
Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его.

ещё, как вариант, можно в запросе сортировку добавить не по индексу :)
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694594
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShakillalexeyvgНо МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок.
Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать.
Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его.

ещё, как вариант, можно в запросе сортировку добавить не по индексу :)Хм, но это же увеличит нагрузку на сервер.
А чтение в память не повышает нагрузку ни на сервер, ни на клиент.
...
Рейтинг: 0 / 0
Отображение данных в Managment Studio
    #39694885
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgShakillпропущено...
ещё, как вариант, можно в запросе сортировку добавить не по индексу :)Хм, но это же увеличит нагрузку на сервер.
А чтение в память не повышает нагрузку ни на сервер, ни на клиент.
понимаю, это было скорее из области вредных советов ) хотя эффекта, требуемого автору, достичь можно
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Отображение данных в Managment Studio
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]