HomeMySQL Page 5 - Administering MySQL: International Usage and Log Files
4.8.5 The Slow Query Log - MySQL
If you need to administer MySQL, this article gets you off to a good start. In this section, we discuss localization and international usage, as well as the MySQL log files. The sixth of a multi-part series, it is excerpted from chapter four of the book MySQL Administrator's Guide, written by Paul Dubois (Sams; ISBN: 0672326345).
When started with the --log-slow-queries[=file_name] option, mysqld writes a log file containing all SQL statements that took more than long_query_time seconds to execute. The time to acquire the initial table locks are not counted as execution time.
If no file_name value is given, the default is the name of the host machine with a suffix of -slow.log. If a filename is given, but doesn't contain a path, the file is written in the data directory.
A statement is logged to the slow query log after it has been executed and after all locks have been released. Log order may be different from execution order.
The slow query log can be used to find queries that take a long time to execute and are therefore candidates for optimization. However, examining a long slow query log can become a difficult task. To make this easier, you can pipe the slow query log through the mysqldumpslow command to get a summary of the queries that appear in the log.
If you also use the --log-long-format when logging slow queries, then queries that are not using indexes are logged as well. See Section 4.2.1, "mysqld Command-Line Options."
4.8.6 Log File Maintenance
The MySQL Server can create a number of different log files that make it easy to see what is going on. See Section 4.8, "The MySQL Log Files." However, you must clean up these files regularly to ensure that the logs don't take up too much disk space.
When using MySQL with logging enabled, you will want to back up and remove old log files from time to time and tell MySQL to start logging to new files. See Section 4.6.1, "Database Backups."
On a Linux (Red Hat) installation, you can use the mysql-log-rotate script for this. If you installed MySQL from an RPM distribution, the script should have been installed automatically. You should be careful with this script if you are using the binary log for replication! (You should not remove binary logs until you are certain that their contents have been processed by all slaves.)
On other systems, you must install a short script yourself that you start from cron to handle log files.
You can force MySQL to start using new log files by using mysqladmin flush-logs or by using the SQL statement FLUSH LOGS. If you are using MySQL 3.21, you must use mysqladmin refresh.
A log flushing operation does the following:
If standard logging (--log) or slow query logging (--log-slow-queries) is used, closes and reopens the log file (mysql.log and ´hostname´-slow.log as default).
If update logging (--log-update) or binary logging (--log-bin) is used, closes the log and opens a new log file with a higher sequence number.
If you are using only an update log, you only have to rename the old log file and then flush the logs before making a backup. For example, you can do something like this:
shell> cd mysql-data-directory
shell> mv mysql.log mysql.old
shell> mysqladmin flush-logs
Then make a backup and remove mysql.old.
Please check back next week for the conclusion of this article.