Архив метки: mysql

Снижение нагрузки на аккаунт виртуального хостинга

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

Однако, существуют определенные правила «совместного» использования сервера. В частности, необходимо следить за нагрузкой, создаваемой на сервер вашим ресурсом. Нагрузка — это процент использования ресурсов сервера (процессорного времени, объема оперативной памяти и т.д.) в момент выполнения какой-либо задачи. Чем больше ресурсов забирает один сайт (аккаунт), тем меньше их остается другим. Именно поэтому нужно следить за нагрузкой аккаунтов и принимать меры, если какой-либо аккаунт начинает использовать слишком много ресурсов, мешая другим аккаунтам.

При изучении загруженности серверов исследуется такие параметры, как использование процессорного времени, ресурсов дисковой подсистемы и оперативной памяти, сетевых ресурсов. Основное средство анализа нагрузки, создаваемой вашим сайтом — просмотр логов.

Основные источники высокой нагрузки на сервер:

  • Использование ресурсоемкой CMS.
  • Неэффективная логика запросов MySQL и отсутствие их оптимизации (см. раздел «Снижение нагрузки на MySQL сервер»).
  • Непродуманная организация сайта, плохо оптимизированные cкрипты.
  • Высокая посещаемость ресурса.

Снижение нагрузки на MySQL-сервер

Перед тем, как использовать MySQL-сервер, необходимо все тщательно обдумать. В первую очередь, нужно решить, а нужен ли MySQL для конкретной задачи вообще? Типичная ошибка — создание базы данных там, где в ней нет необходимости — например, для хранения текстов статей либо изображений. Почти всегда такое решение приводит к появлению огромных баз-монстров, по объему во много раз превышающих размеры самого сайта и ставящих в ступор даже весьма мощные сервера. А ведь зачастую ту же задачу можно реализовать гораздо проще и эффективнее без MySQL, на базе обычных ресурсов web-сервера.

Если все же без использования MySQL не обойтись, следует заняться оптимизацией запросов. Как правило, наибольшая нагрузка на сервер создается при получении большого числа элементов из таблицы, поэтому основную часть работы в идеале нужно перекладывать на PHP или Perl скрипты. При этом нужно стараться создавать минимально требовательные и максимально уточненные запросы. Например, Вам надо получить из таблицы элемент со значением параметра ’N’ равным ’10′. Оптимальным вариантом будет использование запроса «SELECT * FROM table WHERE N=10;», не оптимальным — «SELECT * FROM table;» с последующим сравнением значений N в цикле. Максимальная точность SQL-запроса — непременное условие быстрой работы сервера баз данных.

Теперь перейдем от общих рекомендаций к более глубокому анализу оптимизации запросов. В MySQL существует оператор EXPLAIN, который используется для получения информации о запросе SELECT. Если оператору SELECT предшествует EXPLAIN, то MySQL сообщит о том, как будет производиться обработка SELECT и предоставит информацию о порядке и методе связывания таблиц. При помощи EXPLAIN легко выяснить, в каких случаях стоит снабдить таблицы индексами, чтобы получить более быструю выборку, использующую индексы для поиска записей. Более подробная информация по использованию команды EXPLAIN доступна на сайте mysql.com. Использование EXPLAIN перед сложными запросами, охватывающими несколько таблиц, может предоставить вам полную информацию об обработке запроса SELECT. Проанализировав эти данные, можно существенно оптимизировать таблицы для ускорения быстродействия.

Также хотелось бы обратить ваше внимание на запросы INSERT, UPDATE и DELETE. Несмотря на то, что, как правило, эти запросы используются значительно реже, чем SELECT, они также могут быть причиной высокой загрузки сервера. Практические советы по оптимизации скорости работы оператора INSERT доступны в документации на сайте mysql.com. UPDATE же включает в себя запросы SELECT и INSERT, поэтому к нему применимы аналогичные методы оптимизации. Запрос DELETE в оптимизации не нуждается, однако в некоторых случаях использование вместо него других средств может привести к значительному убыстрению обработки. Например, для очищения таблицы целиком следует использовать оператор TRUNCATE TABLE вместо удаления каждого элемента по отдельности.

Структура самих таблиц — также очень важный момент. Например, следует избегать типов VARCHAR или BLOB для всех столбцов. При использовании единичного столбца VARCHAR или BLOB Вы получите динамическую длину строки.

Обдуманное следование простым правилам по оптимизации таблиц и запросов может коренным образом увеличить скорость работы MySQL-сервера и интернет-ресурса в целом. Для более детального изучения методов и приемов оптимизации рекомендуем обратиться к официальной документации по MySQL.