Сколько производительности я проигрываю за счет увеличения количества поездок на SQL Server?

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

Вопрос

У меня есть веб-приложение, где база данных Web Server и SQL Server 2008 сидят на разных ящиках в том же сервере.

Если я возьму монолитную хранимую процедуру и сломаю ее на несколько небольших хранимых процедур, что делает код клиента, отвечающей таким образом, чтобы вызова несколько хранимых процедур, а не только один, и я собираюсь заметить значительную производительность в Мое веб-приложение?


Дополнительная информация о фоновом режиме:

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

Мне нужно вставить часть функциональности в мой клиентский код (в этом смысле код клиента - это веб-сервер ASP, который вызывает сервер базы данных), который вызывает компонент DLL. Тем не менее, сохраненная процедура обновляет запись и возвращает udpated данные в том же вызове, и мой код в идеале должен быть вызван после того, как вызывается операторы для решения и обновления, но / em> Данные возвращаются клиенту.

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

Когда я смотрю на эту проблему, я не могу не думать, что с точки зрения обслуживания кода, было бы намного лучше изолировать все моего обновления и выбирать заявления в тонкий сохраненные Procs и оставьте бизнес-логику в код клиента. Таким образом, когда мне нужно вставить функциональность или логику решений в мой клиентский код, все, что мне нужно сделать, это изменить код клиента вместо модификации огромных хранимых ProC.

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

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

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

Решение

В общем, как правило, вы должны сделать круглые переноски на SQL Server с минимальными.

«Хит» на сервере очень дорого, это на самом деле более дороги, чтобы отрицать ту же операцию на 3 частей, а затем делать 1 удар и все остальное на сервере.

Что касается обслуживания, вы можете вызвать 1 сохраненные ProC от клиента, имея этот запрос еще 2 процесса.

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

Некоторые результаты сравнения ... У меня был клиент некоторое время, у меня были серверы, падающие и разрушающиеся, когда мы проверили проблему, это было много круглых игр к SQL Server, когда мы сводили его к минимуму, серверы вернулись к обычному.

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

Это повлияет на него.Мы используем сервер Weblogic, в котором вся бизнес-логика находится в AppServer, подключенном к базе данных DB / 2.Мы в основном используем Beans Entity в нашем проекте, и для большинства звонков бизнес-сервисов делают несколько поездок в БД без видимых побочных эффектов.(Мы настраиваем некоторые запросы, чтобы быть несколько стол при необходимости).

Это действительно зависит от вашего приложения.Вам придется ориентироваться.

Настройка скважины SQL Server на хорошем аппаратном обеспечении может обработать много тысяч транзакций в секунду.

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

Вы обязательно должны ошибаться на стороне обслуживания кода, но ориентир, чтобы быть уверенным.

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

По сути, этот вопрос тесно связан с плотным и свободным муфтом.

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

Если клиент не сделает что-то (измените данные или предоставьте статус пользователю), я бы, вероятно, не рекомендую перемещать несколько вызовов клиенту, поскольку вы будете более плотно соединять клиент к порядку операций для хранимой процедуры беззначительное повышение производительности.

в любом случае, я бы оценил его и отрегулировать оттуда.

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