Профилирование в MySQL

Недавно познакомился с интересными возможностями MySQL:

Это встроенные в MySQL средства профилирования. Для первого необходимо настроить время выполнения запроса, превышая которое запрос считается медленным, и путь, куда сохранять запросы время выполнения которых превысило указанное значение. Для второго необходимо изменять код приложения: включить профилирование при старте приложения и показать результаты при его завершении.

Включить профилирование: «set profiling=1;»

Показать результат: «show profiles;»

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

Но тут, как нельзя кстати, в php есть функция register_shutdown_function, с помощью которой можно выполнить любую функцию по завершении работы всего скрипта. Выглядеть решение будет примерно следующим образом:

mysql_query("set profiling=1;");

function show_profiles() {
    $resource = mysql_query("show profiles;");
    // тут форматированный вывод
}

register_shutdown_function('show_profiles');

Приведенный код нужно разместить после успешного коннекта к БД.

Конечно, в проекте на ZF или любом другом фреймворке можно воспользоватся и встроенными в фреймворк средствами профилирования, но:

  1. существуют еще проекты без фреймворков с сотней скриптов в корневой папке;
  2. Slow Query Log пригодится в любом случае.