Быстродействие базы данных в проектах играет немаловажную роль, оптимальные запросы к БД пожалуй являются ключом к успешной реализации взаимодействия с данными. Тенденция универсальных движков, фреймворков, и т.д. намного облегчает разработку проектов, однако зачастую существует и другая сторона медали. Избыточное использование различных API для фреймворка обворачивается большими запросами к базе данных, которая при большом количестве выстраивает эти запросы в очередь, а очередь в свою очередь (как и в жизни:)) отнимает время. Однозначно запросы можно всячески кэшировать, но перед этим хорошо бы разобраться с ними в корне. В данной статье мы говорим о конкретной СУБД – MySQL, в виду её распространённости использования в качестве базы данных для различных интернет-проектов.
Итак, допустим, есть необходимость сделать мониторинг запросов в базу данных, для этого существуют множество инструментов. Однако есть возможность сделать лог SQL запросов стандартными средствами сервера MySQL. Для этого в конфигурационном файле MySQL необходимо дописать несколько строчек (по умолчанию скорее всего их там нет). Как правило это следует делать на локальной машине, т.к. на боевом сервере в лог-файле получиться полный бардак, да и размер его получиться великоват.
Находим конфигурационный файл MySQL сервера, в моём случает это /etc/my.cf, дописываем в него следующие строки,
для Unix систем:
# общий лог log=/var/mysql-logs/mysql-queries.log # ошибки log-error=/var/mysql-logs/mysql-errors.log # сложные запросы log-slow-queries=/var/mysql-logs/mysql-slow-queries.log
таким же образом для Windows систем:
log = C:/mysql-logs/mysql-log.log log-error = C:/mysql-logs/mysql-errors.log log-slow-queries = C:/mysql-logs/mysql-slow-queries.log
При этом следует предварительно создать каталог (в нашем примере это /mysql-logs) по указанному пути, задать права на запись. Параметры указанные в конфигурационном файле вступают в силу после перезапуска сервера MySQL.
В документации MySQL на оф. сайте так же есть материал об этом — The General Query Log