You’re probably aware of the fact that Magento is a very heavy application. It is especially hard on database, and performs a lot of queries in order to function properly (which it does not a lot of times, unfortunately). Sooner or later, a need will arise for you to check what queries are being performed on the page. Either you’re hunting for the slow ones, or are trying to optimize their number. There is a simple way to have this working.
Magento 2 comes with a cool console suite of commands than can be invoked by running php bin/magento
in the root of your application. One of the commands listed is dev:query-log:enable
. Let’s see what it can do.
> bin/magento dev:query-log:enable --help
Usage:
dev:query-log:enable [options]
Options:
--include-all-queries[=INCLUDE-ALL-QUERIES] Log all queries. [true|false] [default: "true"]
--query-time-threshold[=QUERY-TIME-THRESHOLD] Query time thresholds. [default: "0.001"]
--include-call-stack[=INCLUDE-CALL-STACK] Include call stack. [true|false] [default: "true"]
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Help:
Enable DB query logging
Options are more or less self-explanatory. One of the better ones is --include-call-stack=false
which will remove call stack for each query logged, and leave you with a simple list of SQL queries.
It’s also useful for logging of slower queries (without using MySQL’s slow query logging) with --query-time-threshold
and --include-all-queries
options.
To conclude, by running
> bin/magento dev:query-log:enable
Magento will start writing all the queries to var/debug/db.log file (Magento var
folder, not linux).
Don’t foget to stop query logging by running dev:query-log:disable
when you don’t need it anymore.
Happy debugging.
Cheers.