Как я могу проверить производительность в Sql Server Mgmt Studio без вывода данных? - PullRequest
6 голосов
/ 06 августа 2009

Использование SQL Server Management Studio.

Как я могу проверить производительность большого выбора (скажем, 600k строк) без влияния окна результатов на мой тест? При прочих равных условиях это не имеет значения, поскольку оба запроса будут выводиться в одно и то же место. Но я хотел бы ускорить свои циклы тестирования, и я думаю, что настройки вывода SQL Server Management Studio мешают мне. В настоящее время я использую вывод в текст, но я надеюсь на лучшую альтернативу.

Я думаю, что это влияет на мои цифры, потому что база данных находится на моем локальном ящике.

Редактировать: У меня был вопрос о том, чтобы сделать WHERE 1 = 0 здесь (думая, что объединение произойдет, но не получится), но я проверил это, и оно не сработало - недопустимый индикатор производительности запросов.

Ответы [ 6 ]

10 голосов
/ 06 августа 2009

Вы можете сделать SET ROWCOUNT 1 перед вашим запросом. Я не уверен, что это именно то, что вам нужно, но вам не придется ждать, пока много данных будет возвращено, и, следовательно, вы получите точные расчетные затраты.

Однако, если вы добавите статистику клиента в свой запрос , одним из чисел будет время ожидания ответов сервера, которое даст вам время вычисления сервера, не включая время, необходимое для передачи данных через сеть.

2 голосов
/ 06 августа 2009

Вы можете УСТАНОВИТЬ ВРЕМЯ СТАТИСТИКИ , чтобы получить измерение времени на сервере. И вы можете использовать Запрос / Включить статистику клиента (Shift + Alt + S) в SSMS, чтобы получить подробную информацию об использовании времени клиентом. Обратите внимание, что SQL-запросы не выполняются, а затем возвращают результат клиенту после завершения, но вместо этого они запускают как , они возвращают результаты и даже приостанавливают выполнение, если канал связи заполнен.

Единственный контекст, в котором запрос полностью игнорирует отправку пакетов с результатами обратно клиенту, - это активация. Но при измерении производительности следует также учитывать время возврата вывода клиенту. Вы уверены, что ваш собственный клиент будет работать быстрее, чем SSMS?

1 голос
/ 13 марта 2012

SET ROWCOUNT 1 остановит обработку после того, как будет возвращена первая строка, что означает, что если в плане нет оператора блокировки, результаты будут бесполезными.

Принимая тривиальный пример

SELECT * FROM TableX

Стоимость этого запроса на практике будет сильно зависеть от количества строк в TableX.

Использование SET ROWCOUNT 1 не покажет ничего из этого. Независимо от того, будет ли TableX иметь 1 строку или 1 миллиард строк, выполнение будет прекращено после возвращения первой строки.

Я часто присваиваю SELECT результаты переменным, чтобы иметь возможность просматривать такие вещи, как логическое чтение, без замедления SSMS, отображающей результаты.

  SET STATISTICS IO ON
  DECLARE @name nvarchar(35),
          @type nchar(3)

  SELECT @name = name, 
         @type = type
  FROM master..spt_values

Существует связанный запрос элемента подключения Предоставить опцию «Отменить результаты на сервере» в SSMS и / или TSQL

1 голос
/ 06 августа 2009

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

И, конечно, потребуется некоторое время, чтобы вернуть 600 000 записей. Это также будет в вашем пользовательском интерфейсе, вероятно, это займет больше времени, чем в вашем окне запроса, потому что информация должна передаваться по сети.

0 голосов
/ 06 августа 2009

Я думаю, что условие where в WHERE 1=0 определенно происходит на стороне SQL Server, а не Management Studio. Результаты не будут возвращены.

Являетесь ли вы движком БД на той же машине, на которой работает Mgmt Studio?

Вы могли бы:

  • Вывод в текст или
  • Вывод в файл.
  • Закройте панель результатов запроса.

Это просто переместило бы циклы, затрачиваемые на рисование сетки в Mgmt Studio. Возможно, Resuls to Text будет более продуктивным в целом. Скрытие панели избавит Mgmt Studio от необходимости рисовать данные. Он все еще возвращается в Mgmt Studio, поэтому он не экономит много циклов.

0 голосов
/ 06 августа 2009

Лучшее, что вы можете сделать, это проверить план выполнения запроса (нажмите Ctrl + L ) для фактического запроса. Это даст вам наилучшую оценку производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...