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

Откуда:
Сообщений: 17
можно ли наблюдать каким то образом последовательность действий которую SQL Server query executer выполняет в соответствии с estimated plan (его частей) в данный момент времени?
Например у меня есть простой запрос который работает уже в течение 5 минут. И у меня есть его estimated plan в основном состоящий из 3-х основных частей: как clustered index seek по одной из таблиц соединения,
table scan для второй таблицы в соединении и nested loops join operation, которая работает с двумя входными наборами строк.
можно ли как-то выяснить, какие именно части estimated exec planа исполняются в настоящее время - в эту минуту, к примеру, чтение диапазона страниц данных #x-#y используя кластерный индекс и / или сравнивает такую то строку одной таблицы с строкой #Х другой?
или мои вопросы не имеют смысла?
21 ноя 11, 18:01    [11633983]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
kimi,

Можно, если у вас есть исходники сиквела и вы пройдетесь по нему дебагером с точками останова =)
Если у вас есть "долгий" запрос, и при этом план не вызывает нареканий, то наверное стоит посмотреть на статистики I/O, сколько чтений, сколько физических чтений, сколько процессора тратится, ну и анализ различных системных представлений никто не отменял, например ожиданий.
21 ноя 11, 19:19    [11634324]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
guest33333
Guest
да... вот в тоаде на оракле я наблюдал такую вещь!! Видно что сейчас вот скан такой-то таблицы идет, а сейчас вот сортировка пошла. В сиквеле подобного не видел
21 ноя 11, 20:06    [11634487]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Некоторые вещи делаются параллельно и/или одновременно, т.е. не последовательно.
loop: берём сроку из первой, затем из второй, затем из 3-ей, ... следующую строку опять из первой ... за доли секунды
hash: может строится одновременно по каждой табле/индексу и затем соединяться
Это не говоря, что парралельно идёт и считывание одних страниц с диска и "разбор" строк в других страницах
И процесс построение результата может ждать процесса считывания данных с дисков или разблокировки данных.

Т.е. не мечтайте что там всё так просто: аля A -> B -> C.

Можно посмотреть текущий набор заблокированнх строк/страниц, набор страниц в оперативе. Да много чё можно, только толк не от каждого есть.
Если проблемы, то надо искать проблемные места тупо, читая аттрибуты плана (результирующего - с рельными данными по размерам и количеству) и локировки (системы, данных, объектов).

Тут на форуме много раз подымалось, и приводились запросы для получения необходимых данных.
Типа этого: 11313410
+ Дополнение к нему
ALTER FUNCTION [dbo].[fnLockInfo] (
	 @session_id SmallInt
	,@request_id Int
) RETURNS Xml BEGIN RETURN
	(SELECT L.resource_type
		+ IsNull('/' + NullIf(L.resource_subtype,''),'')AS [@Type]
		,L.request_mode					AS [@Mode]
		,DB_Name(L.resource_database_id)
		+ Coalesce('.' + H.ObjectName + IsNull('(' + H.IndexName + ')','')
			  ,'.' + O.ObjectName,'')		AS [@Object]
		,CASE	L.resource_type		--  L.resource_description
			WHEN 'FILE'		THEN 'file_id='		+ D.Descr			+ IsNull('(' + F.name + ')','')
			WHEN 'OBJECT'		THEN 'object_id='	+ D.Descr
			WHEN 'PAGE'		THEN 'file_id='		+ SubString(D.Descr,1,D.Pos1-1) + IsNull('(' + F.name + ')','') + ';page_in_file='	+ SubString(D.Descr,D.Pos1+1,D.[Len]-D.Pos1)
			WHEN 'KEY'		THEN 'hash_value='	+ D.Descr
			WHEN 'EXTENT'		THEN 'file_id='		+ SubString(D.Descr,1,D.Pos1-1) + IsNull('(' + F.name + ')','') + ';page_in_files='	+ SubString(D.Descr,D.Pos1+1,D.[Len]-D.Pos1)
			WHEN 'RID'		THEN 'file_id='		+ SubString(D.Descr,1,D.Pos1-1) + IsNull('(' + F.name + ')','') + ';page_in_file='	+ SubString(D.Descr,D.Pos1+1,D.Pos1-1) + ';row_on_page='+ SubString(D.Descr,D.Pos2+1,D.[Len]-D.Pos2)
			WHEN 'APPLICATION'	THEN 'DbPrincipalId='	+ SubString(D.Descr,1,D.Pos1-1)					 + ';'			+ SubString(D.Descr,D.Pos1+1,D.Pos1-1) + ';hash_value='	+ SubString(D.Descr,D.Pos2+1,D.[Len]-D.Pos2)
			ELSE D.Descr		END		AS [@Info]
	FROM	          sys.dm_tran_locks	L
		OUTER APPLY (SELECT	 RTrim(NullIf(L.resource_description,''))					AS Descr
					,CharIndex(':',L.resource_description + ':')					AS Pos1
					,CharIndex(':',L.resource_description,CharIndex(':',L.resource_description) + 1)AS Pos2
					,Len(L.resource_description)							AS [Len]
					)	D
		LEFT JOIN sys.master_files	F ON F.database_id	= L.resource_database_id AND F.[file_id]= CASE WHEN L.resource_type IN ('FILE','PAGE','EXTENT','RID')	THEN Convert(Int,SubString(D.Descr,1,D.Pos1-1)) END
		LEFT JOIN dbo.vwAllObjects	O ON O.[DataBase]	= L.resource_database_id AND O.[Object]	= CASE WHEN L.resource_type IN ('OBJECT')			THEN L.resource_associated_entity_id END
		LEFT JOIN dbo.vwAllHobts	H ON H.[DataBase]	= L.resource_database_id AND H.Hobt	= CASE WHEN L.resource_type IN ('PAGE','KEY','RID','HOBT')	THEN L.resource_associated_entity_id END
	WHERE	    L.request_session_id = @session_id
		AND L.request_request_id = @request_id
	FOR XML PATH('Lock'),Type)
END
GO
ALTER VIEW [dbo].[vwAllObjects] AS
SELECT	 O.[DataBase]
	,D.Name		AS DataBaseName
	,O.SchemaName
	,O.[Object]
	,O.ObjectName
	,O.[Definition]
FROM	(	SELECT DB_ID('tempdb'		) AS [DataBase], S.Name AS SchemaName, O.[Object_ID] AS [Object], O.Name AS ObjectName, M.[Definition] FROM tempdb		.sys.objects O LEFT JOIN tempdb		.sys.schemas S ON S.[schema_id] = O.[schema_id] LEFT JOIN tempdb	.sys.sql_modules M ON M.[object_id] = O.[object_id]
UNION ALL	SELECT DB_ID('MyDB_1'		) AS [DataBase], S.Name AS SchemaName, O.[Object_ID] AS [Object], O.Name AS ObjectName, M.[Definition] FROM MyDB_1		.sys.objects O LEFT JOIN MyDB_1		.sys.schemas S ON S.[schema_id] = O.[schema_id] LEFT JOIN MyDB_1	.sys.sql_modules M ON M.[object_id] = O.[object_id]
...
UNION ALL	SELECT DB_ID('MyDB_N'		) AS [DataBase], S.Name AS SchemaName, O.[Object_ID] AS [Object], O.Name AS ObjectName, M.[Definition] FROM MyDB_N		.sys.objects O LEFT JOIN MyDB_N		.sys.schemas S ON S.[schema_id] = O.[schema_id] LEFT JOIN MyDB_N	.sys.sql_modules M ON M.[object_id] = O.[object_id]
			)	O ([DataBase],SchemaName,[Object],ObjectName,[Definition])
	LEFT JOIN sys.databases	D ON D.DataBase_ID = O.[DataBase]
GO
ALTER VIEW [dbo].[vwAllHobts] AS
		SELECT DB_ID('tempdb'		) AS [DataBase], P.Hobt_ID AS Hobt, O.[Object_ID] AS [Object], O.Name AS ObjectName, I.Index_ID AS [Index], I.Name AS IndexName, P.[Rows] FROM tempdb		.sys.partitions P JOIN tempdb		.sys.objects O ON O.[object_id] = P.[object_id] JOIN tempdb		.sys.indexes I ON I.[object_id] = P.[object_id] AND I.index_id = P.index_id
UNION ALL	SELECT DB_ID('MyDB_1'		) AS [DataBase], P.Hobt_ID AS Hobt, O.[Object_ID] AS [Object], O.Name AS ObjectName, I.Index_ID AS [Index], I.Name AS IndexName, P.[Rows] FROM MyDB_1		.sys.partitions P JOIN MyDB_1		.sys.objects O ON O.[object_id] = P.[object_id] JOIN MyDB_1		.sys.indexes I ON I.[object_id] = P.[object_id] AND I.index_id = P.index_id
...
UNION ALL	SELECT DB_ID('MyDB_N'		) AS [DataBase], P.Hobt_ID AS Hobt, O.[Object_ID] AS [Object], O.Name AS ObjectName, I.Index_ID AS [Index], I.Name AS IndexName, P.[Rows] FROM MyDB_N		.sys.partitions P JOIN MyDB_N		.sys.objects O ON O.[object_id] = P.[object_id] JOIN MyDB_N		.sys.indexes I ON I.[object_id] = P.[object_id] AND I.index_id = P.index_id
GO
22 ноя 11, 10:26    [11635984]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
guest33333
да... вот в тоаде на оракле я наблюдал такую вещь!! Видно что сейчас вот скан такой-то таблицы идет, а сейчас вот сортировка пошла. В сиквеле подобного не видел
Согласен. В оракле неудобнее планы смотреть (юзабилити нулевой), и тогда можно поребячиться и смотреть в онлайне, хотя и толку никакого, но кажущееся ощущение может возникнуть на первый взгляд.
22 ноя 11, 10:32    [11636018]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
kimi
Member

Откуда:
Сообщений: 17
SomewhereSomehow
kimi,

Можно, если у вас есть исходники сиквела и вы пройдетесь по нему дебагером с точками останова =)
Если у вас есть "долгий" запрос, и при этом план не вызывает нареканий, то наверное стоит посмотреть на статистики I/O, сколько чтений, сколько физических чтений, сколько процессора тратится, ну и анализ различных системных представлений никто не отменял, например ожиданий.


thank you SomewhereSomehow,
да, смотрим и анализируем статистику по ресурсам, смотрим wait types, " играем" c query i exec. planami
но задача показать хоть какую то связь реальных деействий с exec plan.
22 ноя 11, 21:45    [11640924]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
kimi
Member

Откуда:
Сообщений: 17
guest33333
да... вот в тоаде на оракле я наблюдал такую вещь!! Видно что сейчас вот скан такой-то таблицы идет, а сейчас вот сортировка пошла. В сиквеле подобного не видел


вот бы линк на простенький tool который показывает что то схожее с тоад.
22 ноя 11, 21:49    [11640931]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
kimi
но задача показать хоть какую то связь реальных деействий с exec plan
Задача, не любопытство.
А что за задача такая? Для чего?
22 ноя 11, 23:41    [11641281]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
kimi
Member

Откуда:
Сообщений: 17
Mnior,

автор
набор страниц в оперативе

хотелось бы видеть набор страниц в оперативе связанных с конретным блоком(и) из estimated exec plan.
23 ноя 11, 22:09    [11648396]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
kimi
Member

Откуда:
Сообщений: 17
Mnior
kimi
но задача показать хоть какую то связь реальных деействий с exec plan
Задача, не любопытство.
А что за задача такая? Для чего?


задача не скучать во время liveMeetinga с клиентом- нужно чтоб он видел реальную последовательность действий
в сответсвии c exec plan.
23 ноя 11, 22:14    [11648416]     Ответить | Цитировать Сообщить модератору
 Re: связь с реальным набором действий  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
kimi
хотелось бы видеть набор страниц в оперативе связанных с конретным блоком(и) из estimated exec plan.
Да-да, человек-гугл.
sys.dm_tran_locks, sys.dm_exec_query_memory_grants, ... Чёта влом, дома под бубунтой (без сиквела).
Так что сами выискивайте: SQL Server 2008 System Views Map. Лупа вам в зубы.
А ещё можете подождать гуру мага, который выдаст ещё список недокументированных функции, флаги трассировки и всякую другую лабуду для разрабов скуля.
И я не думаю что вы получите всё что вам хочется. Однозначно связать с элементами плана никак, даже в оракле.
Да и как в оракакле и не мечтайте. У них другие цели - вьепать говнопродукт и отмыть бабло, надуть рынок псевдо-специалистами. ;]

kimi
задача не скучать
Мдааа ...
Уверяю вас - одноразовая игрушка.
kimi
чтоб клиент видел происходящее в сответсвии c планом
О боже.
Зачем клиенту это вообще нужно? Типа непонятное завораживает и придаёт вам уважение? Видимость действий лучше результата?

А потом захотите увидеть в реалтайме, как бегут электроны по проводам, их эмиссию в транзисторах, электромагнитные волны, гравитационные, кварки, струны.
Если был-бы Full View Monitor, то завтра же была бы бесплатная СУБД в 100500 раз шустрая чем сейчас. И чем тогда будут кормиться работники M$ и оракла? Вы о них подумали?!
24 ноя 11, 01:51    [11649144]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить