Мониторим SQL-запросы в реальном времени

В некоторых СУБД, например Microsoft SQL Server, есть средства для просмотра абсолютно всех SQL-запросов к базе данных (в MS SQL он называется Profiler). Это мощное средство, весьма полезно при отладке SQL-запросов как для программистов, так и для администраторов баз данных.

Когда вы накопили опыт работы с MySQL, у вас может возникнуть вопрос, а как проделать такую штуку с ним? Например, как увидеть, какие SQL-запросы генерирует WordPress или phpBB?

Во-первых, нужно включить журналирование запросов MySQL

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

Откройте конфигурационный файл MySQL (в Ubuntu, к примеру, это /etc/mysql/my.cnf). Найдите секцию “Logging and Replication”:

    #
    # * Logging and Replication
    #
    # Both location gets rotated by the cronjob.
    # Be aware that this log type is a performance killer.

    log = /var/log/mysql/mysql.log

Здесь нужно просто раскомментировать переменную “log”. Перезапустим MySQL:
sudo /etc/init.d/mysql restart
Теперь мы готовы отслеживать запросы в реальном времени. Откройте новый терминал и запустите эту команду:
tail -f /var/log/mysql/mysql.log
Теперь запустите свое приложение. В вашем терминале сразу побегут строчки, соответствующие SQL-запросам к вашей базе данных (если же нет, то проверьте, что в настройках вашего терминала включены функции авто-скроллинга и истории).

Оказалось, что phpbb3 имеет довольно хорошо оптимизированный SQL-код. WordPress же, напротив, крайне неэффективен.

Похожие статьи

One thought on “Мониторим SQL-запросы в реальном времени”

Leave a Reply

Your email address will not be published. Required fields are marked *