Время выполнения запроса в Management Studio и профилировщике. Что он измеряет?

У меня есть рабочий SQL Server в удаленном центре обработки данных (и веб-серверы расположены в том же центре обработки данных). Во время разработки мы заметили, что выполнение одного конкретного представления занимает много времени (около 60-80 секунд) в нашем локальном SQL-сервере разработки, и мы были в порядке с этим. (который находится в центре обработки данных) из моей локальной студии управления я вижу, что выполнение запроса занимает около 7 минут 17 секунд (доступно в правом нижнем углу студии управления). Когда я запустил профилировщик, я вижу, что время, затраченное для выполнения этого запроса требуется 437101 микросекунд миллисекунд, хотя в студии управления он отображается как 7:17. , что на самом деле составляет около 437 101 миллисекунд. Мой администратор базы данных говорит, что в prod просмотр занимает от 60 до 80 секунд, хотя я вижу разные цифры от профилировщика и студии управления. Может ли кто-нибудь сказать мне, что означают эти длительности в Profiler и студии управления?

Мое предположение: продолжительность между отправкой последнего байта запроса и получением последнего байта ответа от сервера. Статистика клиента была следующей: Время обработки клиента: 90393 Общее время выполнения: 92221 Время ожидания ответов сервера: 1828

Мое лучшее предположение о том, что означает «длительность» в профилировщике, - это «время, затраченное SQL Server (механизм оптимизации для анализа запроса, создания плана запроса или использования существующего плана запроса + выборки записей с разных страниц) для создания набора результатов что исключает время, затрачиваемое данными на перемещение по сети к клиенту"

Редактировать: я считаю, что оба эти времени примерно одинаковы (студия управления против профилировщика). Как они соотносятся со временем, которое я вижу в статистике клиентов?

Может ли кто-нибудь пролить больше света на них?


person ram    schedule 21.06.2010    source источник
comment
Предполагая, что у вас одинаковый объем данных как в среде тестирования/разработки, так и в производственной среде, ваши предположения звучат правильно.   -  person Nate    schedule 21.06.2010
comment
Нейт: Я отредактировал вопрос. Профайлер и Management Studio показывают примерно одинаковое время (437101 мс против 7:17)   -  person ram    schedule 21.06.2010


Ответы (3)


Если я правильно понимаю ваш вопрос, вы сначала подвергаете сомнению разницу между продолжительностью, сообщаемой Profiler, и статистикой, представленной в SSMS (либо в правом нижнем углу для общего времени, либо с помощью SET STATISTICS TIME ON). В дополнение к этому, вы, кажется, не убеждены в комментарии производственного администратора баз данных о том, что представление выполняется в течение ожидаемой продолжительности ~ 60 секунд.

Во-первых, из Books Online статические данные, которые SSMS будет сообщать с помощью SET STATISTICS TIME ON:

«Отображает количество миллисекунд, необходимое для разбора, компиляции и выполнения каждого оператора».

Ты как раз для этого. Что касается продолжительности в Profiler, то она описывается как:

«Продолжительность (в микросекундах) события».

С того места, где я сижу, эти два должны быть функционально эквивалентны (и, как я уверен, вы заметили, Profiler будет сообщать в микросекундах, если вы собираетесь использовать SQL 2005 или более позднюю версию). Я говорю это потому, что «событием» в данном случае (относительно Duration в Profiler) является выполнение выбора, которое включает доставку клиенту; это соответствует в обоих случаях.

Кажется, вы подозреваете, что география является виновником большой продолжительности при удаленном выполнении запроса. Это очень может быть. Вы можете проверить это, выполнив выбор в представлении в одном окне запроса, затем создав другое окно запроса и просмотрев тип ожидания в запросе:

select
    a.session_id
    ,a.start_time
    ,a.status
    ,a.command
    ,db_name(a.database_id) as database_name
    ,a.blocking_session_id
    ,a.wait_type
    ,a.wait_time
    ,a.cpu_time
    ,a.total_elapsed_time
    ,b.text
from sys.dm_exec_requests a
    cross apply sys.dm_exec_sql_text(a.sql_handle) b
where a.session_id != @@spid;

Я подозреваю, что вы увидите что-то вроде ASYNC_NETWORK_IO в качестве типа ожидания, если проблема заключается в географии - в противном случае проверьте, что из этого получается. Если вы профилируете запрос удаленного выполнения, длительность будет отражать статистику времени, которую вы видите в SSMS. ОДНАКО, если вы используете Profiler и обнаруживаете, что продолжительность этого запроса при выполнении с одного из веб-серверов, который находится в том же центре обработки данных, что и SQL Server, по-прежнему занимает 7 минут, тогда DBA - большой, жирный лжец :). Я бы использовал Profiler для записи запросов, которые занимают больше 1 минуты, пытался отфильтровать ваше представление и взять среднее значение, чтобы увидеть, соответствуете ли вы цели производительности.

Поскольку других ответов нет, я обеспокоен тем, что я здесь далеко от базы, но уже поздно, и я новичок в этом, поэтому я решил попробовать!

person scottE    schedule 29.06.2010

Я боролся с этим, пока не нашел это...

http://blog.sqlauthority.com/2009/10/01/sql-server-sql-server-management-studio-and-client-statistics/

Кроме того, если вы откроете вкладку «Свойства» для своего запроса, вы можете найти какое-то волшебное «Прошедшее время», которое может дать вам некоторое время выполнения... Надеюсь, это поможет...

person Ymagine First    schedule 20.11.2012

Попробуйте с этим:

DECLARE @time AS DATETIME = CURRENT_TIMESTAMP

-- Your Query

SELECT CAST(DATEDIFF(SECOND, @time, CURRENT_TIMESTAMP) AS VARCHAR)
    + ','
    + CAST(DATEDIFF(MICROSECOND, @time, CURRENT_TIMESTAMP) AS VARCHAR)
    AS 'Execution Time'
person Eduardo Cuomo    schedule 20.03.2014