Несомненно, изменение конфигурации сервера или оптимизация запросов - это хорошее решение. Но как измерить результаты изменений и проверить, привело ли это к существенному повышению производительности? Парни из MySQL AB предусмотрели и это - MySQL поставляется с тестирующим ПО, которое называется (а как же иначе?) MySQL Benchmark Suite, и делает именно то, что указано в названии: загружает сервер, чтобы определить слабые места, проверить соответствие стандартам SQL и измерить производительность.
Исследуем альтернативы
Программа MySQL Benchmark Suite далеко не единственная в своем роде. Существуют альтернативы, такие как программа SuperSmack, доступная на http://www. mysql.com/portal/software/item-222.html, и программа Open Source Database Benchmark, доступная на http://osdb.sourceforge.net. Полный список средств тестирования доступен на http://ww.mysql.com/portal/software/ benchmarks/index.html и http://www.wiley.com/legace/copmbooks/pachev/.
Чтобы запустить MySQL Benchmark Suite, на вашей системе должен быть установлен Perl и пакет Perl DBI, а также драйвер баз данных MySQL (DBD). Если вы используете систему семейства UNIX, вполне возможно, что эти пакеты уже установлены. Их присутствие можно проверить простым способом - запустить в командной строке следующую команду.
Листинг 16.17.
[user@host]$ perl -e "use DBI"
Если Perl завершается без ошибки, можно быть уверенным, что модуль установлен. Если это не так, вам придется скачать его с http://www.cpan.org/ и установить в соответствии с инструкциями по установке для вашей системы. Детальнее об этом процессе говорится в главе 20, "MySQL и Perl", где обсуждается разработка приложений с Perl и MySQL.
MySQL Benchmark Suite находится в директории sql-bench/ вашей инсталляции MySQL, и содержит сценарии и данные для разных тестов. (Для получения более подробной информации об этих тестах см. врезку в разделе "Тестирование времени выполнения"). В таблице 16.1 содержится список всех сценариев с кратким описанием их работы.
Самый простой способ начать работу с MySQL Benchmark Suite - это перейти в ди­ректорию sql-bench/ и запустить все тесты сценарием run-all-tests.
Листинг 16.18.
[user@host]# /usr/local/mysql/sql-bench/run-all-tests -server=mysql 

Тестирование времени выполнения
MySQL Benchmark Suite поддерживает Висконсинский тест - широко распро­страненный тест реляционных СУБД. Этот контролируемый однопользовательский эксперимент, использующий т.н. "искусственные" данные вместо "настоящих", главным образом разработан для измерения производительности запросов с использованием метрики времени запроса. Тесты включают выборки, вставки, обновления, объединения таблиц и совмещение данных.
описание
На рисунке 16.1показан возможный результат.
Как видите, этот сценарий запускает все тесты, перечисленные в таблице 16.1, и воз­вращает время, затраченное на каждый тест. Больше информации о подробностях каждого теста можно получить, запустив соответствующий сценарий без каких-либо параметров, - большинство сценариев перед работой выводят краткую информацию об их назначении.
При желании также можно запустить только определенный тест, вызвав соответствующий сценарий. Рассмотрим следующий пример, где для определения времени соединения с сервером и отправки данных запускается тест test-connect.
Листинг 16.19.
[user@host]# /usr/local/mysql/sql-bench/test-connect На рис. 16.2 показано, как это может выглядеть.
Среди разных тестовых сценариев, включенных в MySQL Benchmark Suite, примечателен тест crash-me - специальная утилита, работа которой заключается в отправке серверу большого количества допустимых SQL-запросов и, в соответствии с ответом, определении набора функций, возможностей и ограничений. Рис. 16.3 иллюстрирует результат работы crash-me.
описание
Если вы хотите увидеть результаты, полученные в сравнительном тесте MySQL против других программ, перейдите на http://www.mysql.com/information/crash-me.php.

Покупатель, будь осторожен!
При тестировании crash-me сервер находится на пределе своих возможностей и даже может выйти из строя. Поэтому данный тест должен использоваться очень аккуратно, причем не на работающем сервере.

Важно понимать, что тесты были проведены MySQL AB по своим, выгодным критериям, поэтому все результаты следует воспринимать с изрядной долей критики. Это относится ко многим другим производителям, которые будут говорить об их собственных или других "независимых" тестах, якобы доказывающих превосходство их продукта над другими. Тем не менее, всегда интересно анализировать результаты, которые, без сомнения, добавят жару в "баталиях" на форумах, посвященных базам данных.
описание
Резюме
В этой главе рассматривалась важная тема оптимизации рабочих характеристик MySQL. Были раскрыты различные методики оптимизации запросов, включая следующие:
■ использование индексов для ускорения доступа к часто используемым столбцам;
■ использование нового кэша запросов для улучшения времени реакции на запрос;
■ анализ запросов с помощью команды EXPLAIN SELECT для понимания и после­дующего улучшения планирования запросов;
■ использование серверных переменных, обобщенных функций и сортировок для увеличения эффективности многотабличных запросов;
■ создание подмножеств данных с помощью команд INSERT...SELECT и временных таблиц для упрощения обработки сложных запросов;
■ выбор размера полей и удаление ненужных таблиц из структуры базы данных;
■ тонкая настройка кэша сервера и буферов памяти для получения большей произ­водительности;
■ тестирование производительности сервера с помощью MySQL.