Как найти более медленные MySQL запросы из множества маленьких запросов - PullRequest
3 голосов
/ 27 июля 2011

Мне интересно, есть ли у кого-нибудь предложение для моей ситуации:

У меня есть процесс, который запускает многие десятки тысяч запросов. Весь процесс занимает от 5 до 10 минут. Я хочу знать, какие запросы выполняются медленнее, чем остальные, но я знаю, что ни один из них не выполняется дольше, чем, скажем, 5 секунд (при таком количестве запросов это было бы очень заметно в моих журналах). Как мне узнать, какие из них занимают больше всего времени, и те, которые при оптимизации дадут наилучшие результаты?

БОЛЬШЕ ДЕТАЛЕЙ:

Мои запросы выполняются однопоточными и синхронными, и я бы сказал, 70% SELECT и 30% INSERT / UPDATE. Мне нужно собрать вместе головы и определить, можно ли разделить работу на разные подразделения, которые можно запускать одновременно - я не уверен ...

Все запросы представляют собой либо простые операторы INSERT, операторы UPDATE с одним свойством, либо операторы SELECT по первичному или внешнему ключу, либо ограничение ANDed из двух полей.

ОПИСАНИЕ ВЫПУСКА:

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

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

Взгляните на медленный журнал запросов MySQL . Вы можете настроить порог того, что считается «медленным».

1 голос
/ 27 июля 2011

По сути, вы отслеживаете время от начала запроса до конца запроса, например:

function getmicrotime() {
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
}

$query_start = getmicrotime();
$query = 'SELECT ...';
mysql_query($query, $connect); 
$query_end = getmicrotime();
if ($query_end - $query_start > 2) { 
    // add query to log
    your_slow_queries_logger($query);
}

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

Я лично регистрирую свои медленные запросы, используя syslog

0 голосов
/ 27 июля 2011

Если вы серьезно настроены оптимизировать MySQL, прочитайте эту книгу

Высокопроизводительный MySQL: оптимизация, резервное копирование, репликация и многое другое

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...