Тест производительности запросов SQL Server

У меня есть 2 сервера, на которых установлен SQL-сервер и одна и та же база данных. В базе данных есть процедура хранения, которая на сервере A занимает 35 минут, а на сервере B - 9 часов. Процедура в основном обновляет несколько таблиц, но данные точно такие же, поэтому я не понимаю, почему разница во времени такая огромная.

Может ли кто-нибудь посоветовать мне фиктивный запрос, который я могу запустить на обоих серверах (не относящийся к текущим данным), чтобы сравнить производительность. например вставив 5 миллионов строк, а затем обновите их все.

Просто для информации, спецификация сервера B является более высокой спецификацией, индексация такая же в соответствующих таблицах, нет блокировки, пока сервер B SP выполняет

35 минут - это тоже много времени ... может хранимая процедура написана плохо и ее можно улучшить?

Zohar Peled 01.05.2018 12:27

ну 9 часов хуже. 35 вполне приемлемо

user3266033 01.05.2018 12:30

Есть ли разница в версии sql server? план исполнения?

Zohar Peled 01.05.2018 12:33

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

MJH 01.05.2018 12:34

Загрузите планы выполнения быстрого и медленного выполнения в brentozar.com/pastetheplan. Это поможет сузить причину до разных планов по сравнению с другими факторами.

Dan Guzman 01.05.2018 12:48

ok будет делать, как только сервер освободится. Благодарность :)

user3266033 01.05.2018 12:54

Прошло три часа, вы еще не смогли выполнить свой запрос еще раз?

Sean Lange 01.05.2018 16:27

Извините, приведенное ниже предложение перекомпиляции сработало

user3266033 02.05.2018 10:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
8
521
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть много возможностей, но если данные и оборудование должны быть одинаковыми в двух средах, то, возможно, происходит его анализ параметров?

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

Вы можете попробовать добавить "WITH RECOMPILE", чтобы увидеть, сильно ли это изменит производительность.

ALTER PROCEDURE <procedure>
<Parameters>
WITH RECOMPILE
AS

Спасибо. Единственное, что я переместил ту же процедуру с сервера A на B. Никаких новых параметров не было добавлено и процедура не была изменена.

user3266033 01.05.2018 12:45

Это тот же код, но, как я уже сказал, когда вы вызываете процесс в первый раз, он сохраняет план, посмотрите ссылку на Брента Озара для лучшего объяснения: brentozar.com/archive/2013/06/…

Søren Kongstad 01.05.2018 13:10

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