Низкая производительность сайта

Не уверен, что это правильный форум, чтобы задать мой вопрос.

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

  • Разработано с использованием ASP.NET Web Forms (скоро я буду внедрять новую версию с ASP.NET MVC).
  • Он использует базу данных PostgreSQL 9.1.
  • Это 100% -ный диманический, что означает, что каждая страница формируется во время выполнения, получая информацию из БД.
  • Размещается на облачном сервере с 2 ядрами и 4 ГБ оперативной памяти.
  • Windows Server 2012 на диске C:
  • PostgreSQL DB на другом "жестком диске" как диск D:
  • Среднее количество посетителей в день составляет 2500

Наблюдая за диспетчером задач, я могу заметить, что существует много процессов PostgreSQL, которые потребляют процессор на 100%. Другой процесс, который показан в "Рабочем процессе IIS", но я не считаю его таким же важным, как процесс PostgreSQL. Таким образом, похоже, что основная проблема здесь связана с доступом к базе данных. При высокой загрузке ЦП отклик веб-сайта крайне низок, а также очень трудно установить соединение с удаленным рабочим столом.

Я думал об обновлении облачного сервера, например, до 4 ядер и 8 ГБ оперативной памяти, но сначала я хочу получить отзывы экспертов, чтобы выбрать лучший подход. Я не эксперт по серверам и по этой причине не хочу слепо предпринимать шаги.

С уважением, Хорхе Мальдонадо

1 ответ

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

Мое второе предложение - рассмотреть какое-то решение для кэширования. В частности, полный кеш страниц. Что-то вроде Varnish позволит вам кэшировать всю отображаемую страницу, чтобы вам не приходилось выполнять повторяющиеся дорогостоящие запросы. https://varnish-cache.org/ - помните, что это в каждом конкретном случае, и вы не должны ожидать кеширования каждой страницы на вашем сайте по очевидным причинам, если нет динамического контента.

Наконец, вы можете рассмотреть возможность настройки репликации master / slave. Это позволит вам создать n реплики для обработки растущей рабочей нагрузки чтения, которую вы испытываете. Пожалуйста, убедитесь, что вы достаточно изучили, как поддерживать репликацию, поскольку это, вероятно, добавит некоторые накладные расходы к задачам администрирования БД.

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

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