Если ваш сервер становится заметно медленнее в загруженный сезон, это может быть связано с насыщением, а не с чем-то неэффективным в базе данных. Базовая теория очередей говорит нам, что сервер становится гиперболически медленнее по мере приближения к насыщению.
Основное соотношение - 1/(1-X)
, где X - доля нагрузки. Это описывает среднюю длину очереди или время ожидания перед обслуживанием. Поэтому сервер, который насыщается, будет очень быстро замедляться при скачках нагрузки.
Сервер, который загружен на 25%, будет иметь среднее время обслуживания 1,333 КБ для некоторой константы К (в общем, К - это время, когда машина выполняет одну транзакцию). На сервере, который загружен на 50%, среднее время обслуживания составляет 2 КБ, а на сервере, загруженном на 90%, среднее время обслуживания составляет 10 КБ. Учитывая, что замедления носят гиперболический характер, часто не требуется большого изменения общей нагрузки, чтобы вызвать значительное снижение времени отклика.
Очевидно, что это несколько упрощенно, поскольку сервер будет обрабатывать несколько запросов одновременно (для этой ситуации существуют более сложные модели очередей), но общий принцип по-прежнему применяется.
Итак, если ваш сервер испытывает временные нагрузки, которые его насыщают, вы будете испытывать заметные замедления. Обратите внимание, что эти замедления должны быть только в одной узкой области системы, чтобы замедлить весь процесс. Если вы испытываете это только сейчас в напряженном сезоне, есть вероятность, что ваш сервер просто установил ограничение на ресурс, а не будет слишком медленным или неэффективным.
Обратите внимание, что эта возможность не противоречит возможности неэффективности в коде. Вы можете обнаружить, что способ устранить узкое место - это настроить некоторые из ваших запросов.
Чтобы определить, является ли система узким местом, начните собирать информацию о профилировании. Если вы можете найти ресурсы с большим количеством ожиданий, это должно дать вам хорошую отправную точку.
Последняя возможность заключается в том, что вам нужно обновить сервер. Если в коде нет существенной неэффективности (это вполне может иметь место, если профилирование не указывает на непропорционально большие узкие места), вам может просто потребоваться большее оборудование. Я понятия не имею, каковы ваши объемы, но не упускаю возможность, что вы переросли свой сервер.