как я могу проверить производительность в Sql Server Mgmt Studio без вывода данных?

StackOverflow https://stackoverflow.com/questions/1240051

  •  11-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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.

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

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

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

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

Установлен ли ваш движок БД на том же компьютере, на котором запущена Mgmt Studio?

Вы могли бы :

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top