Давайте:Cross DB производительность хранимых процедур в SQL Server 2008
- $ DB база данных SQL Server
- $ DBSP1 база данных SQL Server, содержащий хранимые процедуры, ссылающихся $ DB
- $ DBSP2 точно как $ DBSP1
- $ SP хранимая процедура
Запуск $ SP на $ DBSP1 из C# кода занимает около 1,5 сек.
Запуск $ SP на $ DBSP2 от кода C# занимает около 0,5 с.
Код C# очень прост и использует SqlClient с параметрами по умолчанию.
Когда я выполняю $ SP в консоли SQL как для $ DBSP1, так и для $ DBSP2, он принимает 0,4.
Единственная разница между двумя базами данных кода: $ DBSP1 находится в производстве и немного загружена, тогда как $ DBSP2 простаивает. В базе данных кода нет данных, только хранимые процедуры и представления над $ DB.
Может кто-нибудь предложить причины, почему это происходит? Поскольку вся работа выполняется в $ DB, которая одинаково загружена в обоих случаях, я ожидаю, что результаты будут похожи.
Интересно. Работа с консолью SQL на каждой машине была хорошим шагом с точки зрения устранения проблем с производительностью машины или сети. «Выполнение $ SP на $ DBSP1 из кода C# занимает около 1,5 секунд. Запуск $ SP на $ DBSP2 из кода C# занимает около 0,5 с." Вы, кажется, тщательно, так что простите меня, если этот вопрос исправен. Когда вы говорите, что - это общее время выполнения страницы или функции? Или это конкретное время, которое требуется для этого конкретного заявления? –
Время выполнения C# измеряет сумму SqlCommand Open() и ExecuteNonQuery(), выполняющую процедуру хранилища. Я забыл точно, что все базы данных находятся на одной машине. – pmezard
@John Booty: «Запуск $ SP на $ DBSP1 из кода C# занимает около 1,5 секунд. Запуск $ SP на $ DBSP2 из кода C# занимает около 0,5 с». это как раз тот признак неправильного обнюхивания пара и старая статистика. –