powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SSIS. Увеличилось время работы Data Flow Task.
13 сообщений из 38, страница 2 из 2
SSIS. Увеличилось время работы Data Flow Task.
    #39791136
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,

Это как раз проявляется в том случае, когда происходит nested loop, хотя уже напрашивается HASH JOIN.
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791559
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,
После очистки кеша, я запустил процедуру из SSMS. Вот что получилось:
Код: sql
1.
2.
3.
4.
SELECT	*  
FROM	sys.objects 
WHERE	type = 'P' AND
	QUOTENAME( SCHEMA_NAME ( schema_id ) ) + '.' + QUOTENAME( name ) = '[etl].[sp_Get_Sale]'


name object_id principal_id schema_id parent_object_id type type_desc create_date modify_date is_ms_shipped is_published is_schema_publishedsp_Get_Sale 2037582297 NULL 5 0 P SQL_STORED_PROCEDURE 2018-04-27 16:26:37.643 2019-03-26 11:30:40.250 0 0 0
Код: sql
1.
2.
3.
SELECT	*
FROM	[sys].[dm_exec_procedure_stats]
WHERE	object_id = 2037582297


database_id object_id type type_desc sql_handle plan_handle cached_time last_execution_time execution_count total_worker_time last_worker_time min_worker_time max_worker_time total_physical_reads last_physical_reads min_physical_reads max_physical_reads total_logical_writes last_logical_writes min_logical_writes max_logical_writes total_logical_reads last_logical_reads min_logical_reads max_logical_reads total_elapsed_time last_elapsed_time min_elapsed_time max_elapsed_time10 2037582297 P SQL_STORED_PROCEDURE 0x03000A00D9097379CBB2BD001CAA00000100000000000000 0x05000A00D90973794081933E0E0000000000000000000000 2019-03-26 11:31:48.977 2019-03-26 11:31:48.987 1 30181726 30181726 30181726 30181726 94552 94552 94552 94552 11411 11411 11411 11411 5845485 5845485 5845485 5845485 30997773 30997773 30997773 30997773
Код: sql
1.
2.
3.
SELECT *
FROM sys.dm_exec_cached_plans cp
WHERE	plan_handle = 0x05000A00D90973794081933E0E0000000000000000000000


bucketid refcounts usecounts size_in_bytes memory_object_address cacheobjtype objtype plan_handle pool_id34866 2 1 2547712 0x0000000E3E938060 Compiled Plan Proc 0x05000A00D90973794081933E0E0000000000000000000000 1

Код: sql
1.
2.
SELECT	*
FROM	sys.dm_exec_plan_attributes (0x05000A00D90973794081933E0E0000000000000000000000)  



attribute value is_cache_keyset_options 4345 1objectid 2037582297 1dbid 10 1dbid_execute 10 1user_id 5 1language_id 0 1date_format 1 1date_first 7 1compat_level 100 1status 0 1required_cursor_options 0 1acceptable_cursor_options 0 1merge_action_type 0 1is_replication_specific 0 1optional_spid 0 1optional_clr_trigger_dbid 0 1optional_clr_trigger_objid 0 1inuse_exec_context 0 0free_exec_context 1 0hits_exec_context 0 0misses_exec_context 1 0removed_exec_context 0 0inuse_cursors 0 0free_cursors 0 0hits_cursors 0 0misses_cursors 0 0removed_cursors 0 0sql_handle NULL 0 А запрос
Код: sql
1.
2.
3.
4.
SELECT TOP 10 cp.cacheobjtype, cp.objtype, cp.plan_handle, t.text
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) t
WHERE t.text LIKE '%sp_Get_Sale%'

возвратил cacheobjtype objtype plan_handleCompiled Plan Proc 0x05000A00D90973794081933E0E0000000000000000000000
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791563
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А после запуска из SSIS. На момент сбора статистик он еще выполнялся
Код: sql
1.
2.
3.
4.
SELECT TOP 10 cp.cacheobjtype, cp.objtype, cp.plan_handle, t.text
FROM sys.dm_exec_cached_plans cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) t
WHERE t.text LIKE '%sp_Get_Sale%'

cacheobjtype objtype plan_handle textCompiled Plan Proc 0x05000A00D90973794081933E0E0000000000000000000000 CREATE PROCEDURE [etl].[sp_Get_Sale] ...Compiled Plan Prepared 0x06000A003AC0EC2040A125FF040000000000000000000000(@P1 datetime2(0);@P2 datetime2(0);@P3 smallint);EXEC [etl].[sp_Get_Sale] @P1; @P2; @P3
Код: sql
1.
2.
3.
4.
SELECT	*  
FROM	sys.objects 
WHERE	type = 'P' AND
	QUOTENAME( SCHEMA_NAME ( schema_id ) ) + '.' + QUOTENAME( name ) = '[etl].[sp_Get_Sale]'


name object_id principal_id schema_id parent_object_id type type_desc create_date modify_date is_ms_shipped is_published is_schema_publishedsp_Get_Sale 2037582297 NULL 5 0 P SQL_STORED_PROCEDURE 2018-04-27 16:26:37.643 2019-03-26 11:30:40.250 0 0 0
Код: sql
1.
2.
3.
4.
SELECT	*
FROM	[sys].[dm_exec_procedure_stats]
WHERE	object_id = 2037582297
-- количество plan_handle у процедуры не изменилось


database_id object_id type type_desc sql_handle plan_handle cached_time last_execution_time execution_count total_worker_time last_worker_time min_worker_time max_worker_time total_physical_reads last_physical_reads min_physical_reads max_physical_reads total_logical_writes last_logical_writes min_logical_writes max_logical_writes total_logical_reads last_logical_reads min_logical_reads max_logical_reads total_elapsed_time last_elapsed_time min_elapsed_time max_elapsed_time10 2037582297 P SQL_STORED_PROCEDURE 0x03000A00D9097379CBB2BD001CAA00000100000000000000 0x05000A00D90973794081933E0E0000000000000000000000 2019-03-26 11:31:48.977 2019-03-26 11:31:48.987 1 30181726 30181726 30181726 30181726 94552 94552 94552 94552 11411 11411 11411 11411 5845485 5845485 5845485 5845485 30997773 30997773 30997773 30997773
Код: sql
1.
2.
3.
SELECT *
FROM sys.dm_exec_cached_plans cp
WHERE	plan_handle = 0x06000A003AC0EC2040A125FF040000000000000000000000


bucketid refcounts usecounts size_in_bytes memory_object_address cacheobjtype objtype plan_handle pool_id22449 2 1 16384 0x00000004FF25A060 Compiled Plan Prepared 0x06000A003AC0EC2040A125FF040000000000000000000000 1
Код: sql
1.
2.
3.
SELECT	*
FROM	sys.dm_exec_plan_attributes (0x06000A003AC0EC2040A125FF040000000000000000000000)
-- А здесь видно, что у данного plan_handle, другой объект 


attribute value is_cache_keyset_options 249 1objectid 552386618 1dbid 10 1dbid_execute 0 1user_id -2 1language_id 0 1date_format 1 1date_first 7 1compat_level 100 1status 0 1required_cursor_options 0 1acceptable_cursor_options 0 1merge_action_type 0 1is_replication_specific 0 1optional_spid 0 1optional_clr_trigger_dbid 0 1optional_clr_trigger_objid 0 1inuse_exec_context 1 0free_exec_context 0 0hits_exec_context 0 0misses_exec_context 1 0removed_exec_context 0 0inuse_cursors 0 0free_cursors 0 0hits_cursors 0 0misses_cursors 0 0removed_cursors 0 0sql_handle 0x01000A003AC0EC20707926050A0000000000000000000000 0 Во вложении файл с планом, но он странный
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791566
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

вам нужна два раза ее запустить, один раз из ssms, второй раз вашим ssis пакетом (или где там у вас тормозит).

и в процедурном кэше искать не по тексту LIKE '%sp_Get_Sale%', а по sys.dm_exec_plan_attributes where attribute = 'objectid' and value = object_id('имя вашей хранимки')
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791612
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.[plan_handle], pp.[query_plan] 
from sys.dm_exec_cached_plans p
    cross apply sys.dm_exec_query_plan(p.plan_handle) pp
    cross apply sys.dm_exec_plan_attributes (p.plan_handle) pp2
where pp2.attribute = 'objectid'
and cast(pp2.value as int) = object_id('etl.sp_Get_Sale', 'P')
option (recompile);

Пока такой запрос возвращает, план полученный из SSMS.
Запрос и SSIS еще выполняется.

В предыдущем моем посте выведено вся "статистика" , которую получили при запуске из SSIS.
А именно вот plan_handle
cacheobjtype objtype plan_handle textCompiled Plan Prepared 0x06000A003AC0EC2040A125FF040000000000000000000000 (@P1 datetime2(0);@P2 datetime2(0);@P3 smallint);EXEC [etl].[sp_Get_Sale] @P1; @P2; @P3
А также, что он привязан к объекту objectid = 552386618
Для этого объекта запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
select p.[plan_handle], pp.[query_plan] 
from sys.dm_exec_cached_plans p
    cross apply sys.dm_exec_query_plan(p.plan_handle) pp
    cross apply sys.dm_exec_plan_attributes (p.plan_handle) pp2
where pp2.attribute = 'objectid'
and cast(pp2.value as int) = 552386618
option (recompile);

возвращает "странный" план, который я выложил в предыдущем посте
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791646
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select
 qp.query_plan
from
 sys.dm_exec_procedure_stats ps cross apply
 sys.dm_exec_query_plan(ps.plan_handle) qp
where
 ps.database_id = db_id('MyDB') and
 ps.object_id = object_id('MyProc');
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791751
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,
Такой запрос возвращает план, с plan_handle = 0x05000A00D90973794081933E0E0000000000000000000000.
Он получился при запуске моей процедуры из SSMS и с ним проблемы нет. Он привязан к объекту с object_id = 2037582297

Запуск SSIS-пакета добавил в sys.dm_exec_cached_plans cp еще одну запись, у которой
plan_handle = 0x06000A003AC0EC2040A125FF040000000000000000000000
Выборка из sys.dm_exec_sql_text с последним хендлером возвращает такой запрос
Код: sql
1.
(@P1 datetime2(0),@P2 datetime2(0),@P3 smallint)EXEC [etl].[sp_Get_Sale] @P1, @P2, @P3


Из sys.dm_exec_plan_attributes вижу, что данный план привязан к объекту object_id = 552386618,
а это уже не моя процедура.
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791800
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

не путайте планы, под хранимую процедуру (именно под сам модуль) и план батча который содержит код запуска хп. это разные планы.


я уже уточнил вам почему не следует использовать поиск по dm_exec_cached_plans + dm_exec_sql_text, он вам даст план батча и план хранимки их сравнивать не нужно.

вот для примера
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create or alter procedure [sp_test]
as
select * from master.dbo.spt_values where 1= 0
go

dbcc freeproccache;
go

--запустить пару раз
set arithabort on;
select 1 from master.dbo.spt_values
exec sp_test
go

set arithabort off;
select 1 from master.dbo.spt_values
exec sp_test;
go
--//запустить пару раз



и потом сравните результаты:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select p.plan_handle, pp.query_plan, t.text from sys.dm_exec_cached_plans p
cross apply sys.dm_exec_sql_text(p.plan_handle) t
outer apply sys.dm_exec_query_plan(p.plan_handle) pp
where t.text like '%sp_test%'
option (recompile);

select p.plan_handle, ppp.query_plan
from sys.dm_exec_cached_plans p
    cross apply sys.dm_exec_plan_attributes(p.plan_handle) pp
    cross apply sys.dm_exec_query_plan(p.plan_handle) ppp
where pp.attribute = 'objectid'
  and try_cast(pp.value as int) = object_id('sp_test', 'P')
option (recompile)
go



потом их последнего резалтсета возьмите два хендла:
Код: sql
1.
2.
3.
4.
5.
6.
select * from sys.dm_exec_plan_attributes(0x05000600346B784420CAB3BFA000000001000000000000000000000000000000000000000000000000000000) where attribute in ('sql_handle', 'set_options', 'user_id', 'date_format', 'date_first')
select * from sys.dm_exec_plan_attributes(0x05000600346B7844C0C2B3BFA000000001000000000000000000000000000000000000000000000000000000) where attribute in ('sql_handle', 'set_options', 'user_id', 'date_format', 'date_first')

select * from sys.dm_exec_plan_attributes(0x05000600346B784420CAB3BFA000000001000000000000000000000000000000000000000000000000000000) where attribute in ('sql_handle', 'set_options', 'user_id', 'date_format', 'date_first')
except
select * from sys.dm_exec_plan_attributes(0x05000600346B7844C0C2B3BFA000000001000000000000000000000000000000000000000000000000000000) where attribute in ('sql_handle', 'set_options', 'user_id', 'date_format', 'date_first')



и сравните, у них sql_handle будет один и тотже, а вот set_options будут различаться
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791801
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

invm вам кстати компактней написал как получить только планы вашей хранимки. его запрос вам сколько строк возвращает?
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39791812
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

хотя я уже по вашим скринам видно что для исполнения SSIS пакета ARITHABORT выключен.

попробуйте в Execute-SQL task пакета добавить SET ARITHABORT ON;

или наоборот в SSMS SET ARITHABORT OFF и выполните процедуру, посмотрите изменится в плане алгоритмы соединений.
что еще заметил: у вас план для SSIS пакета зависим от пользователя user_id = 5 это id конкретного пользователя БД, овнера схемы etl.

вам по хорошему еще надо моделировать запуск из под идентичных пользователей.
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39792284
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffYagrus2,

не путайте планы, под хранимую процедуру (именно под сам модуль) и план батча который содержит код запуска хп. это разные планы.
я уже уточнил вам почему не следует использовать поиск по dm_exec_cached_plans + dm_exec_sql_text, он вам даст план батча и план хранимки их сравнивать не нужно.
Спасибо, с этим разобрался!
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39792298
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffYagrus2,

invm вам кстати компактней написал как получить только планы вашей хранимки. его запрос вам сколько строк возвращает?
Возвращается две строки.
А как понять, какой из планов используется во время выполнения конкретного батча?
То есть, у процедуры есть два плана. Пусть я запустил из SSIS-пакет. Как понять какой из планов он выбрал?
...
Рейтинг: 0 / 0
SSIS. Увеличилось время работы Data Flow Task.
    #39792301
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ffYagrus2,

хотя я уже по вашим скринам видно что для исполнения SSIS пакета ARITHABORT выключен.

Да, вы правы. Влияет настройка ARITHABORT
...
Рейтинг: 0 / 0
13 сообщений из 38, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SSIS. Увеличилось время работы Data Flow Task.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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