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

Откуда:
Сообщений: 684
Добрый день.

Мне нужно получить в переменную (char или xml) план запроса, находящегося в другой переменной (char), без выполнения этого запроса. Буду благодарен за описание способа реализации.
7 окт 15, 09:21    [18244853]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
.Евгений
без выполнения этого запроса.

если сервер ничего не выполняет, то он не может что-то сделать с переменной
7 окт 15, 09:25    [18244862]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2361
Glory
.Евгений
без выполнения этого запроса.

если сервер ничего не выполняет, то он не может что-то сделать с переменной

Да ладно, неужели это нельзя сделать?
7 окт 15, 09:30    [18244880]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
.Евгений
Member

Откуда:
Сообщений: 684
Glory
если сервер ничего не выполняет, то он не может что-то сделать с переменной

"...без выполнения этого (т.е. план которого требуется получить) запроса".
7 окт 15, 09:31    [18244887]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
dma_caviar
Glory
пропущено...

если сервер ничего не выполняет, то он не может что-то сделать с переменной

Да ладно, неужели это нельзя сделать?

Что для вас есть "сделать" ?
Запустить клиентское приложение, в котором выполнить последовательно SET SHOWPLAN_TEXT ON и select * from mytable, и прочитать результат - это сделать или нет ?

Сообщение было отредактировано: 7 окт 15, 09:33
7 окт 15, 09:32    [18244892]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
.Евгений
Glory
если сервер ничего не выполняет, то он не может что-то сделать с переменной

"...без выполнения этого (т.е. план которого требуется получить) запроса".

Вы в курсе, как получить план просто для запроса ?
7 окт 15, 09:33    [18244898]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
.Евгений
Member

Откуда:
Сообщений: 684
Glory
Вы в курсе, как получить план просто для запроса ?

Уточняю задачу: получить план средствами только данного сервера БД (без использования внешних средств).
7 окт 15, 09:36    [18244908]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
.Евгений
Glory
Вы в курсе, как получить план просто для запроса ?

Уточняю задачу: получить план средствами только данного сервера БД (без использования внешних средств).

Уточняю вопрос - вы в курсе, какими командами получают план выполнения ? И где появляется этот план ?
7 окт 15, 09:38    [18244920]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
.Евгений
Уточняю задачу: получить план средствами только данного сервера БД (без использования внешних средств).

чт о такое внешние средства то в вашем понимании ? особенно касательно плана ?
7 окт 15, 09:40    [18244930]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2361
Походу, действительно нельзя.
7 окт 15, 09:43    [18244940]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
declare @query_plan xml, @query varchar(max) = 'select * from sys.objects;',
        @marker varchar(50) = '/*' + cast(newid() as varchar(36)) + '*/';

exec('set noexec on; ' + @marker + @query);

select
 @query_plan = qp.query_plan
from
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_sql_text(cp.plan_handle) t cross apply
 sys.dm_exec_query_plan(cp.plan_handle) qp
where
 t.text like '%' + @marker + '%';

select @query_plan;
7 окт 15, 09:46    [18244961]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
.Евгений
Member

Откуда:
Сообщений: 684
Господа, я задал один вопрос, вы мне - уже два. Извините, но я все-таки хочу получить ответ, а не отвечать самому.
Maxx
чт о такое внешние средства то в вашем понимании ? особенно касательно плана ?

Очень философский вопрос. Попробую ответить от противного: мне нужно описать способ, которым скрипт T-SQL может получить в переменную план другого скрипта SQL, не исполняя этот другой скрипт.
Glory
Уточняю вопрос - вы в курсе, какими командами получают план выполнения ? И где появляется этот план ?

set showplan..., план появляется в оптимизаторе СУБД.
invm

Большое спасибо, про noexec почему-то не подумал.
7 окт 15, 09:55    [18245001]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
Glory
Member

Откуда:
Сообщений: 104751
.Евгений
план появляется в оптимизаторе СУБД.

При set showplan план не появляется в оптимизаторе
7 окт 15, 09:56    [18245012]     Ответить | Цитировать Сообщить модератору
 Re: Получение плана запроса  [new]
dma_caviar
Member

Откуда: https://itproduct.ru
Сообщений: 2361
invm
declare @query_plan xml, @query varchar(max) = 'select * from sys.objects;',
        @marker varchar(50) = '/*' + cast(newid() as varchar(36)) + '*/';

exec('set noexec on; ' + @marker + @query);

select
 @query_plan = qp.query_plan
from
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_sql_text(cp.plan_handle) t cross apply
 sys.dm_exec_query_plan(cp.plan_handle) qp
where
 t.text like '%' + @marker + '%';

select @query_plan;


Вот так быстрее на много получается)
exec(@marker + ' set noexec on; ' + @query);
...
where t.text like @marker + '%';
7 окт 15, 10:02    [18245048]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить