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

на какой столбец смотреть, чтобы понять, какой запрос самый медленный и его надо оптимизировать?

К сообщению приложен файл. Размер - 6Kb
19 окт 14, 13:03    [16727186]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
миксер
Guest
миксер,

Я склоняюсь к мысли что "duration"
19 окт 14, 13:16    [16727223]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
миксер
на какой столбец смотреть, чтобы понять, какой запрос самый медленный и его надо оптимизировать?
CPU - расход процессора на выполнение запроса
Duration - время выполнения, включая время на ожидание заблокированных ресурсов и на обмен с клиентом
чтение, запись - расход ресурсов IO

Выбирайте, что вам важно.

Для конечного потребителя действительно самый (или единственно) важный показатель - Duration, но нужно понимать, что для оптимизации по этому параметру нужно оптимизировать работу клиента, сети, и решать проблемы с блокировками, то есть это не "оптимизация запроса" в чистом виде.
19 окт 14, 18:39    [16727952]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
миксер
Guest
alexeyvg,
Спасибо за ответ, но можете пояснить

1. А что такое IO?
2. Почему "чтение" Вы вынесли в отдельный блок? Ведь "время выполнения" так же складывается из длительности чтения


И еще вопрос:
Я вижу в профайлере запрос с большой длительностью, но когда выполняю его в базе , запрос выполняется за секунду

Может это быть из-за того, что
1. таблица truncate каждый день (вся статистика убивается)
2. выполняется тяжелый запрос (статистика строится заново)
3. когда я выполняю запрос на базе, он выполняется быстрее из-за статистики
20 окт 14, 09:38    [16729334]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
правильный проходящий.
Guest
миксер
запрос с большой длительностью, но когда выполняю его в базе , запрос выполняется за секунду
Что такое "выполнение запроса на базе"? Что это за термин, где его взяли? Вроде как запросы выполняет сервер, то есть можно сказать, что запрос выполняется на сервере. Всегда. Или вы так зашифровали запуск выполнения запроса из SSMS?
20 окт 14, 09:44    [16729372]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
миксер
Guest
правильный проходящий.
миксер
запрос с большой длительностью, но когда выполняю его в базе , запрос выполняется за секунду
Что такое "выполнение запроса на базе"? Что это за термин, где его взяли? Вроде как запросы выполняет сервер, то есть можно сказать, что запрос выполняется на сервере. Всегда. Или вы так зашифровали запуск выполнения запроса из SSMS?


Виноват.

Да, в профайлере выполняется долго, а через SSMS быстро
20 окт 14, 09:53    [16729419]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
baracs
Member

Откуда: Москва
Сообщений: 7204
миксер
Да, в профайлере выполняется долго, а через SSMS быстро
Медленно в приложении, быстро в SSMS .
20 окт 14, 10:16    [16729553]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
миксер
Guest
baracs,
Мне кажется это немного не то.

У меня нет стороннего приложения, По крайней мере, я не считаю профайлер сторонним приложеним )
20 окт 14, 10:23    [16729585]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
миксер
Да, в профайлере выполняется долго, а через SSMS быстро
Если вы имеете в виду, что в SSMS результат видим через секунду, а в профайлере, допустим, 10 секунд, то обратите внимание на цифру времени выполнения в SSMS. Возможно, вы просто видите первые результаты, а профайлер показывает, когд арезультаты полностью переданы клиенту.
миксер
1. А что такое IO?
2. Почему "чтение" Вы вынесли в отдельный блок? Ведь "время выполнения" так же складывается из длительности чтения
IO - это операции ввода-вывода.
Чтение - это разновидность таких операций. В профайлере чтение показывается не в единицах времени, а в количестве прочитанных с диска 8-кб страниц.

Это может быть важно, что бы оценить нагрузку на диски.
миксер
2. выполняется тяжелый запрос (статистика строится заново)
3. когда я выполняю запрос на базе, он выполняется быстрее из-за статистики
Второе выполнение может быть быстрее и из за того, что данные уже закешированы.

Ну и вообще, может, это выполнение из разных приложений, или разными пользователями, или с разных компьютеров? Или оба этих раза вы запускаете запрос из SSMS?

В общем, расшифруйте эту фразу:
миксер
Я вижу в профайлере запрос с большой длительностью, но когда выполняю его в базе , запрос выполняется за секунду
20 окт 14, 10:46    [16729682]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
baracs
Member

Откуда: Москва
Сообщений: 7204
миксер
baracs,
Мне кажется это немного не то.

У меня нет стороннего приложения
А откуда берется запрос, который вы изучаете в профайлере?
миксер
По крайней мере, я не считаю профайлер сторонним приложеним )
Возможно вы удивитесь, но и SQL Server Profiler и SSMS - это все приложения.
Другое дело, что профайлер сам не формирует запросы. Это всего лишь визуальный интерфейс для работы с трассировкой SQL Server.
20 окт 14, 10:50    [16729705]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
миксер
Да, в профайлере выполняется долго, а через SSMS быстро
В профайлере запросы не выполняются, вы видите события, возникающие при выполнении запросов из других клиентских приложений.

Кстати, management studio для sql-server такой же клиент как и все остальные (будь они написаны на Delphi, .Net, 1С или Java).
20 окт 14, 10:51    [16729714]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
миксер,

Я обычно ставлю Dureation >= 300 (=300 мс), ну а вы смотрите сколько для вас целесообразно
20 окт 14, 12:46    [16730454]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
миксер
Guest
Всем спасибо за ответы

например профайлер показывает запрос который сформировал OLAP на duration 80.000

копирую его, вставляю в SSMS и от отрабатывает за секунду
22 окт 14, 09:48    [16741323]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Glory
Member

Откуда:
Сообщений: 104760
миксер
например профайлер показывает запрос который сформировал OLAP на duration 80.000
копирую его, вставляю в SSMS и от отрабатывает за секунду

Duration вообще-то показывается в milliseconds
22 окт 14, 10:10    [16741428]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Glory
миксер
например профайлер показывает запрос который сформировал OLAP на duration 80.000
копирую его, вставляю в SSMS и от отрабатывает за секунду

Duration вообще-то показывается в milliseconds
зависит от версии сервера и от того куда сохраняется трасса
может быть и в микросекундах
22 окт 14, 10:19    [16741483]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Glory
Member

Откуда:
Сообщений: 104760
Гадя Петрович
зависит от версии сервера и от того куда сохраняется трасса
может быть и в микросекундах

Это все равно меньше секунды
22 окт 14, 10:20    [16741494]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
миксер
Guest
Glory,

Тогда вообще странно.
Если самый долгий запрос отрабатываем меньше секунды, значит проседания не в запросах, а может в дисках?
22 окт 14, 11:05    [16741762]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Glory
Member

Откуда:
Сообщений: 104760
миксер
значит проседания не в запросах, а может в дисках?

Проседание чего ?
22 окт 14, 11:07    [16741776]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
миксер
Тогда вообще странно.
Если самый долгий запрос отрабатываем меньше секунды, значит проседания не в запросах, а может в дисках?

У вас 80,000 или 80 000? Т.к. миллисекунды это 10^-3, т.е. 80 000 мс = 80 секунд
Картинка с другого сайта.

Микросекундами оперирует сервер, начиная с 2005, т.е. при работе с функциями трассировки напрямую - микросекунды, а миллисекунды это творчество профайлера.

Просмотр и анализ трассировок с помощью приложения SQL Server Profiler
BOL
Начиная с версии SQL Server 2005, сервер сообщает длительность события в микросекундах (одна миллионная доля секунды, 10-6 с) и количество времени ЦП, затраченного на событие, в миллисекундах (одна тысячная доля секунды, 10-3 с). В SQL Server 2005 и более поздних версиях графический пользовательский интерфейс в приложении Приложение SQL Server Profiler по умолчанию выводит столбец Продолжительность в миллисекундах, однако при сохранении трассировки в файл или таблицу базы данных значение столбца Продолжительность записывается в микросекундах.
22 окт 14, 11:25    [16741908]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
Топ по логич чтениям с планами выполнения
select top 30 rank() over(order by total_logical_reads desc,sql_handle,statement_start_offset) as row_no
,       (rank() over(order by total_logical_reads desc,sql_handle,statement_start_offset))%2 as l1
,       creation_time
,       last_execution_time
,       (total_worker_time+0.0)/1000 as total_worker_time
,       (total_worker_time+0.0)/(execution_count*1000) as [AvgCPUTime]
,       total_logical_reads as [LogicalReads]
,       total_logical_writes as [logicalWrites]
,       execution_count
,       total_logical_reads+total_logical_writes as [AggIO]
,       (total_logical_reads+total_logical_writes)/(execution_count + 0.0) as [AvgIO]
,   case when sql_handle IS NULL
                then ' '
                else ( substring(st.text,(qs.statement_start_offset+2)/2,(
					case when qs.statement_end_offset = -1
					then len(convert(nvarchar(MAX),st.text))*2      
					else qs.statement_end_offset    end - qs.statement_start_offset) /2  ) )
        end as query_text 
,       db_name(st.dbid) as database_name
,       st.objectid as object_id
,		object_schema_name(st.objectid, st.dbid) + '.' + object_name(st.objectid, st.dbid)
,		plan_handle
, (qs.statement_start_offset+2)/2
, depa.* 
from sys.dm_exec_query_stats  qs
cross apply sys.dm_exec_sql_text(sql_handle) st
cross apply sys.dm_exec_query_plan(plan_handle) depa
where total_logical_reads > 0
order by total_logical_reads  DESC


или

set transaction isolation level read uncommitted
select 
	top 100
	creation_time,
	last_execution_time,
	execution_count,
	total_worker_time/1000 as CPU,
	convert(money, (total_worker_time))/(execution_count*1000)as [AvgCPUTime],
	qs.total_elapsed_time/1000 as TotDuration,
	convert(money, (qs.total_elapsed_time))/(execution_count*1000)as [AvgDur],
	total_logical_reads as [Reads],
	total_logical_writes as [Writes],
	total_logical_reads+total_logical_writes as [AggIO],
	convert(money, (total_logical_reads+total_logical_writes)/(execution_count + 0.0))as [AvgIO],
	case 
		when sql_handle IS NULL then ' '
		else(substring(st.text,(qs.statement_start_offset+2)/2,(
			case
				when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2      
				else qs.statement_end_offset    
			end - qs.statement_start_offset)/2  ))
	end as query_text,
	db_name(st.dbid)as database_name,
	object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as object_name
from sys.dm_exec_query_stats  qs
cross apply sys.dm_exec_sql_text(sql_handle) st
where total_logical_reads > 0
order by AvgDur desc


самые тяжелые по ЦПУ:
SELECT TOP 5 SUBSTRING(qt.text, (qs.statement_start_offset/2)+1, 
        ((CASE qs.statement_end_offset
          WHEN -1 THEN DATALENGTH(qt.text)
         ELSE qs.statement_end_offset
         END - qs.statement_start_offset)/2)+1), 
total_worker_time/execution_count AS [Avg CPU Time],
Plan_handle, query_plan 
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
WHERE qt.encrypted=0
ORDER BY total_worker_time/execution_count DESC



+ performance dashboard вам в помощь
22 окт 14, 12:18    [16742287]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
миксер
Guest
Александр52
Топ по логич чтениям с планами выполнения
самые тяжелые по ЦПУ:




+ performance dashboard вам в помощь


Выполнил запрос

Avg CPU Time
4471262

Может эту цифру надо поделить на 60?
22 окт 14, 14:53    [16743457]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
миксер
Александр52
Топ по логич чтениям с планами выполнения
самые тяжелые по ЦПУ:




+ performance dashboard вам в помощь


Выполнил запрос

Avg CPU Time
4471262

Может эту цифру надо поделить на 60?


если противно смотреть на такую, то поделите
22 окт 14, 16:15    [16744196]     Ответить | Цитировать Сообщить модератору
 Re: профайлер  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5133
Winnipuh
миксер
пропущено...


Выполнил запрос

Avg CPU Time
4471262

Может эту цифру надо поделить на 60?


если противно смотреть на такую, то поделите

:)
22 окт 14, 16:30    [16744322]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить