Естественное разделение IIS и SQL-сервера является первым шагом. Sql-сервер действительно хочет иметь полную машину для себя.
Вторым важным моментом является анализ приложения во время его работы. Никогда не пытайтесь оптимизировать производительность вашего приложения, не имея реальных данных об использовании, потому что вы, вероятно, просто тратите время на оптимизацию того, что редко вызывается. Одна из техник, которую я успешно использовал в прошлом, заключается в создании System.Diagnostics.Stopwatch в Request_Begin в global.asax, а затем в контекстной переменной
.
var sw = new Stopwatch();
sw.Start()
HttpContext.Current.Items["stopwatch"] = sw;
В Request_End вы получаете агин секундомера
sw = HttpContext.Current.Items["stopwatch"];
sw.Stop();
Timespan ts = sw.Elapsed;
А затем запишите в таблицу журнала, сколько времени потребовалось для обработки запроса. Также регистрируйте URL-адрес (как с параметрами строки запроса, так и без них) и все виды материалов, которые помогут вам проанализировать производительность.
Затем вы можете проанализировать ваше приложение и найти, какие операции занимают больше всего времени, какие называются чаще всего и т. Д. Это позволит вам увидеть, есть ли одна страница, которую запрашивают много, и это обычно занимает много времени чтобы завершить, это должно быть целью оптимизации, используя любые инструменты, которые у вас есть для этого, и .NET, и профилировщики SQL.
Другие вещи, которые я обычно регистрирую, это IP-адреса и ID пользователя для зарегистрированных пользователей. Это также дает мне бесценный инструмент отладки при возникновении ошибок.
Причина, по которой он помещается в таблицу, а не записывается в файл журнала, заключается в том, что вы можете использовать синтаксис SQL для фильтрации, группировки, вычисления среднего времени и т. Д.