Анализировать время выполнения запросов к базе данных MySQL? - PullRequest
4 голосов
/ 05 июня 2009

Я использую базу данных MySQL с phpMyAdmin в качестве внешнего интерфейса (я еще не уверен, что у меня есть удаленный / клиентский доступ). У меня есть скрипт, который запрашивает базу данных и хотел бы увидеть, сколько времени занимает каждый запрос? Какой самый простой способ сделать это? Могу ли я установить другое приложение PHP на сервере?

Ответы [ 3 ]

1 голос
/ 05 июня 2009

Для большинства приложений, над которыми я работаю, я включаю вывод профилирования запросов, который можно легко включить в среде разработки. Это выводит SQL, время выполнения, трассировку стека и ссылку для отображения вывода объяснения. Также выделяются запросы, выполняющиеся дольше 1 секунды.

Хотя вам, вероятно, не нужно что-то более сложное, вы можете получить достаточно хорошее представление о времени выполнения запросов, написав функцию на PHP, которая оборачивает выполнение запроса и сохраняет отладочную информацию в сеансе (или просто выводит ее ). Например:

function run_query($sql, $debug=false, $output=false) {
    $start = microtime(true);
    $q = mysql_query($sql);
    $time = microtime(true) - $start;

    if($debug) {
        $debug = "$sql<br/>$time<br/><br/>";
        if($output) {
            print $debug;
        } else {
            $_SESSION['sql_debug'] .= $debug;
        }
    }

    return $q;

 }

Это просто грубая идея. Вы можете настроить его так, как хотите.

Надеюсь, это поможет -

1 голос
/ 05 июня 2009

Если у вас есть доступ к MySQL файлам конфигурации, вы можете включить general query log и slow query log.

Подробнее см. здесь .

Поскольку, как я думаю, 5.1.6, вы также можете сделать это во время выполнения:

SET GLOBAL long_query_time = 10  /* which queries are considered long */
SET GLOBAL slow_query_log = 1

, но все равно попробуйте, я не помню точную версию, когда она появилась.

0 голосов
/ 30 июля 2009

Вы должны установить long_query_time на 1, так как установка его на 10 исключит большинство, если не все ваши запросы. В приглашении mysql введите

set @@ long_query_time = 1;

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