Ускорение базы данных вашего сайта

Сайт скорость всегда была большая проблема, и она стала еще более важной с апреля 2010 года, когда Google решил использовать его в поисках rankings.Тем не менее, в центре внимания дискуссии, как правило, на минимизацию размера файлов, улучшению параметров сервера и оптимизации CSS и Javascript.

Обсуждения затушевывает еще один важный фактор: скорость, с которой ваши страницы на самом деле собрал на вашем сервере.Большинство крупных современных веб-сайтов хранят свою информацию в базу данных и использование языков, таких как PHP или ASP, чтобы извлечь его, превратить его в HTML и отправить его на веб-browser.

Таким образом, даже если вы получите домашней страницы до 1,5 секунд (пороговое компании Google за то, что считается “быстрым” веб-сайта), вы можете расстроить клиентов, если ваша страница поиск занимает слишком много времени, чтобы ответить, или если нагрузка на страницах продуктовбыстро, но “Отзывы клиентов” задержка на несколько seconds.

Google Site Performance Порог Google для быстрой загрузки веб-сайта составляет около 1,5 секунды.Этот скриншот исходит от Google Webmaster Tools (перейти к [имя домена] → Диагностика → Site Performance) .

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

Что такое база данных?Что такое SQL

Базы данных в основном набор таблиц информации, такой как список клиентов и их заказов.Это может быть шкаф, куча электронных таблиц, файлов Microsoft Access или Амазонки 40 терабайт книги и клиентов data.

Типичными базу данных для блога есть столы для пользователей, категорий, записей и комментариев.WordPress включает в себя этих и нескольких other пусковые столы.Типичная база данных для сайта электронной коммерции есть столы для клиентов, продуктов, категорий, заказа и предметов (за содержание корзины для покупок).С открытым исходным кодом программное обеспечение электронной коммерции Magento включает в себя эти и многие others.Базы данных имеют много других применений — например, для управления контентом, отношениями с клиентами, счетов и счетов-фактур и событий -но эти два общих типа (например, для блога и сайта электронной коммерции), будут упоминаться в этой article.

Некоторые таблицы в базе данных связаны с другими таблицами.Например, блог может иметь много комментариев, и клиент может сделать несколько заказов (это один-к-many отношения).Самый сложный тип базы данных, отношения многие-ко-many отношения.Один отношений лежит в основе всех электронной коммерции баз данных: заказ может содержать много продуктов, и один продукт можно добавлять к различным заказам.Это где “порядок элементов” таблицы приходит в: она находится между продуктами и заказами, и он записывает каждый раз, когда продукт будет добавлен в порядке.Это будет соответствующим позже в статье, когда мы смотрим на то, почему некоторые запросы к базе данных являются slow.

Слово database также относится к программному обеспечению, которое содержит все эти данные, как и в “Моя база данных разбился, когда я был за завтраком”, или “Мне действительно нужно обновить базу данных”. Популярные программы баз данных включает Microsoft Access 2010, Microsoft SQL Server, MySQL, PostgreSQL и Oracle Database 11g.

Акроним SQL приходит много при работе с базами данных.Она выступает за “Structured Query Language” и произносится как “продолжение” или “эс-кий-эль.« Это язык, используемый, чтобы спросить и сказать базу данных вещей — захватывающие вещи, как SELECT lastname FROM customers WHERE city='Brighton'.Это называется база данных query потому что он запрашивает базу данных для хранения данных.Существуют и другие типы баз данных заявлений: INSERT для размещения новых данных, UPDATE для обновления существующих данных, DELETE для удаления вещей, CREATE TABLE для создания таблиц, ALTER TABLE, и многие more.

Как можно Database Slow Down Сайт

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

  1. Начать с текущим продуктом,
  2. Смотрите, сколько раз товар был недавно добавлен в корзину никому корзине (“порядок элементов” таблицы сверху),
  3. Посмотрите на заказы, связанные с тем, корзины для покупок (за выполненные заказы только),
  4. Найти клиентов, которые сделали эти заказы,
  5. Посмотрите на другие заказы, сделанные тех клиентов,
  6. Посмотрите на содержание этих заказов корзины (“порядок элементов” снова),
  7. Посмотрите подробности этих продуктов,
  8. Определение продуктов, которые появляются чаще всего и отображения them.

Вы могли бы, в самом деле, делать все, что в один большой запрос к базе данных, или вы могли бы разделить его на несколько разных запросов.В любом случае, он может бежать очень быстро, когда ваша база данных содержит 20 позиций, 12 клиентов, 18 отрядов и 67 позиций заказа (то есть элементов в корзины для покупок).Ноесли он не написал и запрограммировано эффективно, то это будет намного медленнее, с 500 товаров, 10000 клиентов, 14.000 заказов и 100.000 пунктов порядка, и это будет замедлять page.

Это очень сложный пример, но он показывает, какой материал идет за кулисами и почему, казалось бы, безобидные немного функциональности может смолоть сайт, чтобы halt.

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

Is It My Database

Есть сейчас несколько способов анализа скорости вашего сайта, в том числе Firebug плагин in для Firefox, инструменты для разработчиков в Google Chrome (нажмите Shift Control I, а затем перейдите к ресурсам → Включить отслеживанию ресурсов) и Yahoo YSlow.Есть также сайты, такие как WebPagetest, где вы можете ввести URL, и она будет время от выбранного вами location.

Все эти инструменты покажу вам схему всех различных ресурсов (HTML, изображения, CSS и JavaScript файлов), используемых вашей страницы, а также как долго каждый взял для загрузки.Они также будут разрушаться время, необходимое для выполнения поиска DNS (т.е. для преобразования доменных имен в IP-адреса), время, необходимое для подключения к серверу, время ожидания для вашего сервера, чтобы ответить (так называемый “время до первогобайт “), и время, проведенное получения (т.е. загрузка) data.

Многие веб-страницы построены во всей их полноте веб-сервера, в том числе PHP, который обращается к базе данных, а затем отправили в браузере все сразу, так что любая база данных задержек может привести к длительному времени ожидания, и приема / загрузкиВремя будет пропорциональна количеству отправленных данных.Таким образом, если 20 Кб HTML странице быстрого соединения, время ожидания 5 секунд, а время загрузки 0,05 секунды, то задержка будет происходить на сервере, что и страница в настоящее время built.

Не все веб-страницах, как это, хотя.PHP flush функция заставляет сервер для отправки HTML, что он уже построил в браузере сразу.Любые дальнейшие задержки бы тогда в приемной времени, а не ожидание time.

В любом случае, вы можете сравнить ожидания приема / time для подозреваемых медленным и сложным веб-страницы на время ожидания для тех же размеров HTML страницы (или изображений или других статических ресурсов) на одном сервере, в то же время.Это исключает возможность медленного Интернет-соединения или перегруженных серверов (оба из которых может вызвать задержки) и позволяют сравнивать времена, принятых для построения страниц.Это не точноенаука, но она должна дать вам некоторое представление о том, где вещи проходят up.

На скриншотах ниже показаны анализа предусмотреть в Developer Tools в Google Chrome на 20 веб-страницу Кб против 20 изображений Кб.Веб-страница ждали 130 миллисекунд (мс) и загрузили в течение 22 мс.Изображение ждали в течение 51 мс и загрузили в течение 11 мс.Скачать / получения раз примерно такие же, как и ожидалось, но сервер тратит около 80 мс дополнительно на обработку и построение веб-страницы, которые влечет за собой выполнение PHP и вызова database.

При выполнении этих тестов, анализа статических ресурсов само по себе и нажмите кнопку “Обновить”, так что вы не получаете быстрый кэшированные версии.Кроме того, запускать каждый несколько раз, чтобы убедиться, что вы не смотрите на статистическую аномалию.Третий скриншот ниже показывает, что WebPagetest указывает почти в два раза время Google на той же странице в то же время, демонстрируя, что с помощью тех же условиях для всех тестов important.

Screenshot Анализ ресурсов, используя инструменты Google в Chrome Developer, показывающий 130-мс время ожидания для веб-page.

Waiting and receiving time for an image Же инструмент, показывающий 51-мс время ожидания для изображения примерно в то же size.

Screenshot Анализ ресурсов и той же страницы с WebPagetest, с 296-мс время ожидания и 417-м общий time.

Как Время запроса к базе данных в PHP и MySQL

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

function StartTimer ($what='') {
 global $MYTIMER; $MYTIMER=0; //global variable to store time
 //if ($_SERVER['REMOTE_ADDR'] != '127.0.0.1') return; //only show for my IP address

 echo '<p style="border:1px solid black; color: black; background: yellow;">';
 echo "About to run <i>$what</i>. "; flush(); //output this to the browser
 //$MYTIMER = microtime (true); //in PHP5 you need only this line to get the time

 list ($usec, $sec) = explode (' ', microtime());
 $MYTIMER = ((float) $usec + (float) $sec); //set the timer
}
function StopTimer() {
 global $MYTIMER; if (!$MYTIMER) return; //no timer has been started
 list ($usec, $sec) = explode (' ', microtime()); //get the current time
 $MYTIMER = ((float) $usec + (float) $sec) - $MYTIMER; //the time taken in milliseconds
 echo 'Took ' . number_format ($MYTIMER, 4) . ' seconds.</p>'; flush();
}

StartTimer запускает таймер, а также печатает все, что вы пытаетесь времени.Во второй строке идет проверка вашего IP-адреса.Это очень полезно, если вы делаете это (временно) на живой сайт и не хотите, чтобы все в мире, чтобы увидеть сроках сообщений.Раскомментируйте строкиудаление начальных //, и заменить 127.0.0.1 с IP вашего address.StopTimer останавливает таймер и отображает время taken.

Большинство современных веб-сайтов (особенно хорошо запрограммированный с открытым исходным кодом из них) есть много PHP файлов, но запрос к базе данных только в нескольких местах.Поиск по всем файлам PHP для Вашего сайта mysql_db_query или mysql_query.Многие разработки программного обеспечения пакетов, таких как BBEdit имеют функции для выполнения поиска, как это, или, если вы знакомы с командной строкой Linux, попробуйте следующее:grep mysql_query `find . -name \*php`

Вы можете найти что-то вроде этого:

mysql_query ($sql);

Для WordPress 3.0.4, это в строке 1112 в файле wp-includes/wp-db.php.Вы можете копировать и вставлять функции выше, в верхней части этого файла (или в любой файл PHP, который включен каждой страницы), а затем добавьте таймер до и после mysql_query линии.Это будет выглядеть так:

StartTimer ($query);
$this->result = @mysql_query( $query, $dbh );
StopTimer();

Ниже приводится частичный скриншот это делается на совершенно новой установки WordPress.Она работает около 15 запросов к базе данных в общей сложности, каждый из которых принимает около 0,0003 секунды (0,3 мс), поэтому, менее чем за 5 мс в общем, что и следовало ожидать для пустой database.

Screenshot Это показывает, и раз все запросы к базе данных, что WordPress runs.

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

Вы также можете сделать и другие интересные вещи с ним: вы можете видеть, как быстро ваш компьютер по сравнению с моим.Подсчет до 10 миллионов берет мой компьютер 2,9420 секунды.Мой веб-сервер работает немного быстрее на 2,0726 секунды:

StartTimer ('counting to 10000000');
for ($i=0; $i<10000000; $i++); //count to a high number
StopTimer();

Заметки о Results

Эта техника дает вам только сравнительные результаты.Если ваш сервер был очень занят в данный момент, то все запросы будет медленнее, чем обычно.Но вы должны по крайней мере, были в состоянии определить, как долго быстрого запроса занимает на вашем сервере (может быть от 1 до 5 мс), и, следовательно, определить медленный выход из них (200 мс) и очень медленных (1 секунда).Вы можете запустить тест несколько раз в течение часа или день (но не сразу после — см. ниже раздел о базе данных кэш-памяти), чтобы убедиться, что вы не получаете fluke.

Это также будет, скорее всего, сильно испортить графическое представление страницы.Он также может дать вам PHP предупреждения типа “не могу изменить информацию заголовка.Заголовки уже отправлены … ” Это потому, что сроки сообщений в конфликт с куки и сессии заголовки.Пока странице по-прежнему отображается ниже предупреждений, вы можете игнорировать их.Если страница не отображается на всех, то вам может понадобиться, чтобы положить StartTimer и StopTimer вокруг конкретных блоков кода, а неоколо mysql_query.

Этот метод является по существу быстро взломать, чтобы показать некоторые приблизительные результаты.Это не должны быть оставлены на живой website.

Что еще это может быть

Если ваши запросы к базе данных, не особенно медленным, но строительство веб-странице, то вы можете просто плохо написанный код.Вы можете поставить таймер заявлениями выше вокруг все больше и больше блоков кода, чтобы увидеть, если и когда задержка происходит.Может быть, надо пройтись 10000 полный строк информации о продукте, даже если вы показываете только 20 продуктов names.

Profiling

Если вы все еще сбиты с толку и / или хотите более полную и точную информацию о том, что происходит в вашем коде, вы можете попробовать отладки и профилирования инструментов, таких как Xdebug, которая анализирует локальную копию вашего сайта.Он может даже визуально показать, где узкие места occurring.

Индексирование базы данных Tables

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

Давайте посмотрим теперь на некоторых простых улучшений для ускорения up.Чтобы сделать это, вам нужно способ запуска запросов к базе данных с базой данных.Многие администрирование сервера пакетами (например, Cpanel или Plesk) обеспечивают PHPMyAdmin для этой задачи.Кроме того, можно загрузить что-то вроде phpMiniAdmin на ваш сайт, это один файл PHP позволяет вам взглянуть на вашу базу данных и выполнять запросы.Вы должны будете ввести имя базы данных, имя пользователя и пароль.Если вы не знаете этого, вы легко можете найти их в файл конфигурации вашего сайта, если он есть (в WordPress, это WP-config.php).

Среди запросов к базе данных, что ваша страница работает, вы, наверное, видели несколько WHERE условиях.Э …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.