Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Развейте сомнения, пож.!  [new]
ГуЗы
Guest
Всем доброго времени суток!
Предыстория.
Есть процедура. Ничего сложного, но в ней, в частности, есть такое:
truncate table Table1 
insert Table1
select ... from ....

и далее:
select ... from t1
left join Table1 on ...


Все бы ничего, но на самом деле эта процедура используется для формирования отчета_1 RS, в чем так же нет никакого криминала. Но этот отчет_1 - болванка, которая используется в другом отчете, где этот отчет_1 вложен 4 раза с различными наборами параметров.
Как ни странно, все работает и отчет строится за приемлемое время и, вроде, каждый в соответствии со своими параметрами.
А я никак не могу понять, почему?


К такой конструкции перешел после мучений с табличной переменной. Время выполнения отчета было непредсказуемо, то 1 мин, то 1 час и, понятно, зависело от состояния tempdb.

И, собственно вопрос:
По идее RS должен бы запустить все 4 варианта отчета каждый в своем потоке, и что там будет с Table1? Транзакциями не управляю, все по умолчанию.

Извиняйте за много букв.
18 авг 16, 10:34    [19555950]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
sti
Member

Откуда:
Сообщений: 769
ГуЗы,

а почему оно не должно по вашему работать то? Если я правильно понял, то вы 4 раза последовательно вызываете процедуру. Вот если её параллельно вызывать, тогда ой.

А вообще используйте временные таблицы вместо табличных переменных. Эта тема тут уже многократно обсуждалась.

PS
Вместо того чтобы описывать словами гораздо эффективнее код привести, выкинув оттуда несущественное.
18 авг 16, 10:48    [19556057]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
Гузы
Guest
sti,
Я не вызываю последовательно одну и ту же процедуру. Вызовы процедуры организует RS. Можно, конечно, предположить, что он все вложенные отчеты выполняет в одном потоке и последовательно, что, на мой взгляд, не логично.
18 авг 16, 11:04    [19556167]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
Гузы
sti,
Я не вызываю последовательно одну и ту же процедуру. Вызовы процедуры организует RS. Можно, конечно, предположить, что он все вложенные отчеты выполняет в одном потоке и последовательно, что, на мой взгляд, не логично.
Вроде да, в одном потоке. Но не уверен, тем более это может зависеть от версии RS, и от дизайна отчёта. Вы это легко можете посмотреть в профайлере.

ЗЫ. В RS много нелогичного :-)
18 авг 16, 11:07    [19556183]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
alexeyvg,

а хоть где то, сервер сам по себе организовывает параллельные расчёты?
18 авг 16, 11:17    [19556261]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
TaPaK
alexeyvg,

а хоть где то, сервер сам по себе организовывает параллельные расчёты?
Какой "сервер"? Сиквел? При выполнении запросов, если выбран параллельный план.

Насчёт SSRS - вроде нигде не организовывает. Но я его не настолько хорошо знаю, что бы точно утверждать.
18 авг 16, 11:47    [19556501]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
alexeyvg
TaPaK
alexeyvg,

а хоть где то, сервер сам по себе организовывает параллельные расчёты?
Какой "сервер"? Сиквел? При выполнении запросов, если выбран параллельный план.

Насчёт SSRS - вроде нигде не организовывает. Но я его не настолько хорошо знаю, что бы точно утверждать.

я про батчи
18 авг 16, 11:53    [19556539]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
TaPaK
alexeyvg
пропущено...
Какой "сервер"? Сиквел? При выполнении запросов, если выбран параллельный план.

Насчёт SSRS - вроде нигде не организовывает. Но я его не настолько хорошо знаю, что бы точно утверждать.

я про батчи
А, понятно.

Батчи, разумеется, выполняются параллельно, ну а сервер регулирует корректность распараллеливания механизмами блокировок/снапшот-образов.

Но тут тема конкретно про SSRS.

Вопрос в том, как отчётное приложение выполняет запросы к данным, параллельно или последовательно, и как это можно регулировать.

В общем, действительно странно, что при построении отчёта SSRS запросы не выполняются параллельно, или, по крайней мере, это не настраивается/не указывается в параметрах выполнения.

Обычная практика всё таки в параллельном обращении к данным, например, при выполнении пакета приложением SSIS, или при рендеринге страницы приложением IIS.
18 авг 16, 12:10    [19556652]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
o-o
Guest
alexeyvg
Вопрос в том, как отчётное приложение выполняет запросы к данным, параллельно или последовательно, и как это можно регулировать.

у Data Source в свойствах есть галочка (снята по умолчанию)
BOL
Use a single transaction when processing the queries
Select this option to indicate that datasets that use this data source are run in a single transaction against the database.
To include transactions for subreports that use the same data source,
set MergeTransactions to True in the subreport's Other properties section of the Properties pane.
если ее выставить, все датасеты выполняются последовательно и в 1 транзакции.
при снятой галочке параллельно, т.е. у меня была проблема, что первый датасет создавал нужную таблицу,
второй с ней что-то делал (у нас знают толк в извращениях)
так второй вылетал сразу с ошибкой, что таблицы нет.
галочка спасла.
18 авг 16, 12:48    [19556895]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
ГуЗы,

может все такие 4 раза используется заполненная однократно таблица? обычно как для этого ее и формируют
18 авг 16, 13:35    [19557313]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
o-o
у Data Source в свойствах есть галочка (снята по умолчанию)
BOL
Use a single transaction when processing the queries
Select this option to indicate that datasets that use this data source are run in a single transaction against the database.
To include transactions for subreports that use the same data source,
set MergeTransactions to True in the subreport's Other properties section of the Properties pane.
если ее выставить, все датасеты выполняются последовательно и в 1 транзакции.
при снятой галочке параллельно, т.е. у меня была проблема, что первый датасет создавал нужную таблицу,
А, понятно, спасибо.

Я в SSRS до таких деталей не доходил, не нужно было; ну и процедуры не рассчитавал только на одиночное последовательное выполнение...
18 авг 16, 14:31    [19558043]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
o-o
Guest
alexeyvg
Я в SSRS до таких деталей не доходил, не нужно было; ну и процедуры не рассчитавал только на одиночное последовательное выполнение...

да то ж у нас была супер-задача сделать из отчета обновлялку таблицы.
чтоб юзеры апдэйтили данные через отчет.
такое не каждому в голову придет
18 авг 16, 15:04    [19558325]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
ГуЗы
Guest
StarikNavy,
Получаю 4 различных отчета в итоге.
И для каждого свой собственный вариант заполнения таблицы. Впрочем, все это результат лени. Сделал один отчет. А юзера хотели 4 варианта этого отчета в одном флаконе в рассылке. Вот и пришлось слегка изовратиться.
о-о:
В свойствах Дата Источника: галка одной транзакции не установлена.
18 авг 16, 16:27    [19559043]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
ГуЗы
Guest
И небольшое уточнение. В вызывающем отчете вообще нет Sourse/Set
18 авг 16, 16:41    [19559165]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
Репортинг действительно выполняет последовательные вызовы.
18 авг 16, 17:19    [19559473]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
o-o
Guest
в случае с subreport вызываются последовательно,
ну т.е. я просто делаю sp: вставку в таблицу и вывод всего из нее,
так каждый последующий выводит строки,
вставленные предыдущими
18 авг 16, 17:34    [19559559]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
o-o
Guest
Владислав Колосов
Репортинг действительно выполняет последовательные вызовы.

Нет.
Создайте пустую таблицу dbo.t и отчет с двумя датасетами.
В первом датасете
if object_id ('dbo.t') is null create table dbo.t;
insert dbo.t values(1);
select * from dbo.t;

Во втором просто select * from dbo.t

Теперь в самом отчете 2 таблицы с данными из первого и второго датасетов

Запускаете в первый раз, получаете в первой таблице 1 строку с 1, во второй пусто.

Но это вас не убеждает и вы дропаете таблицу.
Запускаете снова, отчет валится с ошибкой второго датасета invalid object name dbo.t

Думаете, он проверяет до запуска вообще всего?
Нет.
Ставим галочку на датасорсе, чтобы выполнял в 1 транзакции.
Таблицы все еще нет, она дропнута.
Запустите снова, теперь нет ошибки и есть 2 таблицы, каждая с одной строкой
18 авг 16, 18:50    [19559839]     Ответить | Цитировать Сообщить модератору
 Re: Развейте сомнения, пож.!  [new]
ГуЗы
Guest
o-o
в случае с subreport вызываются последовательно...

А часом не проверяли, от чего зависит последовательность?
Что-то типа слева на право и сверху вниз?
Или каждый раз решать методом тыка?
19 авг 16, 09:20    [19561517]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить