Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
Добрый день! При выполнении продолжительного запроса в MSMS к большой таблице select top 1000000 * from <таблица в 100 млн.записей> результат начинает выводится сразу, но в строке состояние отображается "Выполнение запроса..." и меняется на "Запрос успешно выполнен" через 10-20 секунд. Т.е. часть данных была передана и отображена раньше чем выполнился сам запрос. С чем это связано? И как можно сделать, чтобы отображение (передача данных) началась только после выполнения запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 11:18 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
SaorDualчтобы отображение (передача данных) началась только после выполнения запроса?На сервере слишком много свободных ресурсов и нужно их как-то задействовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 11:27 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
invm, Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*). Получается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется. Сам не понимаю как так происходит, но факт в этом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 11:39 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
SaorDual, А что, удалять сразу нельзя? Надо обязательно построчно на клиенте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 11:47 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
invm, нет нельзя. скажем так, у нас дайлер, т.е. 1 запись это звонок клиенту, надо посмотреть есть ли у нас свободные линии, произвести набор звонка на номер,и лишь после набора из колл-листа удалить данную запись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 11:51 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
SaorDual, Код: sql 1. 2. 3. 4. 5. ЗЫ: Ваш подход нежизнеспособен. Убедитесь в этом, как только возникнет потребность в нескольких обработчиках для "надо посмотреть есть ли у нас свободные линии, произвести набор звонка на номер,и лишь после набора из колл-листа удалить данную запись". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 12:00 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
А первоначальный вопрос, можно ли каким либо, например, SET ... указать, чтобы данные начали передаваться по завершению запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 12:10 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
SaorDualможно ли каким либо, например, SET ... указать, чтобы данные начали передаваться по завершению запроса?Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 12:12 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
invm, Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 12:23 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
SaorDualinvm, Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*). На shell - на powershell? Как получаете данные? Классами ADO.Net? Если да - эти классы не умеют делать пейджинг, и отдавать данные порциями по мере поступления. SaorDualПолучается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется.Сам не понимаю как так происходит, но факт в этом Вообще в случаях дедлоков в первую очередь смотрят дедлок-графы. Без этого выстраивать свои собственные "получается" - это гадать на кофейной гуще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 12:30 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
SaorDualinvm, Нет, дело в том, что у меня есть код на shell. Смысл в следующем - отправляем запрос в БД (*), получаем данные, в цикле в shell-е начинаем обработку каждой записи и удаляем эту запись из таблицы к которой ранее был запрос (*). Так вот у нас при определенных условиях (select top 2500 ... работает, а вот select top 3250... уже нет) начинает вылезать взаимоблокировка. Идем на сервер и видим, что команда на удаление записи заблокирована сеансом (*). Получается, что часть данных передалось и началась обработка, но запрос ещё не завершился и при попытке удалитьзапись которую отобрали он взаимоблокируется. Сам не понимаю как так происходит, но факт в этомЭто сделано а) для повышения быстродействия б) для получения возможности получать большие рекордсеты. Но МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок. Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать. Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 12:35 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
Сон Веры Павловны, спасибо большое, дедлок-графы действительно помогли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 15:08 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
SaorDualДобрый день! С чем это связано? И как можно сделать, чтобы отображение (передача данных) началась только после выполнения запроса? Вам же не нужно именно отображение. Вам нужно чтобы SELECT не блокировал таблицу при выполнении. Ну и скажите ему (NOLOCK) SELECT * FROM Таблица (NOLOCK) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 15:16 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
alexeyvgНо МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок. Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать. Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его. ещё, как вариант, можно в запросе сортировку добавить не по индексу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 18:31 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
ShakillalexeyvgНо МС оставила возможность делать так, как вы хотите, то есть начинать обрабатывать записи после выполнения всего запроса и снятия блокировок. Для этого нужно просто считать полученный рекордсет в память, закрыть его, а потом уже начать обрабатывать. Вообще говоря, это метод больше подходит для OLTP систем, так что мы всегда использовали его. ещё, как вариант, можно в запросе сортировку добавить не по индексу :)Хм, но это же увеличит нагрузку на сервер. А чтение в память не повышает нагрузку ни на сервер, ни на клиент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2018, 21:38 |
|
||
|
Отображение данных в Managment Studio
|
|||
|---|---|---|---|
|
#18+
alexeyvgShakillпропущено... ещё, как вариант, можно в запросе сортировку добавить не по индексу :)Хм, но это же увеличит нагрузку на сервер. А чтение в память не повышает нагрузку ни на сервер, ни на клиент. понимаю, это было скорее из области вредных советов ) хотя эффекта, требуемого автору, достичь можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2018, 12:47 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39694221&tid=1689191]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
37ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 325ms |

| 0 / 0 |
