Как проверить скорость запросов MySQL, с меньшими несоответствиями?

Мне нужен простой способ проверить SQL-запросы для скорости. Я не беспокоюсь об аппаратных отличиях, мне в основном нужно относительное число.

Это то, что я делал с PHP (его нечеткие, но работает):

// CONNECT TO DB HERE $sub = new YomoSubscription(95,783); $t = microtime(TRUE); // contains the SQL db call i'm testing $fp = $sub->generateFingerprint(); echo microtime(TRUE)-$t; 

ПРОБЛЕМА, с которой я сталкиваюсь, заключается в том, что иногда при первоначальном подключении / запуске мой тест занимает, например, 1,25 с. Однако при последующих подключениях он занимает 0,004 секунды … Почему это ?

Я уверен, что кеш запросов MySQL отключен в my.ini:

 query_cache_size=0 

Related of "Как проверить скорость запросов MySQL, с меньшими несоответствиями?"

Ваш первый запрос может быть медленнее, потому что MySQL фактически нажимает диск на первый запрос, а не на второй.

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

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

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

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

Попробуйте использовать SELECT BENCHMARK (время, запрос)

Дополнительная информация: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark

Предположим, что:

  1. вы не используете постоянное соединение
  2. база данных, установленная на сервере, на котором выполняется статистика (нет сетевого подключения)
  3. никто не использует базу данных (блокировки строк / таблиц)
  4. никакой другой тяжелый процесс не запущен
  5. и т.д….

Если вы действительно хотите проверить свой запрос, вы должны сделать следующее:

 $database->query('SET SESSION query_cache_type = OFF'); 

Затем вы запускаете запрос 2-3 раза в цикле (для «разогрева» сервера).

И только тогда:

 $database->query('FLUSH STATUS'); #If you use the stats to profile your query $t = microtime(TRUE); $fp = $sub->generateFingerprint(); echo microtime(TRUE)-$t; $database->query('SHOW STATUS'); 

И вуаля!! :)))

BTW, скорость запроса – один из параметров для чтения. Узнайте, как читать очень ценную информацию, возвращенную SHOW STATUS и EXPLAIN ... Это будет намного лучше.

Вот ссылка, которую вы полюбите: http://www.xaprb.com/blog/2006/10/12/how-to-profile-a-query-in-mysql/

Наслаждаться. 🙂

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